【发布时间】:2012-12-01 23:59:28
【问题描述】:
到目前为止,我已经使用过:
纹理创建:
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture[1]);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 4);
glTexImage2D(GL_TEXTURE_2D, 0,GL_COMPRESSED_RGBA_S3TC_DXT5_EXT , tWidth,Height, 0, GL_RGBA, GL_UNSIGNED_BYTE,Data);
glGenerateMipmap(GL_TEXTURE_2D);
纹理使用:
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, texture[1]);
我正在寻找有效的解决方案来将纹理保存在内存中并在着色器中使用它。 我已经阅读了一些关于 PBO 和 TBO(以及其他一些解决方案)的内容,但是我无法通过压缩和 mipmap 的示例找到它们。 你建议我选择什么?哪个更快?以及它如何与压缩和 mipmap 配合使用?
【问题讨论】:
-
PBO 用于优化像素传输,您根本不应该将它们仅用于存储目的。此外,没有 TBO 之类的东西(无论如何都不是为了您的目的),纹理是 opengl 对象,但不是缓冲区对象。另外,您当前的解决方案效率不够高有什么问题?
-
我正在使用具有多个对象的大场景(每个对象至少有 3 个纹理)。而且我认为使用这些纹理有更快的解决方案。我阅读了有关 PBO/TBO 的信息,在大多数情况下都会对性能产生影响。所以我想用这样的东西来让我的引擎更快(也使用压缩和 mipmaps)
-
没有,纹理对象是存储纹理的全部,还有一些高级的缓冲对象方法,但这些通常不适用于传统的纹理使用。此外,图形性能在很大程度上取决于您的应用程序,不要仅仅将您的实现基于随机读取(当然,如果他们推荐 PBO 用于纹理存储:s)。首先确定你的瓶颈(例如测量它),然后开始优化。
-
我认为通过使用缓冲区,驱动程序可以直接访问数据纹理,所以一切都会更快。那么改变纹理呢? (例如,如果所有内容都不适合内存?)纹理对象(表格,我在顶部给出)将继续是一个合理的解决方案,或者我应该对缓冲区感到有趣?