减少OpenGL纹理使用的内存量

时间:2014-04-13 18:28:24

标签: opengl

我想知道在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。

1 个答案:

答案 0 :(得分:0)

glTexImage2D的文档表明,如果压缩格式可用,它将透明地回退非压缩< / em>等效的内部格式。因此,可以得出一些结论:1。您的opengl实现不支持压缩格式,并且您遇到了记录的行为。 2.您选择的分析工具会为您提供不准确的统计信息。

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