无法使用GLFW3初始化GLew
Cant initialize GLew with GLFW3
我正在尝试初始化GLew 1.10以及最新版本的GLFW3。我已经设法使GLFW3顺利工作,但GLew相当困难。我遵循了GLew网站上关于如何初始化的示例,但由于某些原因,glewInit()
未定义,glewGetContext identifier not found / undefined
(底部错误):
#include <GLew110glew.h>
#define GLFW_INCLUDE_GLU
#include <GLFW/glfw3.h>
#include <stdlib.h>
#include <stdio.h>
static void error_callback(int error, const char* description)
{
fputs(description, stderr);
}
static void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (key == GLFW_KEY_ESCAPE && action == GLFW_PRESS)
glfwSetWindowShouldClose(window, GL_TRUE);
}
int main(void)
{
GLFWwindow* window;
glfwSetErrorCallback(error_callback);
if (!glfwInit())
exit(EXIT_FAILURE);
window = glfwCreateWindow(800, 600, "Simple example", NULL, NULL);
if (!window)
{
glfwTerminate();
exit(EXIT_FAILURE);
}
GLenum err = glewInit(); // <---- "glewGetContext" is undefined (line 29)
if (GLEW_OK != err)
{
/* Problem: glewInit failed, something is seriously wrong. */
fprintf(stderr, "Error: %sn", glewGetErrorString(err));
}
glfwMakeContextCurrent(window);
glfwSetKeyCallback(window, key_callback);
while (!glfwWindowShouldClose(window))
{
float ratio;
int width, height;
glfwGetFramebufferSize(window, &width, &height);
ratio = width / (float) height;
glViewport(0, 0, width, height);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-ratio, ratio, -1.f, 1.f, 1.f, -1.f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef((float) glfwGetTime() * 50.f, 0.f, 0.f, 1.f);
glBegin(GL_TRIANGLES);
glColor3f(1.f, 0.f, 0.f);
glVertex3f(-0.6f, -0.4f, 0.f);
glColor3f(0.f, 1.f, 0.f);
glVertex3f(0.6f, -0.4f, 0.f);
glColor3f(0.f, 0.f, 1.f);
glVertex3f(0.f, 0.6f, 0.f);
glEnd();
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwDestroyWindow(window);
glfwTerminate();
exit(EXIT_SUCCESS);
}
列出了两个错误:
error C3861: 'glewGetContext': identifier not found (line 29 pointing to glewInit())
IntelliSense: identifier "glewGetContext" is undefined (line 29)
正在定义宏GLEW_MX
,该宏用于为多个渲染上下文配置glew
库。采用这种配置的建筑需要一些特殊的准备。以下内容来自http://glew.sourceforge.net/advanced.html(增加强调):
多个渲染上下文(GLEW-MX)
从1.2.0版本开始,线程安全支持多个渲染上下文,可能具有不同的功能可获得的由于大多数用户不需要此项,因此不会添加到二进制版本,以保持不同版本之间的兼容性版本。要包含多上下文支持,您必须执行以下内容:
- 编译并使用定义了GLEW_MX预处理器标记的GLEW
- 对于每个渲染上下文,创建一个GLEWContext对象,只要存在渲染上下文,该对象就可用
- 定义一个名为glewGetContext()的宏或函数,该宏或函数返回指向与渲染关联的GLEWContext对象的指针从中发出OpenGL/WGL/GLX调用的上下文。此调度机制是原始的,但却是通用的
- 确保在每个渲染上下文中创建GLEWContext对象后调用glewInit()。注意,GLEWContext指针glewGetContext()返回的必须位于全局或线程本地内存
如果不需要多个渲染上下文,最好的办法可能是找出GLEW_MX
的设置位置并修复它。
以防万一有人遇到类似问题。请在调用glfwMakeContextCurrent:)后尝试调用glewInit
/* Make the window's context current */
glfwMakeContextCurrent(window);
int glewErr = glewInit();
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- C++使用整数的压缩数组初始化对象
- C++初始化基类
- 多成员Constexpr结构初始化
- 复制列表初始化的隐式转换的等级是多少
- 内联映射初始化的动态atexit析构函数崩溃
- 如何在C++中初始化嵌套类中的2个memeber
- 如何声明特征矩阵,然后通过嵌套循环初始化它
- 没有用于初始化C++中的变量模板的匹配构造函数
- 在未初始化映射的情况下,将值插入到映射的映射中
- C++成员初始化
- 为什么在C++中首先初始化成员类
- GLEW/GLUT:调用init并创建一个窗口后,取消初始化并重新初始化?
- 为什么需要检查 GLAD 或 GLEW 是否正确初始化?
- 使用GLGENBUFFERS()访问违规,并以正确的顺序进行GLEW初始化
- OpenGL + SDL + glew 在成功初始化后不会绘制任何内容
- GLEW 初始化失败
- MFC和OpenGL CView,C ,Glew之后初始化OpenGL
- 无法使用GLFW3初始化GLew
- GLEW 未初始化;吐出"Missing OpenGL Version"