【发布时间】:2014-10-16 17:50:09
【问题描述】:
我有兴趣获得最大硬件支持的纹理分辨率。
据我所知,有两种机制可以做与此相关的事情:
-
glGetIntegerv(GL_MAX_TEXTURE_SIZE,&dim)用于 2D(和立方体?)纹理对我很有帮助。对于 3D 纹理,我发现(很难)你需要使用GL_MAX_3D_TEXTURE_SIZE来代替。据我所知,这些会返回一侧的最大分辨率,而另一侧假定是相同的。尚不清楚这些值实际代表什么。根据文档,
glGetIntegerv(...)返回的值将被视为“粗略估计”,但尚不清楚它们是保守的低估、最佳猜测还是最佳情况。此外,还不清楚这些是硬件限制还是当前基于可用图形内存量的限制。文档建议使用 . . .
-
GL_PROXY_TEXTURE_(1|2|3)D/GL_PROXY_TEXTURE_CUBE_MAP。这里的想法是在制作真实纹理之前制作代理纹理。然后,通过检查它获得的实际尺寸来检查代理纹理是否正常。对于 3D 纹理,它看起来像:glGetTexLevelParameteriv(GL_PROXY_TEXTURE_3D, 0, GL_TEXTURE_WIDTH, &width); glGetTexLevelParameteriv(GL_PROXY_TEXTURE_3D, 0, GL_TEXTURE_HEIGHT, &height); glGetTexLevelParameteriv(GL_PROXY_TEXTURE_3D, 0, GL_TEXTURE_DEPTH, &depth);如果一切顺利,则返回的维度将非零(并且可能与您请求的相同)。然后你删除代理并制作真实的纹理。
那么,对于现代 OpenGL(GL 4.* 很好),获得 1D、2D、3D 和立方体纹理的最大硬件支持分辨率的最佳方法是什么?强>
【问题讨论】: