我正在开发我的第一个游戏引擎:D。现在我正在处理纹理资源管理器,我希望能够做到最好。直接填满驱动程序支持的所有ActiveTexture单元是否有任何不良影响?另一种选择是保留这些插槽,并仅在实际需要时设置纹理,但代价是更多的glBindTexture调用。
你提出的问题让我觉得你对纹理对象(即纹理存储)和纹理单元(即多重纹理背后的机制)之间存在误解。OpenGL有纹理对象和纹理单元。纹理对象保存数据,纹理单元将绑定到它们的纹理对象的数据映射到渲染过程中。通常,人们将场景所需的所有纹理上传到纹理对象中。对于使用公共材质设置的每个渲染批次,将纹理绑定到正确的纹理单元以在渲染过程中使用。
我认为需要注意的是,如果你要使用大量纹理(例如上传到GPU),你需要考虑一种方法来最小化VRAM的使用。在任何情况下,我认为可能对你有益的是stb_dxt,它是一个用ansi C编写的DXT1 / DXT5压缩器。您可以使用CompressedTexture2D压缩您的纹理并将其上传,这样您上传到GPU的所有纹理都将占用正常空间的1/8。在某些时候,运行时压缩所有纹理会减慢游戏的加载速度,因此我建议使用DDS纹理,您可以使用nvidia-texture工具来转换/管理纹理的压缩。