我试图学习OpenGL与GLFW/glBinding,我如果我想创建和使用一个顶点缓冲区,我得到了一个错误
error: cannot convert ‘int’ to ‘gl::GLenum’ for argument ‘1’ to ‘void gl::glBindBuffer(gl::GLenum, gl::GLuint)’
gl::glBindBuffer(GL_ARRAY_BUFFER, VBO);
我的IDE(Clion)告诉我,在宏替换之后有一个参数不匹配(显然)。所以我的问题是:我做错了什么因为如果是宏的错,这个主题在谷歌上的点击率会更高:)
代码:
GLuint VBO;
gl::glGenBuffers(1, &VBO);
gl::glBindBuffer(GL_ARRAY_BUFFER, VBO);
我的建议是这样的,它说不要使用命名空间gl::但是如果我不这样做,我就不能访问这些功能,所以我想这不是问题所在。
谢谢
2条答案
按热度按时间hs1ihplo1#
第一步:根据glBinding的文档,参数应该类似于
gl::GL_ARRAY_BUFFER
。不过,这并不能解决整个问题。这是因为您的OpenGL实现使用了
#define
来公开常量(如GL_ARRAY_BUFFER
),具体方式如下:这意味着你的代码实际上是预处理的:
而且,在编译器有机会看到您的代码并使用glBinding的
GL_ARRAY_BUFFER
之前。因此出现了错误。解决方案是,如文档中所述,* 删除并替换 * 标准
GL.h
包含来自glBinding的包含。cmssoen22#
我知道我迟到了,但这可能会帮助那些谷歌这一点,因为我做了。首先,有两种方法可以解决这个问题,一种是面向未来的方法,另一种是快速而肮脏的方法。
快速和肮脏的方法,如上所述,由Steelbean,是:
这个命令很关键。
优雅且面向未来的方法是创建一个特殊的头文件,在其中添加所有条件#include。作为一个例子,这里是我的。请注意,我只使用头文件中指定的2个库中的1个,但您可以同时使用它们(甚至添加更多):
int main(/*int argc, char** argv*/)
。希望这能为您节省一些开发时间。