1

cocos2d-x でコードを ES 1.0 から ES 2.0 に変更しました

ES 1.0 バージョンのコード

const float DARK=30.0f;
int n = m_sGridSize.x * m_sGridSize.y;
glEnable(GL_CULL_FACE);
glDisableClientState(GL_COLOR_ARRAY);   
glVertexPointer(3, GL_FLOAT, 0, m_pVertices);
glTexCoordPointer(2, GL_FLOAT, 0, m_pTexCoordinates);
glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, m_pIndices);
glFrontFace(GL_CW);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glColor4ub(255-(m_AnimationProgress*DARK), 255-(m_AnimationProgress*DARK), 255-(m_AnimationProgress*DARK), 255);
glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, m_pIndices);
glColor4f(255, 255, 255, 255);
glFrontFace(GL_CCW);
glDisable(GL_CULL_FACE);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);

ES 2.0 バージョンのコード

const float DARK=30.0f;
m_pShaderProgram->use();
m_pShaderProgram->setUniformForModelViewProjectionMatrix();
int n = m_sGridSize.x * m_sGridSize.y;
glEnable(GL_CULL_FACE);
glDisableVertexAttribArray(kCCVertexAttrib_Color);
glVertexAttribPointer(kCCVertexAttrib_Position, 3, GL_FLOAT, GL_FALSE, 0, m_pVertices);
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, m_pTexCoordinates);
glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, m_pIndices);
glFrontFace(GL_CW);
glDisable(GL_TEXTURE_2D);
glDisableVertexAttribArray(kCCVertexAttrib_TexCoords);
ccDrawColor4B(255-(m_AnimationProgress*DARK), 255-(m_AnimationProgress*DARK), 255-(m_AnimationProgress*DARK), 255);
glDrawElements(GL_TRIANGLES, (GLsizei) n*6, GL_UNSIGNED_SHORT, m_pIndices);
ccDrawColor4B(255, 255, 255, 255);
glFrontFace(GL_CCW);
glDisable(GL_CULL_FACE);
glEnable(GL_TEXTURE_2D);
glEnableVertexAttribArray(kCCVertexAttrib_TexCoords);
glEnableVertexAttribArray(kCCVertexAttrib_Color);

次の出力が得られます (XCode)

Cocos2d: OpenGL error 0x0500 in /cocos2dx/sprite_nodes/CCSprite.cpp draw 616

私は何を間違えましたか?数回テストしたので、すべて問題ないと思います。

4

2 に答える 2

2

glEnableOpenGL ES 1.1 では、フラグメントのテクスチャ マッピング (ES 1.1 には頂点テクスチャ マッピングはありません) は、 とglDisableをそれぞれ使用してオンとオフを切り替えます。

OpenGL ES 2.0 では、フラグメント テクスチャ マッピングは、フラグメント シェーダーにコーディングされている場合にのみ行われるため、有効または無効にする必要はありません。GL_INVALID_ENUM は残り物glEnable(GL_TEXTURE_2D);glDisable(GL_TEXTURE_2D);. そのエラーが複数回表示されていると思います。

于 2013-01-25T06:06:27.317 に答える
1

0x0500 は「不正な列挙型」エラーです。ここでエラーコードを確認してください

これは、GL_CULL_FACE や GL_TRIANGLES などの列挙型を参照している可能性が最も高いです。DL ES リファレンスを参照して、2.0 で使用できない可能性のあるもの、または特定の状況で使用できないものを確認してください。

于 2013-01-23T11:53:57.833 に答える