我最近成功地用GL_TEXTURE_RECTANGLE制作了一个小测试应用程序。现在我试图将它集成到我的更大的项目中,但是当我在render函数中调用glBindTexture(GL_TEXTURE_RECTANGLE,_tex_id)时,它会导致GL_INVALID_OPERATION错误。纹理图像有时会显示一小部分秒,然后变成黑色并保持黑色。
我尝试使用两组顶点和片段着色器,一组用于3D场景,一组用于2D覆盖,但我以前从未尝试过,所以我不知道这是导致错误的原因,还是应该用不同的方法来处理。这些着色器都很好地编译和链接。
任何洞察力都是非常感激的,如果它有助于查看一些代码,请让我知道,我会发布其中的一些(尽管我认为这可能对任何人来说都是太多了,无法合理地查看)。
编辑: gDEBugger在调用glBindTexture()时中断,当单击断点时,属性窗口显示我的其他纹理之一的图片(一个正在由3D场景的着色器加载),它显示它试图加载纹理号1,但我知道这个数字已经用于绘制属性窗口中显示的相同的3D场景的纹理.为什么glGenTextures()要给我重叠的纹理标识号?这是正常还是可能是问题的一部分?
发布于 2012-08-26 01:37:46
黑色纹理是由于我没有转发一些顶点着色器输入(法线)通过片段着色器,即使我没有使用法线在任何2D覆盖着色器。当我为所有输入添加输出,并将它们转发到片段着色器时,纹理不再是黑色的,但它仍然在一秒后消失。这是因为我在呈现函数的末尾调用了glBindTexture(GL_TEXTURE_RECTANGLE,0),希望它能够清理一些状态.这显然是错误的做法,因为删除调用导致2D纹理停留在屏幕上。此外,使用glBindTexture目标调用GL_TEXTURE_RECTANGLE ()在纹理设置阶段似乎有效,但是在呈现GL_TEXTURE_RECTANGLE目标时会导致GL_INVALID_OPERATION错误。仅在呈现函数中将目标更改为GL_TEXTURE_2D使错误消失,现在一切看起来都很好。
https://stackoverflow.com/questions/12126520
复制相似问题