在glsl中绘制一行

时间:2013-12-04 04:08:28

标签: c++ opengl glsl

我正在尝试绘制一行作为学习OpenGL 4.x及更高版本的一部分。以下是我正在使用的着色器。

顶点着色器

        "#version 430 core                             \n"
        "                                              \n"
        "void main(void)                               \n"
        "{                                             \n"
        "   const vec4 vertices[2] = vec4[2](vec4(0.25,-0.25,0.5,1.0),vec4(-0.25,-0.25,0.5,1.0));   \n"
        "   gl_Position = vertices[gl_VertexID];        n"
        "}                                             \n"

和Fragment Shader

        "#version 430 core                             \n"
        "                                              \n"
        "out vec4 color;                               \n"
        "                                               \n"
        "void main(void)                               \n"
        "{                                             \n"
        "    color = vec4(0.0, 0.8, 0.0, 1.0);         \n"
        "}                                             \n"

以下是我在display()函数中所做的事情。

void display()
{
    static const GLfloat red[] = { 1.0f, 0.0f, 0.0f, 1.0f };
    glClearBufferfv(GL_COLOR, 0, red);

    glUseProgram(program);

    glLineWidth(8.0f);
    glDrawArrays(GL_LINES, 0, 2);
    glFlush();
}

但是,除了红色外,窗口中没有任何内容。 我已阅读thisthisthis个问题。其中两个让我使用顶点缓冲区,第三个让我在同一个位置绘制一个带有两个顶点的三角形。

我的问题是,为什么我的代码中的glDrawArrays(GL_LINES, 0, 2)无法绘制一行?或者,当我需要绘制一条线时,我是否必须使用顶点阵列缓冲区?

更新:

以下是main()函数的代码。

startShaders();

    while (!glfwWindowShouldClose(window))
    {
        RenderFunction();
        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    shutdown();
    cout << "INFO: OpenGL Version: " << glGetString(GL_VERSION) << endl;
    glfwTerminate();

    exit(EXIT_SUCCESS);

这是我的RenderFunction()调用Display()函数。

void RenderFunction()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    display();  
}

更新2: 这是显示stderr输出的控制台窗口的图片。  enter image description here

0 个答案:

没有答案