2011-06-16 150 views
2

我將iPhone應用程序從OpenGL ES 1.1轉換爲ES 2.0。應用程序將繪製到EAGLView,因爲它是在Apple提供的標準OpenGL ES應用程序模板中定義的。OpenGL ES 2.0在iPhone模擬器中顯示正常,但在iPhone上不顯示

ES 1.1代碼在模擬器和iPhone上都正常工作。新的ES 2.0代碼在模擬器上工作正常,但在iPhone 3GS上,我得到的構件(例如其他應用程序的縮放視圖片段),據我所知,表明我的程序對幀緩衝區感到困惑。我覺得這很奇怪,因爲與ES 1.1相比,我沒有對幀緩衝區處理邏輯進行任何更改。

包括我,做繪圖代碼的一部分下方,雖然我沒有看到這一點,因爲它在模擬器上正常工作:

GLfloat data[600000]; 

// initialize data 

glClearColor(0.f, 0.f, 0.f, 0.f); 
glClear(GL_COLOR_BUFFER_BIT); 

glUseProgram(program); 
glUniformMatrix4fv(uniforms[UNIFORM_PROJECTION_MATRIX], 1, GL_FALSE, projection_matrix); 
glUniformMatrix4fv(uniforms[UNIFORM_MODELVIEW_MATRIX], 1, GL_FALSE, modelview_matrix); 

glVertexAttribPointer(ATTRIBUTE_POSITION, 3, GL_FLOAT, GL_FALSE, 0, data); 
glEnableVertexAttribArray(ATTRIBUTE_POSITION); 
glDrawArrays(GL_POINTS, 0, 200000); 
glFlush(); 

回答

6

它看起來像有在OpenGL的一個bug ES 2實施。暗示是,當我將glDrawArrays(GL_POINTS, 0, 200000);更改爲glDrawArrays(GL_LINES, 0, 200000);時,設備上沒有顯示問題。使用GL_POINTS的解決方案(找到here)將在頂點着色器中設置gl_PointSize = 1.0;

編輯:它可能不是一個錯誤,請參閱here

gl_PointSize的值(或gl_out []陣列的gl_PointSize構件,在該曲面細分控制着色器的情況下)是未定義如果相應的着色器可執行文件未寫入gl_PointSize,則在頂點,細分控制和鑲嵌評估着色階段之後。

+0

哇,你是救命恩人!如果可以的話,我會給你兩次投票:D – eodabash 2012-08-01 17:57:23

相關問題