我知道这是一个微不足道的问题,但从glGet()
的文档开始,我还没有找到任何似乎有帮助的信息。我正在使用我的纹理作为精灵,因此以纹素/像素跟踪它们的大小至关重要。
当我使用glTexImage2D()
创建纹理时,我需要将像素数据数组的大小传递给它。但OpenGL是将它存储在任何地方,还是我必须在我的代码中跟踪它们? (这感觉很尴尬,因为客户端代码仍然能够使用glTexImage2D()
/ glTexSubImage2D()
/ glCopyTexImage2D()
等来覆盖纹理,而不会相应地改变大小,从而导致视觉扭曲。 )
答案 0 :(得分:6)
正如Bahbar所说,glGetTexLevelParameteri
可用于查询GL_TEXTURE_WIDTH
。但是,我强烈建议不要将此作为一般方法。首先,你可以通过glGet*
调用来停止管道,因为驱动程序必须让GPU完成它正在做的事情,弄清楚你的问题并返回答案。结果是一个巨大的性能损失。
所以你最好在你自己的代码中管理这样的状态。大概你有一个Sprite
类(或结构或等价物),带有纹理句柄。没有什么可以专门用几个字节来跟踪宽度和高度,它可以让你不必点击驱动程序或GPU来获取信息。
至于glTeSubImage*
,这是关于何时以及如何更新纹理的政策决定。
答案 1 :(得分:5)
如果您真的想依赖GL,请使用
glGetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, ¶m)
也就是说,我不确定客户端代码在您的上下文中意味着什么,但是如果您希望编写允许客户直接操作您自己的状态的中间件,那么您就遇到了麻烦。