2015-10-26 49 views
2

我在OSX上使用LWJGL 3。着色器在使用<版本時工作正常,但將代碼移植到330無法呈現。LWJGL 3着色器版本150和以上不渲染

我的着色器是儘可能簡單:

頂點着色器:

#version 330 core 

in vec3 position; 

void main(void) { 
    gl_Position = vec4(position, 1.0); 
} 

片段着色器:

#version 330 core 

out vec4 outColour; 

void main(void) { 
    outColour = vec4(1.0, 0.0, 0.0, 1.0); 
} 

我創建一個簡單的三角形這樣的(斯卡拉) :

val vertices = Array(
    0.0f, 0.5f, 0.0f, 
    -0.5f, -0.5f, 0.0f, 
    0.5f, -0.5f, 0.0f 
) 
val vertexBuffer = BufferUtils.createFloatBuffer(vertices.length) 
vertexBuffer.put(vertices) 
vertexBuffer.flip() 

val buffer = GL15.glGenBuffers() 
GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, buffer) 
GL15.glBufferData(GL15.GL_ARRAY_BUFFER, vertexBuffer, GL15.GL_STATIC_DRAW) 

,我得出這樣的:

GL20.glUseProgram(shader) 
GL20.glEnableVertexAttribArray(0) 

GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, buffer) 
GL20.glBindAttribLocation(shader, 0, "position") 
GL20.glVertexAttribPointer(0, 3, GL11.GL_FLOAT, false, 0, 0) 
GL11.glDrawArrays(GL11.GL_TRIANGLES, 0, 9) 

GL20.glDisableVertexAttribArray(0) 
GL20.glUseProgram(0) 

着色器編譯罰款和程序運行,但我只是得到了一個空白頁面!我的代碼有什麼明顯的錯誤嗎?

+2

你的VAO在哪裏?這些在Core環境中是必需的。 – genpfault

+3

@ j-p:使用glDrawArrays進行繪製時不涉及索引。只有glDrawElements系列使用索引。 – BDL

+0

爲什麼要投票?請解釋,以便我可以改進問題 – Oli

回答

1

Vertex Array Objects (VAOs)是在Core上下文中渲染所必需的。在兼容性上下文中,它們是可選的。

但是,你可以在啓動時生成一個,如果你覺得懶惰,就讓它綁定:)