glClearBufferfv - 未在此范围内声明?
Posted
技术标签:
【中文标题】glClearBufferfv - 未在此范围内声明?【英文标题】:glClearBufferfv - not declared in this scope? 【发布时间】:2016-05-30 15:29:53 【问题描述】:编辑:如果有人遇到这种错误,并且正在使用 GLEW,那么在使用 OpenGL 4.5 功能时,以下内容会有所帮助:
glewExperimental = GL_TRUE;
之后只需初始化 GLEW 就可以了。
我刚刚开始使用 OpenGL。目前我正在尝试用红色清除整个屏幕,如此处的代码所示:
#include "GLFW/glfw3.h"
#define WIDTH 1280
#define HEIGHT 720
int main(void)
GLFWwindow *window;
if(!glfwInit())
return -1;
window = glfwCreateWindow(WIDTH, HEIGHT, "Test OpenGL", NULL, NULL);
if(!window)
glfwTerminate();
return -1;
glfwMakeContextCurrent(window);
static GLfloat red[] = 1.0f, 0.0f, 0.0f, 1.0f;
glClearBufferfv(GL_COLOR, 0, red);
while(!glfwWindowShouldClose(window))
//glEnableClientState(GL_VERTEX_ARRAY);
//glDisableClientState(GL_VERTEX_ARRAY);
glfwSwapBuffers(window);
glfwPollEvents();
glfwTerminate();
return 0;
但是有一个问题。我正在使用 g++ 编译用 Code::Blocks 编写的代码。另外,我正在学习 OpenGL SuperBible 第 7 版,在那里我获得了用红色清除屏幕的代码。在我使用 glClearColor(255, 0, 0, 0) 和 glClear(GL_COLOR_BUFFER_BIT); 之前 但是在本书中,使用 glClearBufferfv 清除屏幕,会引发以下异常:
错误:“glClearBufferfv”未在此范围内声明
当然,我想将书中的代码用于学习目的,如果可以的话,那就太好了。可悲的是,它没有。有什么想法,为什么?
【问题讨论】:
【参考方案1】:glClearBufferfv
是一个较新的 OpenGL 函数,这意味着在技术上讲 OpenGL 的显卡可能不支持它。这意味着该函数需要由您或OpenGL loading library加载,然后您才能使用它。
SuperBible 示例代码附带 gl3w 加载程序,作为其 s7 帮助程序库的一部分。你可以:
使用 s7,本书中的其他示例也可能依赖于它 跳过 s7 并使用 gl3w 或任何其他加载器,就像我个人最喜欢的 libepoxy 不要使用加载器和load the functions you need by hand。这很快就会变得乏味,但这确实意味着您可以看到发生了什么。GLFW documentation 也有一些有用的指针。
【讨论】:
好吧,所以我开始使用 GLEW,这似乎是最适合我的目的,但现在我收到以下错误:未定义引用 _imp______glewClearBufferfv 我也倾向于不使用 sb7.h,因为我不打算在未来使用它。 这听起来像是一个链接问题。你读过 GLEW 的 installation instructions 吗? 好吧,我同时尝试了其他方法。我在包含 glew.h 之前定义了 GLEW_STATIC,并链接到 glew32s.lib,而不是 glew32.lib,但它对我不起作用。所以我想,我会按照你的建议使用gl3w(为什么我什至不使用它?:D)我想问一件事:链接器的加载顺序是否正确?:glfw3,opengl32, gdi32, 包括\Win32\glew32s.lib 我没有要检查的 Windows 机器,但这似乎是明智的。如果你现在不能让加载器工作,你可以一直使用glfwGetProcAddress
,直到你这样做。
你能给我一个快速指南吗?我以前从未使用过这个。我试过:glfwGetProcAddress(glClearBufferfv(GL_COLOR, 0, red));我敢肯定,这是错误的:D以上是关于glClearBufferfv - 未在此范围内声明?的主要内容,如果未能解决你的问题,请参考以下文章