LoginSignup
7
4

More than 5 years have passed since last update.

OpenGLのTexture Unitについてのメモ

Posted at

Multiple Textureを扱うためにTexture Unitというものがある。(初期値は0で、同時に1枚のテクスチャしか扱わない場合は特に気にしなくてもいい。)

例えば、
glActiveTexture(GL_TEXTURE0);
glActiveTexture(GL_TEXTURE1);
glActiveTexture(GL_TEXTURE2);

のように指定する。また、
glActiveTexture(GL_TEXTURE0 + 0);
glActiveTexture(GL_TEXTURE0 + 1);
glActiveTexture(GL_TEXTURE0 + 2);

というようにも指定できる。

Texture関連のOpenGLラッパークラスを作成していたところここでハマった。

クラスメンバーに、
GLuint mTextureUnit;
というものを持っておいて、
glActiveTexture(GL_TEXTURE0 + mTextureUnit);
というように利用しようという算段である。

どうせ0以上の数だしunsigned int (GLuint)でいいだろうと思ったのが運の尽き。
0以外のTexture Unitにバインドしたテクスチャが利用できないという事態に。
そうとう長い間シェーダーが悪いのかと考えてひたすらシェーダーを書き換えていたが、
glGetErrorやOpenGL4.3から標準規格となったDebugMessageによってGL_INVALID_ENUMGL_INVALID_OPERATIONが発生していることを確認し、原因を突き止めた。

int (GLint)でないければならなかったのだ。


試しにintunsigned intの足し算や引き算を行ってautoで受けてその型を調べたらunsigned intになっていた。色んな意味でつらぽよい事象であった。。。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4