我在OpenGL中制作体素引擎,想知道我一次可以拥有多少3D纹理。它们相当大(GL_R32UI格式为256x256x256)。我希望它能够在任何支持OpenGL 3.3的图形卡上运行。顺便说一下,我正在从同一个片段着色器访问它们。那我可以有几个? 8会工作吗?谢谢!

评论

我相当确定这些值是特定于硬件/版本的,但是实现必须支持一些最小值。您可以使用glGet查询它们。

请注意,您描述的纹理每个都是64 MB,因此在达到API的纹理数量限制之前,可能会受到可用VRAM的限制。 8个纹理= 512 MB,因此应该是相当安全的,但是许多较旧的卡或移动卡仅具有1 GB或2 GB的VRAM,因此您将无法使用超过8个这些纹理并且仍然保留了VRAM还有别的。

256 * 256 * 256是什么意思?第三个数字是什么?

@Iman是3d纹理而不是2d纹理-如果您需要更多信息,可以根据需要询问一个单独的问题。

我从没听过这样的话,我以为贴图是覆盖在3d对象上的2D(u,v)栅格贴图,但是我看了一下教程后就熟悉了这个概念。谢谢你的提示特里

#1 楼

正如gllampert在评论中指出的,该值取决于硬件。您可以使用GL_MAX_COMBINED_TEXTURE_IMAGE_UNIT通过glGet检索它。您可以在此处找到不同硬件的性能。

但是,在OpenGL 3中,无论哪种类型,至少有48个同时使用的纹理的下限。 [来源]

评论


$ \ begingroup $
就像glampert所暗示的那样,您还想找到必须支持的最低要求,因为这是您实际上可以依赖所有硬件的数量。
$ \ endgroup $
–艾伦·沃尔夫(Alan Wolfe)
2015年9月6日于20:43

$ \ begingroup $
就像我提到的,OpenGL3强制执行48。当然,实践中可能会有更高的下限。还是我误会了你?
$ \ endgroup $
– Wumpf
2015年9月6日20:45