GLuint TextureManager::loadCubemapTexture(const char* cube[], GLenum types[]) { GLuint cubemapTexture; glActiveTexture(GL_TEXTURE0); glGenTextures(1, &cubemapTexture); glBindTexture(GL_TEXTURE_CUBE_MAP, cubemapTexture); for (unsigned int i = 0; i < 6; i++) { unsigned int nWidth, nHeight; void* image = loadBMPRaw(cube[i], nWidth, nHeight); glTexImage2D( types[i], 0, //level GL_RGB8, //internal format nWidth, //width nHeight, //height 0, //border GL_BGR, //format - Not BMP uses BGR not RGB GL_UNSIGNED_BYTE, //type image); delete [] image; } glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); return cubemapTexture; }
int initEnvironment(void) { unsigned char * data; glShadeModel(GL_SMOOTH); glClearColor(0.0f, 0.0f, 0.0f, 0.5f); glClearDepth(1.0f); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glEnable(GL_TEXTURE_2D); data = loadBMPRaw(FILENAME, &g_TextureWidth, &g_TextureHeight, 0, 1); if (data) { glGenTextures(1, &g_TextureArray[g_ID]); glBindTexture(GL_TEXTURE_2D, g_TextureArray[g_ID]); //gluBuild2DMipmaps(GL_TEXTURE_2D, 3, g_TextureWidth, g_TextureHeight, GL_RGB, GL_UNSIGNED_BYTE, data); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, g_TextureWidth, g_TextureHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, data); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); free(data); return 1; } else { return(0); } }
SDLMOD_Surface* GLUTImageLoader::loadSDLSurface(const std::string& filename) { //SDLMOD_Surface *result = 0; SDLMOD_Surface *screen2; unsigned char *texture_data2 = NULL; unsigned int g_TextureWidth2 = 100; unsigned int g_TextureHeight2 = 100; int i, j; texture_data2 = loadBMPRaw(filename.c_str(), &g_TextureWidth2, &g_TextureHeight2, 1, 1); if (!texture_data2) { return NULL; } screen2 = SDLMOD_CreateRGBSurface(0, g_TextureWidth2, g_TextureHeight2, SDL_VIDEO_MODE_BPP, Rmask, Gmask, Bmask, Amask ); if (texture_data2) { //SDLMOD_LockSurface(screen2); for (j = 0; j < g_TextureHeight2; ++j) { for (i = 0; i < g_TextureWidth2; ++i) { unsigned char r, g, b; r = texture_data2[3 * j * g_TextureWidth2 + 3 * i]; g = texture_data2[3 * j * g_TextureWidth2 + 3 * i + 1]; b = texture_data2[3 * j * g_TextureWidth2 + 3 * i + 2]; //if (g_TextureHeight2 - j - 1 == 0) //{ // fprintf(stderr, "hit\n"); //} //SDLMOD_ext_putPixel(screen2, i, g_TextureHeight2 - j - 1, r, g, b); #ifdef _DEBUG if (i < 10 && filename == "fixedfont.bmp") { fprintf(stderr, "[GLUTImageLoader::loadSDLSurface] hit (%d, %d) (%X, %X, %X)\n", i, j, r, g, b); } #endif SDLMOD_ext_putPixel(screen2, i, j, r, g, b); } } //SDLMOD_UnlockSurface(screen2); free(texture_data2); } return screen2; }