0

glGenerateMipmapキューブにテクスチャをロードできません。

ファイルから BMP テクスチャをresource.h読み込みます。

私の負荷関数が呼び出されWM_CREATE、次のようになります。

void LoadTEX()
{
 GLuint texture;  
 HBITMAP GLtex;
 BITMAP tex;
 byte Texture=TEX;
 GLtex= (HBITMAP)LoadImage(GetModuleHandle(NULL),MAKEINTRESOURCE(Texture), IMAGE_BITMAP, 0, 0, LR_CREATEDIBSECTION);

  GetObject(GLtex,sizeof(tex), &tex);
  glPixelStorei(GL_UNPACK_ALIGNMENT,sizeof(Texture));
  glEnable(GL_TEXTURE_2D);
  glGenTextures(sizeof(Texture), &texture);
  glBindTexture( GL_TEXTURE_2D, texture );
  glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
  glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST );
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );  
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
  glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
  glTexImage2D( GL_TEXTURE_2D,
            0,
            GL_RGB,
            tex.bmWidth,
            tex.bmHeight,
            0,
            GL_RGB,GL_UNSIGNED_BYTE,
            tex.bmBits);

 glDeleteTextures(sizeof(Texture), &texture);
}

オンWM_PAINT:

 glColor3f(1.0f,1.0f,1.0f);
 glEnable(GL_TEXTURE_2D);
 glBindTexture( GL_TEXTURE_2D, texture );
 // glActiveTexture(GL_TEXTURE0);
 // glGenerateMipmap(GL_TEXTURE_2D);
 gluBuild2DMipmaps(GL_TEXTURE_2D, 3, tex.bmWidth, tex.bmHeight, GL_RGB, GL_UNSIGNED_BYTE, tex.bmBits);

上記のコードは正常に動作します (テクスチャは配置されています) が、問題は 40 FPS であり、結果が非​​常に悪いことです (テクスチャが結合されていない場合、約 300 FPS になります)。

2つ目はgluBuild2DMipmaps、少し古いので使いたくない、代わりに使いたいということglGenerateMipmapです。問題は、コメントアウトしgluBuild2DMipmapsてコメントを外すglActiveTexture(GL_TEXTURE0);と、glGenerateMipmap(GL_TEXTURE_2D)何も表示されないことです。

PIXELFORMATDESCRIPTORのように見えます:

PIXELFORMATDESCRIPTOR pfd;
int format;

// get the device context (DC)
*hdc = GetDC( hwnd );

// set the pixel format for the DC
ZeroMemory( &pfd, sizeof( pfd ) );
pfd.nSize = sizeof( pfd );
pfd.nVersion = 1;
pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
pfd.iPixelType = PFD_TYPE_RGBA;
pfd.cColorBits = 32;
pfd.cDepthBits = 32;
pfd.iLayerType = PFD_MAIN_PLANE;
format = ChoosePixelFormat( *hdc, &pfd );
SetPixelFormat( *hdc, format, &pfd );

このすべては、ATI および OPENGL 3.1 サポートで実行されます。私は を呼び出すglEnable(GL_TEXTURE_2D);ので、これは ati カードで動作するはずなので、問題は別の場所にあります。

4

2 に答える 2