Top > C++ > OpenGL

* OpenGL [#fc641faa]
#contents

** 対応しているテクスチャフォーマットを調べる。 [#z3f1f999]

#code(c,){{
namespace
{
  void t_formatCheck( 
      const GLenum aInternalFormat
      , const char* aInternalFormatName
      , const GLenum aFormat
      )
  {
    GLuint textureName;

    // 前処理
    glEnable(GL_TEXTURE_2D);
	glGenTextures(1 , &textureName);
	glBindTexture(GL_TEXTURE_2D , textureName);

    // テクスチャ作成
    glGetError();
    glTexImage2D(
        GL_PROXY_TEXTURE_2D , 0 , aInternalFormat , 4 , 4 ,
        0 , aFormat , GL_UNSIGNED_BYTE , 0
	);
    if ( glGetError() == GL_NO_ERROR )
    {
        GLint red = 0, green = 0, blue = 0, alpha = 0, luminance = 0, intensity = 0 ;
        glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_RED_SIZE, &red) ;
        glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_GREEN_SIZE, &green) ;
        glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_BLUE_SIZE, &blue) ;
        glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_ALPHA_SIZE, &alpha) ;
        glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_LUMINANCE_SIZE, &luminance) ;
        glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_INTENSITY_SIZE, &intensity) ;
        printf( "%s: Success(%d,%d,%d,%d,%d,%d)\n" 
            , aInternalFormatName 
            , red , green , blue , alpha , luminance , intensity
            );
    }
    else
    {
        printf( "%s: Failure\n" , aInternalFormatName );
    }

    // 後処理
	glDeleteTextures(1 , &textureName);
    glDisable(GL_TEXTURE_2D);
  };

#define FormatCheck( aInternalFormat , aFormat ) t_formatCheck( aFormat , #aFormat , aInternalFormat )

  void t_allFormatCheck()
  {
      FormatCheck( GL_ALPHA, GL_ALPHA );
      FormatCheck( GL_ALPHA, GL_ALPHA4 );
      FormatCheck( GL_ALPHA, GL_ALPHA8 );
      FormatCheck( GL_ALPHA, GL_ALPHA12 );
      FormatCheck( GL_ALPHA, GL_ALPHA16 );
      FormatCheck( GL_LUMINANCE, GL_LUMINANCE );
      FormatCheck( GL_LUMINANCE, GL_LUMINANCE4 );
      FormatCheck( GL_LUMINANCE, GL_LUMINANCE8 );
      FormatCheck( GL_LUMINANCE, GL_LUMINANCE12 );
      FormatCheck( GL_LUMINANCE, GL_LUMINANCE16 );
      FormatCheck( GL_LUMINANCE_ALPHA, GL_LUMINANCE4_ALPHA4 );
      FormatCheck( GL_LUMINANCE_ALPHA, GL_LUMINANCE6_ALPHA2 );
      FormatCheck( GL_LUMINANCE_ALPHA, GL_LUMINANCE8_ALPHA8 );
      FormatCheck( GL_LUMINANCE_ALPHA, GL_LUMINANCE8_ALPHA8 );
      FormatCheck( GL_LUMINANCE, GL_INTENSITY );
      FormatCheck( GL_LUMINANCE, GL_INTENSITY4 );
      FormatCheck( GL_LUMINANCE, GL_INTENSITY8 );
      FormatCheck( GL_LUMINANCE, GL_INTENSITY12 );
      FormatCheck( GL_LUMINANCE, GL_INTENSITY16 );
      FormatCheck( GL_RGB, GL_R3_G3_B2 );
      FormatCheck( GL_RGB, GL_RGB4 );
      FormatCheck( GL_RGB, GL_RGB5 );
      FormatCheck( GL_RGB, GL_RGB8 );
      FormatCheck( GL_RGB, GL_RGB10 );
      FormatCheck( GL_RGB, GL_RGB12 );
      FormatCheck( GL_RGB, GL_RGB16 );
      FormatCheck( GL_RGBA, GL_RGBA2 );
      FormatCheck( GL_RGBA, GL_RGBA4 );
      FormatCheck( GL_RGBA, GL_RGB5_A1 );
      FormatCheck( GL_RGBA, GL_RGBA8 );
      FormatCheck( GL_RGBA, GL_RGB10_A2 );
      FormatCheck( GL_RGBA, GL_RGBA12 );
      FormatCheck( GL_RGBA, GL_RGBA16 );
  }
}

}}

    ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS