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;
    }