OpenGL:程序组织

时间:2014-08-09 17:55:02

标签: c++ opengl

我开始学习OpenGL。到目前为止,我做得还不错,唯一的问题是我不确切地知道哪个是最好的"组织该计划的方式。例如,很多教程在main()函数上按顺序构造所有代码,我认为这不是很好。其他人将构建render(),init()等函数,并在main()函数上调用它们。

现在我正在尝试混合,我构建了一个包装GLFW和GLEW库的类,我在main()上调用它们。我还有init()和render()函数。我遇到的问题是我必须将(GLuint程序)声明为全局变量,这是不可取的。这是我可以使渲染函数也使用变量的唯一方法。 这是代码:

#define GLEW_STATIC
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include "GLWrapper.h"
#include "GLShader.h"
#include <iostream>
#include <ctime>
using namespace std;

GLuint program;

void renderer() {
    glClear(GL_COLOR_BUFFER_BIT);
    glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

    float time = float(clock()) / float(CLOCKS_PER_SEC);
    GLint uniColor = glGetUniformLocation(program, "triangleColor");
    glUniform3f(uniColor, (sin(time * 4.0f) + 1.0f) / 2.0f, cos(time*2), 0.0f);

    glDrawArrays(GL_TRIANGLES, 0, 3);
}

void init() {
    float vertices[] = {
        0.0f, 0.5f, // Vertex 1 (X, Y)
        0.5f, -0.5f, // Vertex 2 (X, Y)
       -0.5f, -0.5f  // Vertex 3 (X, Y)
    };
    GLuint vao;
    glGenVertexArrays(1, &vao);
    glBindVertexArray(vao);

    GLuint vbo;
    glGenBuffers(1, &vbo); // Generate 1 buffer
    glBindBuffer(GL_ARRAY_BUFFER, vbo);

    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

    program = LoadShader("Shader.vert", "Shader.frag");
    glUseProgram(program);

}

int main() {
    GLWrapper *glw = new GLWrapper(800, 600, "Ola Mundo!");

    glw->setRenderer(renderer);
    init();

    GLint posAttrib = glGetAttribLocation(program, "position");
    glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 0, 0);
    glEnableVertexAttribArray(posAttrib);

    glw->glMainLoop();

    delete(glw);
    return 0;
} 

所以,我想知道如果有更好的方法来组织这个代码(或许建立一个类?),因为我将构建越来越大的代码,我希望它们尽可能有条理。

希望我能说清楚。

0 个答案:

没有答案