这是代码中唯一可能有问题的部分:
GLuint tex_name;
glGenTextures(1, &tex_name);
// set id to the gl_texture_id map for later use
gl_texture_id[t] = tex_name;
// bind texture
glBindTexture(GL_TEXTURE_2D, tex_name);
// set texture filtering parameters
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glGenerateMipmap(GL_TEXTURE_2D);
// load texture data
glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA8,t->width(),t->height(),0,GL_BGRA,GL_UNSIGNED_BYTE,t->data());
你能看出这段代码有什么问题吗?启用 glEnable(GL_TEXTURE_2D) 并没有什么不同。纹理坐标是正确的,片段和顶点着色器肯定是正确的。
已解决 这不是问题,我仍在使用 glTexImage2D (...) 之前的 glGenerateMipmap (...)。真正的问题是当我的图像为 GL_RGB 格式时,我以格式 GL_RGBA 传递。此外,我的 t->data() 数组是 height*width*sizeof(GL_FLOAT) 长,我将 GL_UNSIGNED_BYTE 作为类型参数传递,导致数据丢失。尽管这仍然有效,但实际上在 glTexImage2D 和 glGenerateMipmap 之前会导致对 Nvidia 硬件产生奇怪的影响,而在 ATI GPU 上的生活是美好的(奇怪的是)。