GL_TEXTURE_WRAP_S、GL_TEXTURE_WRAP_Tを GL_CLAMP_TO_EDGEに設定していますが、こうするとOpenGL ES 2.0ではテクスチャの幅や高さが2の累乗でなくても良くなるそうです。
テクスチャ描画のために、新しくシェーダプログラムを追加しています。
Renderer.cpp
{ // SHADER_TEXTURE(テクスチャ有り)
static const
char gVertexShader[] = // 頂点シェーダプログラム
"attribute vec4 position;"
"attribute vec4 color;"
"varying vec4 vColor;"
"attribute vec2 texcoord;"
"varying vec2 vTexcoord;"
"uniform mat4 projection;"
"void main() {"
"gl_Position = projection*position;"
"vColor = color;"
"vTexcoord = texcoord;"
"}";
static const
char gFragmentShader[] = // フラグメントシェーダプログラム
"precision mediump float;"
"varying vec4 vColor;"
"varying vec2 vTexcoord;"
"uniform sampler2D texture;"
"void main() {"
"gl_FragColor = texture2D(texture, vTexcoord)*vColor;"
"}";
vert_shader = loadShader(GL_VERTEX_SHADER, gVertexShader); // 頂点シェーダ
frag_shader = loadShader(GL_FRAGMENT_SHADER, gFragmentShader); // フラグメントシェーダ
shader[SHADER_TEXTURE].init(vert_shader, frag_shader, TRUE); // シェーダプログラム作成
glDeleteShader(vert_shader);
glDeleteShader(frag_shader);
}
シェーダが増えたことで切り替え処理など他にも変更点はあるのですが、ここでは省略します.
最後に実施にテクスチャを描画する部分です。
AppMain.cpp
セコメントをする