[SOLVED] trouble with glGenTexture and changing textures

Started by
-1 comments, last by scwizzo 14 years, 11 months ago
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;
    
    //createFromAvi(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);
    CreateTexture(g_TexID);
    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: ");
    
    /* THIS IS THE LINE IM TALKING ABOUT */
    if(!glIsTexture(g_TexID)) printf("Error: texture ID == NULL\n");
    
    time(&clock1);
    
    glutIdleFunc(displayFunc);
    glutDisplayFunc(displayFunc);
    glutMainLoop();
    
    
    //createFromAvi(FilePath);
    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_WRAP_T, GL_REPEAT);
    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]
/ Visual Studios 2010 / Codeblocks 10.05 / Windows 7 / Ubuntu 10.10 / - I might be wrong

This topic is closed to new replies.

Advertisement