将新纹理加载到已定义的纹理名称中

时间:2008-12-01 21:02:24

标签: opengl textures

我有一个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);

第一张图片将按预期显示。但是,所有图像在第一个图像之后加载,显示为全黑图像。

我做错了什么?

4 个答案:

答案 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”。