#include #include #include #include #include GLuint loadBMP_custom(const char * imagepath); void EnableTransparency() { glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } GLuint LoadTexture(char *filename,int *textw,int *texth) { SDL_Surface *surface; GLuint textureid; int mode; surface = IMG_Load(filename); // Or if you don't use SDL_image you can use SDL_LoadBMP here instead: // surface = SDL_LoadBMP(filename); // could not load filename if (!surface) { return 0; } // work out what format to tell glTexImage2D to use... if (surface->format->BytesPerPixel == 3) { // RGB 24bit mode = GL_RGB; } else if (surface->format->BytesPerPixel == 4) { // RGBA 32bit mode = GL_RGBA; } else { SDL_FreeSurface(surface); return 0; } *textw=surface->w; *texth=surface->h; // create one texture name glGenTextures(1, &textureid); // tell opengl to use the generated texture name glBindTexture(GL_TEXTURE_2D, textureid); // this reads from the sdl surface and puts it into an opengl texture glTexImage2D(GL_TEXTURE_2D, 0, mode, surface->w, surface->h, 0, mode, GL_UNSIGNED_BYTE, surface->pixels); // these affect how this texture is drawn later on...glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // clean up SDL_FreeSurface(surface); return textureid; } void DrawTexture(int x, int y, GLuint textureid,int textw,int texth) { //printf("x: %d\ty: %d\tw: %d\th: %d\n", x, y, textw, texth); //int textw,texth; // tell opengl to use the generated texture name glBindTexture(GL_TEXTURE_2D, textureid); glEnable(GL_TEXTURE_2D); // make a rectangle glBegin(GL_QUADS); glTexCoord2d(0.0,0.0); glVertex2f(-1, -1); glTexCoord2d(1.0,0.0); glVertex2f(1, -1); glTexCoord2d(1.0,1.0); glVertex2f(1, 1); glTexCoord2d(0.0,1.0); glVertex2f(-1, 1); glEnd(); glDisable(GL_TEXTURE_2D ); } int main(int argc, char* args[]) { GLFWwindow* window; GLuint myglu; int textw, texth; /* Initialize the library */ /* GLFW */ if (!glfwInit()) return -1; /* SDL */ if (SDL_Init(SDL_INIT_VIDEO) < 0) printf("SDL Error"); /* Create a windowed mode window and its OpenGL context */ window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); if (!window) { glfwTerminate(); return -1; } /* Make the window's context current */ glfwMakeContextCurrent(window); // INIT myglu=LoadTexture("../img/tests/stones.bmp",&textw,&texth); // INIT END /* Loop until the user closes the window */ while (!glfwWindowShouldClose(window)) { /* Render here */ glClear(GL_COLOR_BUFFER_BIT); // RENDER DrawTexture(50,50,myglu,textw,texth); // RENDER END /* Swap front and back buffers */ glfwSwapBuffers(window); /* Poll for and process events */ glfwPollEvents(); } glfwTerminate(); return 0; }