【问题标题】:LWJGL 3 Shaders version 150 and above rendering nothingLWJGL 3 着色器版本 150 及更高版本不渲染
【发布时间】:2015-10-26 12:02:33
【问题描述】:

我在 OSX 上使用 LWJGL 3。使用

我的着色器尽可能简单:

顶点着色器:

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

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

【问题讨论】:

  • 您的 VAO 在哪里?这些在核心上下文中是必需的。
  • @j-p:使用 glDrawArrays 绘图时不涉及索引。只有 glDrawElements 系列使用索引。
  • 为什么投反对票?请解释一下,以便我改进问题
  • @genpfault:谢谢,我没有意识到我需要一个 VAO。我认为它们是你用来代替 VBO 的东西。它现在正在工作。如果您想留下该评论作为答案,我会将其标记为已接受的答案
  • @OliWinks:您应该发布一个minimal reproducible example,这样我们就不必猜测您是否有 VAO。

标签: opengl glsl lwjgl opengl-3


【解决方案1】:

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

但是,如果您觉得懒惰,您可以只在启动时生成一个并将其绑定:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 2020-09-08
    • 2015-09-15
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多