OpenGLES:如何找到纹理大小

3

我在研究一些旧的OpenGL代码,但是遇到了一些问题...

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中获取纹理的宽度/高度?

1个回答

3

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

撇开明显的问题不谈,纹理大小并没有直接暴露出来。你可能能做到的最好的方式就是使用glTexSubImage,检查GL_INVALID_VALUE,以搜索大小。我的理解是,在GLES man page中宽度=高度=0不是错误条件,所以你可以在不上传任何数据的情况下寻找被接受的最大(x,y)。


我很感激你的回复,我相信这是正确的反应,但我对这一切(包括OpenGL和C)都比较新,可能需要一些时间。因此,既然需要一些时间,我已经把它放在了后面,直到我让端口工作,然后再回来看看。我将尝试使用glTexSubImage,并看看能否实现我想要的效果,再次感谢! - Jackie
唯一引发问题的是OpenGL具有归一化坐标系统,因此一旦上传纹理,其坐标始终在0和1之间。这并不是说您有时不想知道大小 - 例如,如果您将高斯模糊或任何其他内核卷积编写为着色器,则最终需要知道纹理的像素大小。因此,问题更多地是为了尝试引出是否还有其他相关建议可以提供而不是批评。只有在阅读回答后我才意识到它看起来有多么严厉。 - Tommy
没问题,我听过更严厉的批评,而且显然你非常有知识,所以我可以接受一点批评 :-)。实际上,我正在尝试将prboom+移植到Android上的OpenGLES中,它在某个gl渲染中。我认为它是基于精灵或图像的,因此我假设它想要绘制正确大小的信息。我不得不将其转换为glReadBuffer,因此我假设我会在那里使用相同的高度和宽度值,但也许我对某些事情的想法有误。 - Jackie

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接