我正在尝试初始化GLew 1.10以及最新版本的GLFW3。我设法使GLFW3正常工作,但是GLew相当困难。我遵循了GLew网站上的示例有关如何初始化的示例,但是由于某些原因,glewInit()
是未定义的,而glewGetContext identifier not found / undefined
(底部错误):
#include <GLew110\glew.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: %s\n", 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
的设置位置并进行修复。
关于c++ - 无法使用GLFW3初始化GLew,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20943385/