为什么这个OpenGL程序没有绘制三角形?

时间:2014-01-28 17:41:56

标签: opengl go shader glfw

我正在尝试学习现代OpenGL,并希望绘制一个这样的三角形:http://www.opengl-tutorial.org/wp-content/uploads/2011/04/red_triangle.png

我正在学习本教程:www.opengl-tutorial.org/beginners-tutorials/tutorial-2-the-first-triangle/,但我得到的只是深蓝色背景(清晰的颜色)。这段代码可能有什么问题?

我在Go中写这个并尝试在Ubuntu和OS X上运行它。 注意:我使用的是glfw 3库而不是本教程中使用的glfw 2.7。

我认为相关部分是:

func setup() {
    gl.ClearColor(0.0, 0.0, 0.4, 0.0)

    makeProgram(vertexShaderSource,fragmentShaderSource)

    vertexBufferData := []float32{
        -1,-1,0,
         1,-1,0,
         0, 1,0,
    }

    vertexBuffer = gl.GenBuffer()
    vertexBuffer.Bind(gl.ARRAY_BUFFER)
    gl.BufferData(gl.ARRAY_BUFFER, len(vertexBufferData)*4, vertexBufferData, gl.STATIC_DRAW)
}

func draw() {
    gl.Clear(gl.COLOR_BUFFER_BIT)

    program.Use()
    // first attribute buffer: vertices
    var vertexAttrib = program.GetAttribLocation("vertexPosition_modelspace")
    vertexAttrib.EnableArray()
    vertexBuffer.Bind(gl.ARRAY_BUFFER)
    var f float32 = 0.0

    vertexAttrib.AttribPointer(
        3,     // size
        gl.FLOAT, // type
        false, // normalized
        0,     // stride
        &f) // array buffer offset

    // draw the triangle
    gl.DrawArrays(gl.TRIANGLES, 0, 3)

    vertexAttrib.DisableArray()

}

链接到完整代码:https://gist.github.com/mbertschler/8672365

我已经尝试在OSX上使用OpenGL Profiler进行调试,但是到目前为止它没有显示任何错误。

1 个答案:

答案 0 :(得分:0)

错误发生在:

var f float32 = 0.0

vertexAttrib.AttribPointer(
    3,     // size
    gl.FLOAT, // type
    false, // normalized
    0,     // stride
    &f) // array buffer offset

虽然它似乎适用于这个问题的OP: OpenGL Vertex Buffer doesn't draw anything in golang它不符合我的计划。接受的答案是这个电话的正确版本。它与nil一起用作数组缓冲区偏移量。

工作代码:

(至少对于github.com/go-gl/gl绑定)

vertexAttrib.AttribPointer(
    3,     // size
    gl.FLOAT, // type
    false, // normalized
    0,     // stride
    nil) // array buffer offset