我正在尝试用 C++ 学习 OpenGL。为了清理我的代码,我试图创建一个头文件,其中包含所有描述对象的变量。这个标题看起来像这样:
#pragma once
#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw.h>
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <stb/stb_image.h>
namespace data {
...
float fragments[] = {...}
int indices[] = {...}
...
}
我还想将 VAO 和 VBO 添加到这个命名空间,但是一旦我尝试使用glGenBuffers
and来实现它们glGenVertexArray
:
unsigned int VBO;
glGenBuffers(1, &VBO);
IDE(Visual Studio)指出了一个错误,上面写着“这个声明不包括存储类或类型标识符”(指的是glGenBuffer
函数;我的编辑器设置为意大利语,因此我的翻译可能不完美)。我还尝试在这个命名空间中添加一个类(即使在我的开始计划中我想避免这种方法):
#include <...>
namespace data {
class Data {
public:
unsigned int VBO;
glGenBuffers(1, &VBO)
};
}
这次我得到的错误是:“缺少显式类型。它将被使用 int”(指glGenBuffers
函数;包含我之前写的内容:翻译可能不完美,但我认为这是可以理解的)。作为最后一次尝试,我也尝试在函数main.cpp
下在文件中实现命名空间。main
我得到的错误与第一个相同,但如果我在 main 中使用这些函数调用,它们就可以工作。我还已经编写了一些其他类,例如shader.h
或camera.h
遵循本指南,并且我能够(使用必要的包含,例如glad/glad.h
)使用gl*
诸如glCreateShader
、glCreateProgram
等功能glAttachShader
。