0

私はES2.0にかなり慣れていないので、openGLES2.0で単一のテクスチャを描画しようとしています。

これが私のコードです:

データ:テクスチャへのポインタ(動作しています。ES1.0でテストできます)

w:テクスチャ幅

h:テクスチャの高さ

テクスチャは256x256ピクセルです

glGetErrorはすべての行でGL_NO_ERRORを返します…</p>

誰かが助けてくれることを願っています!私が見ることができるのは黒い画面だけです!

ありがとう、

賢い

{{

enum  {
    ATTRIB_VERTEX=0,
    ATTRIB_TEXTURE_POSITION,
    NUM_ATTRIB
};


glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

const GLfloat vertices[] = { -0.5f, -0.5f, 0.5f,  -0.5f, -0.5f,  0.5f, 0.5f, 0.5f };
const GLfloat texture_coord[] = {   0.0f, 1.0f,0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 0.0f };

GLuint texName;

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texName);


glEnableVertexAttribArray(ATTRIB_VERTEX);
glVertexAttribPointer(ATTRIB_VERTEX, 2, GL_FLOAT, 0, 0, vertices);

glEnableVertexAttribArray(ATTRIB_TEXTURE_POSITION);
glVertexAttribPointer(ATTRIB_TEXTURE_POSITION, 2, GL_FLOAT, 0, 0, texture_coord);

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA,w,h,
              0, GL_RGBA,
              GL_UNSIGNED_BYTE, data);


glDrawArrays (GL_TRIANGLES, 0, 4);
}

}

4

1 に答える 1

0

それは完全なソースですか?? もしそうなら、これらを行う必要がありますが、これらの前にシェーダーを設定する必要があります。

ハドルの設定

ATTRIB_VERTEX = glGetAttribLocation(m_paintProgram, "position");
ATTRIB_TEXTURE_POSITION = glGetAttribLocation(m_paintProgram, "inputTextureCoordinate");
maintextureHandle= glGetUniformLocation(m_EffectProgram[displayMode], "texture0");

ハンドルを通して値を与える

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texName);  
glUniform1i(maintextureHandle, 0); // add

また、毎回このコードを呼び出す必要はありません。一度呼び出すだけです。

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, texName);  
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D (GL_TEXTURE_2D, 0, GL_RGBA,w,h,0, GL_RGBA,GL_UNSIGNED_BYTE, data);

実際、あなたのコードには、Shader load、Shader compile、glUseProgram()、glBindFramebuffer()、glviewport()、glBindRenderbuffer などの必要なコードがそれほど多くありません。全部は教えられないので、こちらのリンクを参考にして、opengl es 2.0の詳細を学んでほしい。

http://examples.oreilly.com/9780596804831/readme.html#WireframeSkeleton

于 2013-03-04T02:32:24.743 に答える