我有一个OpenGL批处理渲染器,它有一个静态的VAO,VBO,EBO等,问题是,这些都是OpenGL方法的构造函数。现在,因为它们是静态的,所以像glGenBuffers
这样的OpenGL方法在OpenGL初始化之前被调用。
所以你可以得到一张更好的照片,它看起来是这样的:
class renderer2d
{
private:
static vertex_array vao;
static vertex_buffer vbo;
static index_buffer ibo;
public:
static void draw();
static GLuint create_quad(glm::vec2 position, glm::vec2 size, GLfloat angle, glm::vec4 color);
}
和int构造函数,例如vao:
vao()
{
//some sort of opengl method, that gets called without opengl being initialized
glGenVertexArrays(1, &id);
}
顺便说一句,我并不是只想“解决”问题而保持“静态解决方案”,如果你对如何做到这一点有不同的想法,请告诉我
1条答案
按热度按时间z8dt9xmd1#
一个技巧是延迟对象的初始化,如下所示:
此方法适用于任何类,它不要求呈现器本身具有静态数据。该函数也可以是类的静态成员,作为Meyers单例设计的一部分。