“glCreateShader”在此处未声明?

9

为什么会出现这些错误?

error: 'GL_VERTEX_SHADER' was not declared in this scope
error: 'glCreateShader' was not declared in this scope

代码:

GLuint vs = glCreateShader(GL_VERTEX_SHADER);

是的,我确实有 glut 的包含文件。


您是否已经包含了OpenGL接口头文件? - Aesthete
我需要吗?我以为glut已经包含了那些内容。它对于其他的gl命令也能正常工作。 - Daniel Node.js
您需要运行2.0或更高版本。 - Aesthete
3个回答

7

glGetString(GL_VERSION) 返回什么?

CreateShader 不在 GLUT 中,而是在 OpenGL 2.0 中。如果你的“包含到 GLUT 的头文件”出于某种原因没有包含 gl.h,或者你的 GL 版本低于 2.0,则头文件将不会声明它。

我还建议检查你的 gl.h 文件,看看是否实际声明了 CreateShader

编辑:这个 OpenGL 头文件版本的问题似乎是 Windows 中普遍存在的问题。大多数人建议使用 GLEW 或其他扩展加载库来解决这个问题。


glGetString(GL_VERSION) 返回 2.0.5279 WinXP Release。即使包含了gl.h,它仍然无法工作。奇怪的是,glCreateShader不在gl.h中。为什么没有呢? - Daniel Node.js
你的编译器所包含的OpenGL头文件必须是1.1版(或低于2.0版本)- 你正在使用哪个编译器? - aib
我安装了GLEW并将其包含在项目中,但现在出现了这个错误:undefined reference to '_imp____glewCreateShader' - Daniel Node.js
这是关于编程的内容,将以下文本从英语翻译成中文:#include <windows.h> #include <GL/glew.h> <GL/glut.h> 这就是我要包含的全部内容。 - Daniel Node.js
那是在编译。链接时也需要包含库文件。类似于“-lglew”这样的东西? - aib
显示剩余3条评论

4

-1
确保在尝试访问GL命名空间的任何内容之前,您已经初始化了OpenGL上下文。例如,使用GLAD:
// after initializing window

if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
    std::cout << "Failed to initialize GLAD" << std::endl;
    return -1;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接