1

设置纹理后有 20fps 应用纹理之前是 300fps

我的代码:

void LoadTEX()
{
  GLuint    texture;  
  HBITMAP   GLtex;
  BITMAP    tex;
  byte      Texture=TEX;

  glGenTextures(sizeof(Texture), &texture);
  GLtex= (HBITMAP)LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(Texture), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);

  GetObject(GLtex,sizeof(tex), &tex);
  glPixelStorei(GL_UNPACK_ALIGNMENT,4);           
  glBindTexture(GL_TEXTURE_2D, texture);
  glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
  glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST );
  glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );     
  gluBuild2DMipmaps(GL_TEXTURE_2D, 3, tex.bmWidth, tex.bmHeight, GL_RGB,  GL_UNSIGNED_BYTE, tex.bmBits);
  DeleteObject(GLtex);  
}

如您所见,我从资源文件中加载纹理。我调用LoadTEX()了我的主 WINAPI 循环。

第二个问题是纹理有点透明,所以它从后面的脸中获取颜色并将其与自身混合。为什么?

4

1 回答 1

3

我在主 WINAPI 循环中调用 LoadTEX()。

我假设这意味着您每帧调用一次,在这种情况下,这就是您的性能下降的原因。您应该在循环之前加载一次纹理,然后在每一帧中绘制它。

第二个问题是纹理有点透明所以它从后面的脸上取颜色并与自己混合

如果没有看到渲染纹理的代码,这很难说为什么。使用 glDisable(GL_BLEND) 禁用混合,您的纹理将不再透明。

于 2013-08-28T13:03:10.010 回答