2012-03-16 20 views
0

コードにクラッシュが正常に動作し、描画された有色三角形等辺:glDrawArraysが可能カラー頂点配列以下のOpenGL ES 2.0

GLfloat triangle_pos[] = 
       { 
      -0.5, -0.25, 0.0, 
      0.5, -0.25, 0.0, 
      0.0, 0.559016994, 0.0 
       }; 

void draw_triangle() 
{ 
glUseProgram(SHADER.program); 

matrix mv; 
multiply_matrix(VIEW_MATRIX/*ident*/, MODEL_MATRIX/*ident*/, mv); 
matrix mvp; 
multiply_matrix(PROJECTION_MATRIX/*ortho*/, mv, mvp); 

glUniformMatrix4fv(SHADER.uniforms[0]/*um_mvp*/, 1, GL_FALSE, mvp); 

glEnableVertexAttribArray(SHADER.atributes[0]/*av_pos*/); 
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, triangle_pos); 

glDrawArrays(GL_TRIANGLES, 0, 3); 

glDisableVertexAttribArray(SHADER.atributes[0]/*av_pos*/); 

glUseProgram(0); 
} 

頂点シェーダ:

attribute vec4 av_pos; 
varying vec4 vv_col; 
uniform mat4 um_mvp; 
void main() 
{ 
vv_col = um_mvp * av_pos; 
gl_Position = vv_col; 
} 

フラグメントシェーダ:

precision lowp float; 
varying vec4 vv_col; 
void main() 
{ 
gl_FragColor = vv_col; 
} 

外部からカラー値をロードするように頂点シェーダを変更できるようにします。

attribute vec4 av_pos; 
attribute vec4 av_col; 
varying vec4 vv_col; 
uniform mat4 um_mvp; 
void main() 
{ 
vv_col = av_col 
gl_Position = um_mvp * av_pos; 
} 

そして、変更したコードになります:

GLfloat triangle_pos[] = 
       { 
      -0.5, -0.25, 0.0, 
      0.5, -0.25, 0.0, 
      0.0, 0.559016994, 0.0 
       }; 

GLfloat triangle_col[]= 
       { 
    1.0,0.0,1.0,1.0, 
    0.0,1.0,1.0,1.0, 
    1.0,0.0,0.0,1.0 
       }; 



void draw_triangle() 
{ 
glUseProgram(SHADER.program); 

matrix mv; 
multiply_matrix(VIEW_MATRIX, MODEL_MATRIX, mv); 
matrix mvp; 
multiply_matrix(PROJECTION_MATRIX, mv, mvp); 

glUniformMatrix4fv(SHADER.uniforms[0]/*um_mvp*/, 1, GL_FALSE, mvp); 

glEnableVertexAttribArray(SHADER.atributes[0]/*av_pos*/); 
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, triangle_pos); 

glEnableVertexAttribArray(SHADER.atributes[1]/*av_col*/); 
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, triangle_col); 

glDrawArrays(GL_TRIANGLES, 0, 3); // just crashing i can't even glGetError() after that line 

glDisableVertexAttribArray(SHADER.atributes[0]); 

glDisableVertexAttribArray(SHADER.atributes[1]); 

glUseProgram(0); 
} 

なぜglDrawArraysクラッシュとどのようにそれを修正するには?

答えて

4
glEnableVertexAttribArray(SHADER.atributes[0]/*av_pos*/); 
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, triangle_pos); 

glEnableVertexAttribArray(SHADER.atributes[1]/*av_col*/); 
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 0, triangle_col); 

glVertexAttribPointerの最初の引数は、設定する属性です。それはあなたがglEnableVertexAttribArrayに与えるものと同じ値です。これは次のようになります:

glEnableVertexAttribArray(SHADER.atributes[0]/*av_pos*/); 
glVertexAttribPointer(SHADER.atributes[0], 3, GL_FLOAT, GL_FALSE, 0, triangle_pos); 

glEnableVertexAttribArray(SHADER.atributes[1]/*av_col*/); 
glVertexAttribPointer(SHADER.atributes[1], 4, GL_FLOAT, GL_FALSE, 0, triangle_col); 
+0

このような愚かな間違い、ありがとう – Aristarhys

関連する問題