【发布时间】:2013-11-25 09:31:12
【问题描述】:
这是代码中唯一可能有问题的部分:
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 上的生活是美好的(奇怪的是)。
【问题讨论】:
-
渲染到屏幕上能用吗?
标签: opengl