LWJGL 3着色器版本150及以上版本没有任何内容

时间:2015-10-26 12:02:33

标签: opengl glsl lwjgl opengl-3

我在OSX上使用LWJGL 3。使用版本<150时,着色器工作正常,但将代码移植到330无渲染。

我的着色器尽可能简单:

顶点着色器:

#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);
}

我创建了一个像这样的简单三角形(Scala):

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)

着色器编译正常,程序运行但我得到一个空白屏幕!我的代码有什么明显的错误吗?

1 个答案:

答案 0 :(得分:1)

在Core上下文中进行渲染需要

Vertex Array Objects (VAOs)。在兼容性上下文中,它们是可选的。

然而,你可以在启动时生成一个,如果你感到懒惰就离开它:)