GLFWで画像を読み込む

最新のGLFW3.0では廃止になりました。。。!!!
Will image or texture loading support be added to GLFW?->No.

  • glfwReadImage
  • glfwReadMemoryImage
  • glfwFreeImage
  • glfwLoadTexture2D
  • glfwLoadMemoryTexture2D
  • glfwLoadTextureImage2D

GLFWimage構造体

typedef struct {
int Width, Height; // Image dimensions
int Format; // OpenGL pixel format
int BytesPerPixel; // Number of bytes per pixel
unsigned char *Data; // Pointer to pixel data
} GLFWimage;

glfwReadImage( const char *name, GLFWimage *img, int flags )

tgaをラクに読めるという点で有用だ。
GLFW画像ライブラリの使い方のまとめは、
glfwReadImageでメモリにtgaファイルを読み込み、好きな設定をglTexParameterなどでして、
glfwFreeImageで後片付けすることだね。
GLFW_NO_RESCALE_BIT 画像を$2^{m}\times 2^{n}$解像度にリスケールしない。
GLFW_ORIGIN_UL_BIT 画像の原点は左上にする。(デフォルトでは左下になっている。)
GLFW_ALPHA_MAP_BIT ワンチャンネルの画像を、ルミナンスマップではなくアルファマップとして使う。

戻り値
ファイルが存在しなかったらGL_FALSE,うまくいったらGL_TRUE

サポートしているファイル形式

  • tga
  • 8bitのグレースケール
  • 8bitのパレット形式
are: 8-bit gray scale, 8-bit paletted (24/32-bit color), 24-bit true color and 32-bit true color + alpha.
Paletted images are translated into true color or true color + alpha pixel formats.
static bool Load_Texture_8bit_Alpha(const char* _filename,GLuint *_texId){
        GLFWimage img;
        if(!glfwReadImage( _filename,&img, 0 )){return false;}
        glGenTextures ( 1, _texId );
        glBindTexture ( GL_TEXTURE_2D, *_texId );
        glTexImage2D ( GL_TEXTURE_2D, 0, GL_INTENSITY, img.Width,img.Height, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, img.Data);
 
        glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
        glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
        glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
        glTexParameteri ( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
        glfwFreeImage(&img);
        return true;
    }

glfwLoadTexture2D

場合によっては便利だけど、内部で変な設定をしてくれてしまうため、後に別のテクスチャが悪影響を受ける場合がある。
そして、その悪影響をどうやって打ち消すのかもよくわからない。
これを使うなら、glGenTextureもglBindTextureも要らない。

// Load texture from file, and build all mipmap levels
glfwLoadTexture2D( "mytexture.tga", GLFW_BUILD_MIPMAPS_BIT );
// Use trilinear interpolation for minification
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_LINEAR );
// Use bilinear interpolation for magnification
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_LINEAR );
// Enable texturing
glEnable( GL_TEXTURE_2D );

さて、便利だけど、ポイントスプライトしたいときは、美しさが落ちてしまった。!
あと、この関数の欠点は、複数のテクスチャを設定してもすべてテクスチャIDが1で返ってくること。
サポートサイト Wikidot.com deprecated