【问题标题】:Reduce the amount of memory used by an OpenGL texture减少 OpenGL 纹理使用的内存量
【发布时间】:2014-05-27 14:50:57
【问题描述】:

我想知道在 OpenGL 中使用纹理时如何减少图形内存的消耗。我的代码:

  glGenTextures(1,&textura);
  glBindTexture(GL_TEXTURE_RECTANGLE_ARB,textura);
  glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_MIN_FILTER,GL_NEAREST);
  glTexParameteri(GL_TEXTURE_RECTANGLE_ARB,GL_TEXTURE_MAG_FILTER,GL_NEAREST);
  glTexImage2D(GL_TEXTURE_RECTANGLE_ARB,0,GL_COMPRESSED_RGBA_ARB,ilancho,ilalto,0,GL_RGBA,GL_UNSIGNED_BYTE,ildata);

  //MAIN LOOP

  glEnable(GL_TEXTURE_RECTANGLE_ARB);
  glBindTexture(GL_TEXTURE_RECTANGLE_ARB,textura);

  glLoadIdentity();
  glTranslatef(320.0,240.0,0.0);
  glBegin(GL_TRIANGLE_FAN);
   glTexCoord2d(0.0,0.0);
   glVertex2f(-320.0, 240.0);
   glTexCoord2d(0.0,480.0);
   glVertex2f(-320.0,-240.0);
   glTexCoord2d(640.0,480.0);
   glVertex2f( 320.0,-240.0);
   glTexCoord2d(640.0,0.0);
   glVertex2f( 320.0, 240.0);
  glEnd();

  glBindTexture(GL_TEXTURE_RECTANGLE_ARB,0);
  glDisable(GL_TEXTURE_RECTANGLE_ARB);

我使用 RivaTuner 来检查图形内存的消耗,似乎是一样的,有或没有压缩。

我做错了什么?

我有一个 NVIDIA 显卡 geforce 6200 512mb ddr2。

【问题讨论】:

    标签: opengl


    【解决方案1】:

    glTexImage2D 的文档表明,如果压缩格式可用,它将透明地回退到未压缩 等效的内部格式。所以有一些结论可以得出: 1. 您的 opengl 实现不支持压缩格式,并且您正在经历记录的行为。 2. 您选择的分析工具会提供不准确的统计数据。

    如果您的实现支持特定的内部格式,您应该能够使用internalformat_query 进行查询。如果不是,您只需使用不同的压缩方法,例如 dxt/s3ct 格式。

    【讨论】:

    • 哦,我明白了。有没有其他办法可以降低显卡的内存消耗?
    • @JavierRamírez:一方面,DXT (​​S3TC) 纹理压缩算法在多年前就存在(有)非二次方纹理的问题。如果您使用的是纹理矩形,它会让我相信您的硬件/软件实现是 GL 2.0 之前的版本,并且可能属于不喜欢压缩 NPOT 纹理的类别。如果您仅将纹理矩形用于非归一化纹理坐标,您可能想尝试使用常规 2D 纹理并自己计算归一化纹理坐标。看看这是否改变了什么。
    • 我更改了 2 次方的纹理,但仍然无法正常工作,有什么想法吗?
    • nvidia.com/object/geforce6_techspecs.html - 来自技术规范:“GeForce 6200 型号不包括压缩技术。”就像我已经建议你应该尝试不同的压缩方法(dxt/s3tc 与 GL_COMPRESSED_RGBA_ARB 不同)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多