2013-04-16 141 views
3

我玩弄一些老的OpenGL代码和我有一些这方面的问题......OpenGLES:如何找到纹理大小

glGetTexParameterfv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &glW); 
glGetTexParameterfv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &glH); 

现在我是新来的OpenGL,但我猜这抓起纹理的高度和宽度。问题是,OpenGLES没有GL_TEXTURE_WIDTH或HEIGHT。现在我知道每个人都会给出的第一个答案是“你需要自己管理这个”,但是,这是一个相当大的代码库,需要一段时间才能确定。

我的问题是...

我怎样才能得到OpenGLES纹理的宽度/高度?

回答

3

明显的反应问题:你为什么需要这些信息?

抛开了一个明显的问题,纹理尺寸不直接暴露。你可能要做的最好的事情是使用glTexSubImage检查GL_INVALID_VALUE来搜索大小 - 我读GLES man page的是,width = height = 0不是错误条件,所以你可以寻找最大的(x,y),而不实际上传任何数据。

+0

我很欣赏你的反应,因为我确定它是正确的,但对于所有这些(OpenGL甚至是C)来说,这可能需要一些时间。所以,因为需要一些时间,所以我一直把它放在后台,直到我得到港口的工作,然后我会重新审视。我会尝试使用glTexSubImage,看看我能否做到我想要的,再次感谢! – Jackie

+0

唯一引发问题的是OpenGL有一个标准化的坐标系,所以一旦上传的纹理总是有0到1之间的坐标。这并不是说你有时不想知道尺寸 - 例如如果您将高斯模糊或任何其他内核卷积编写为着色器,则最终需要知道纹理的像素大小。因此,问题更多的是试图说明是否还有其他相关的建议可以作为批评。它只是在阅读它时才意识到它看起来有多苛刻。 – Tommy

+0

没有概率,我听说过更严厉,除了显然你是非常知情的,所以我可以采取一些批评:-)。我实际上正在试图将prboom +移植到Android上的OpenGLES,并且它在某处呈现gl渲染。我认为这是一个精灵或基于图像的东西,所以我认为它需要信息来绘制正确的尺寸。我不得不将它转换为glReadBuffer,所以我假设我会在那里使用相同的高度和宽度值,但也许我正在考虑错误。 – Jackie