• Advertisement
Sign in to follow this  

[SOLVED] trouble with glGenTexture and changing textures

This topic is 3195 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I had this working once before, but now I cannot seem to get it working and it's driving me nuts. A second set of eyes may see what I can't. Every time I run the program the message "texture ID == NULL" shows, and I get a white texture. I have no idea why it is becoming NULL, as I am creating the texture, then changing the RGB values to it, along with the mipmap. So yea if anyone can figure out why I keep getting a blank white image it would be greatly appreciated.
[source lang=cpp]
int main(int argc, char** argv)
    char FilePath[25];

    printf("Enter file name: ");
    cin>> FilePath;
    /*InitAVI(FilePath, pGetFrame, iWidth, iHeight, FirstFrame, TotalFrames);
    if(pGetFrame == NULL){
        printf("Error: pGetFrame returned NULL\n");
        return 0;
    printf("Width: %i\nHeight: %i\nTotal Frames: %i\n", iWidth, iHeight, TotalFrames);*/
    glEnable (GL_TEXTURE_2D); /* enable texture mapping */
    //glEnable (GL_DEPTH_TEST);
    //glPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
    if(GetLastError() == GL_INVALID_VALUE || GetLastError() == GL_INVALID_OPERATION) printf("Error: cannot create texture\n");

    //int histR[256], histG[256], histB[256];
    GetBMPDimensions(FilePath, g_Width, g_Height);
    rgb = new byte[g_Width*g_Height*3];
    grey = new byte[g_Width*g_Height*3];
    if(!LoadBMPFile(FilePath, g_TexID, rgb, g_Width, g_Height)) printf("Error: cannot load image\n");
    RGBToGreyScale(rgb, grey, g_Width, g_Height);
    //CreateCumulHistogram(grey, histR, histG, histB, g_Width, g_Height, GREY_CLR);
    //NormalizeHistogram(grey, histR, histG, histB, g_Width, g_Height);
    ChangeTexture(g_TexID, grey, g_Width, g_Height);

    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
    glutInitWindowSize(g_Width, g_Height);
    glutInitWindowPosition(512 - g_Width / 2, 384 - g_Height / 2);
    glutCreateWindow("FPS: ");
    if(!glIsTexture(g_TexID)) printf("Error: texture ID == NULL\n");
    return 0;

bool ChangeTexture(GLuint TexID, byte* rgb, int iWidth, int iHeight)
    glBindTexture(GL_TEXTURE_2D, TexID); // Bind the ID texture specified by the 2nd parameter

    // Finally we define the 2d texture
    glTexImage2D(GL_TEXTURE_2D, 0, 3, iWidth, iHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, rgb);

    // And create 2d mipmaps for the minifying function
    gluBuild2DMipmaps(GL_TEXTURE_2D, 3, iWidth, iHeight, GL_RGB, GL_UNSIGNED_BYTE, rgb);

    return true;

void CreateTexture(GLuint TexID)
    glGenTextures(1, &TexID); //generate 1 texture

    glBindTexture(GL_TEXTURE_2D, TexID); // Bind the ID texture specified by the 2nd parameter

    // The next commands sets the texture parameters
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); // If the u,v coordinates overflow the range 0,1 the image is repeated
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); // The magnification function ("linear" produces better results)
    glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST); //The minifying function

    glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); // We don't combine the color with the original surface color, use only the texture map.

EDIT: I got it working now, i was missing some enables and initializing a window. [Edited by - scwizzo on May 28, 2009 11:32:20 PM]

Share this post

Link to post
Share on other sites
Sign in to follow this  

  • Advertisement