我有一个OpenGl程序,我在其中使用纹理显示图像。我希望能够加载要显示的新图像。
在我的Init功能中,我打电话:
Gl.glGenTextures(1, mTextures);
由于每次只显示一个图像,我对每个图像使用相同的纹理名称。
每次加载新图像时,我都会调用以下内容:
Gl.glBindTexture(Gl.GL_TEXTURE_2D, mTexture[0]);
Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_LUMINANCE, mTexSizeX, mTexSizeY, 0, Gl.GL_LUMINANCE, Gl.GL_UNSIGNED_SHORT, mTexBuffer);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_LINEAR);
Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_LINEAR);
第一张图片将按预期显示。但是,所有图像在第一个图像之后加载,显示为全黑图像。
我做错了什么?
答案 0 :(得分:1)
我不认为问题出在你正在展示的代码中。您需要提供有关如何使用纹理绘制的更多信息,以及传递给glTexImage2D
的纹理数据的样子。你确定它在你拨打glTexImage2D
时仍然有效吗?
答案 1 :(得分:1)
绘图后你glDisable GL_TEXTURE_2D
了吗?如果禁用了2d纹理,则放置glColor4f(1,1,1,1);
至少应该看到白色矩形。它会帮助你找到问题所在。
答案 2 :(得分:0)
您何时使用这些纹理提交几何图形?我假设它与纹理加载交错,尽管你没有显示。当然,如果你要用不同的图像替换纹理名称,你根本不需要使用纹理名称,是吗?您可以在需要设置新纹理时执行glTextImage2D
调用,然后根据需要使用该纹理,从不涉及glBindTexture()
。
显而易见的事情当然是插入错误检查代码,OpenGL在操作失败时存储错误代码,并且在代码被应用程序读取之前不会覆盖此代码。有关详情,请参阅glGetError()。
答案 3 :(得分:0)
您正在寻找的功能是“glCopyTexImage2D”或“glCopyTexSubImage2D”。