用freeimage 生成opengl texture

用freeimage 生成opengl texture
thisIsInitGL(){
loadTexture();
}
///Now the interesting code:
loadTexture()
{
        FREE_IMAGE_FORMAT formato = FreeImage_GetFileType(textureFile,0);//Automatocally detects the format(from over 20 formats!)
        FIBITMAP* imagen = FreeImage_Load(formato, textureFile);
        
        FIBITMAP* temp = imagen;
        imagen = FreeImage_ConvertTo32Bits(imagen);
        FreeImage_Unload(temp);
        
        int w = FreeImage_GetWidth(imagen);
        int h = FreeImage_GetHeight(imagen);
        cout<<"The size of the image is: "<<textureFile<<" es "<<w<<"*"<<h<<endl; //Some debugging code
        
        GLubyte* textura = new GLubyte[4*w*h];
        char* pixeles = (char*)FreeImage_GetBits(imagen);
        //FreeImage loads in BGR format, so you need to swap some bytes(Or use GL_BGR).
        
        for(int j= 0; j<w*h; j++){
                textura[j*4+0]= pixeles[j*4+2];
                textura[j*4+1]= pixeles[j*4+1];
                textura[j*4+2]= pixeles[j*4+0];
                textura[j*4+3]= pixeles[j*4+3];
                //cout<<j<<": "<<textura[j*4+0]<<"**"<<textura[j*4+1]<<"**"<<textura[j*4+2]<<"**"<<textura[j*4+3]<<endl;
        }
        
        //Now generate the OpenGL texture object 
        
        glGenTextures(1, &texturaID);
        glBindTexture(GL_TEXTURE_2D, texturaID);
        glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA, w, h, 0, GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)textura );
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
        
        GLenum huboError = glGetError();
        if(huboError){
                
                cout<<"There was an error loading the texture"<<endl;
        }
        

}

你可能感兴趣的:(用freeimage 生成opengl texture)