OpenGL - 找不到错误

时间:2014-10-24 21:17:33

标签: opengl glfw

我尝试编写一个小的OpenGL应用程序,但在窗口上将不会显示任何内容。 但我找不到任何错误。 我错了什么? 并且所有错误检查都是否定的,因此不会出现错误。

我使用此工具生成了OpenGL 3.3标头:https://bitbucket.org/alfonse/glloadgen/wiki/Home

#include "OpenGL.hpp"

#include <iostream>
#include <GLFW/glfw3.h>

#include "World.hpp"


int main(void)
{
    glfwInit();

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);

    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    GLFWwindow * window = glfwCreateWindow(800, 600, "Project X", nullptr, nullptr);

    glfwMakeContextCurrent(window);

    world = new World();

    do
    {
        world->Render();

        glfwSwapBuffers(window);
        glfwPollEvents();
    }
    while(glfwWindowShouldClose(window) == false);

    delete world;

    glfwTerminate();

    return 0;
}

#include "World.hpp"


World::World()
{
    glClearColor(0.5f, 0.5f, 0.5f, 1);

    GLuint vertex_shader = glCreateShader(GL_VERTEX_SHADER);
    const GLchar * vertex_source =  "#version 330\n"
                                    "layout(location = 0)in vec3 in_vertex_position;\n"
                                    "void main()\n"
                                    "{\n"
                                    "gl_Position = vec4(in_vertex_position, 1);\n"
                                    "}\n";
    glShaderSource(vertex_shader, 1, &vertex_source, nullptr);
    glCompileShader(vertex_shader);
    GLint vertex_result;
    glGetShaderiv(vertex_shader, GL_COMPILE_STATUS, &vertex_result);
    if(vertex_result != GL_TRUE)
    {
        std::cerr<<"Could not compile vertex shader !"<<std::endl;
    }

    GLuint fragment_shader = glCreateShader(GL_FRAGMENT_SHADER);
    const GLchar * fragment_source =    "#version 330\n"
                                        "out vec4 out_fragment_color;\n"
                                        "void main()\n"
                                        "{\n"
                                        "out_fragment_color = vec4(0.3, 1.0, 1.0, 1.0);\n"
                                        "}\n";
    glShaderSource(fragment_shader, 1, &fragment_source, nullptr);
    glCompileShader(fragment_shader);
    GLint fragment_result;
    glGetShaderiv(fragment_shader, GL_COMPILE_STATUS, &fragment_result);
    if(fragment_result != GL_TRUE)
    {
        std::cerr<<"Could not compile fragment shader !"<<std::endl;
    }

    program = glCreateProgram();
    glAttachShader(program, vertex_shader);
    glAttachShader(program, fragment_shader);
    glLinkProgram(program);
    GLint result;
    glGetProgramiv(program, GL_LINK_STATUS, &result);
    if(result != GL_TRUE)
    {
        std::cerr<<"Could not link program !"<<std::endl;
    }

    glGenBuffers(1, &buffer);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    GLfloat vertices_positions[] = {0, 0, 0, 1, 0, 0, 1, 1, 0};
    glBufferData(GL_ARRAY_BUFFER, 9 * sizeof(GL_FLOAT), vertices_positions, GL_STATIC_DRAW);
}


World::~World()
{
}


void World::Render()
{
    glClear(GL_COLOR_BUFFER_BIT);
    glUseProgram(program);
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0);
    glDrawArrays(GL_TRIANGLES, 0, 3);
    glDisableVertexAttribArray(0);
}

0 个答案:

没有答案
相关问题