问题描述
我正在尝试将OpenGL与GLEW和GLFW一起使用。但是,看来我无法成功调用glewInit()
,并且收到以下错误消息:GLEW error (1): Missing GL version
。 Stackoverflow上的类似问题还没有解决我的问题。
构建项目时,我将包含glew.c
文件和glew.h
所在的目录。
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
int main()
{
glfwInit();
glfwWindowHint(GLFW_SAMPLES,0);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);
glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* window = glfwCreateWindow(SCR_WIDTH,SCR_HEIGHT,"Testing",nullptr,nullptr);
glfwMakeContextCurrent(window);
glewExperimental = true;
GLenum glewErr = glewInit();
if (glewErr != GLEW_OK)
{
std::cerr << "GLEW error (" << glewErr << "): " << glewGetErrorString(glewErr) << std::endl;
glfwTerminate();
return -1;
}
// Next,I paint some stuff using OpenGL ...
}
代码中的所有内容看起来都不错。此外,由于某种原因,如果我使用GLAD而不是GLEW,我的代码也可以正常工作。
- 系统:Ubuntu 18.04.5 LTS。
- OGL版本:3.3.0 NVIDIA 340.108
- OGL供应商:NVIDIA Corporation
- 渲染器:GeForce 820M / PCIe / SSE2
- GLSL版本:通过Cg编译器的3.30 NVIDIA
更新:
我深入研究glew.c
代码,发现错误出现的位置,尽管我仍然不明白为什么。这是代码段
static GLenum GLEWAPIENTRY glewContextInit ()
{
PFNGLGETSTRINGPROC getString;
const GLubyte* s;
GLuint dot;
#ifdef _WIN32
getString = glGetString; // Not executed,I'm on Ubuntu
#else
getString = (PFNGLGETSTRINGPROC) glewGetProcAddress((const GLubyte*)"glGetString");
if (!getString)
return GLEW_ERROR_NO_GL_VERSION;
#endif
/* query opengl version */
s = getString(GL_VERSION); // <<< ERROR: s gets a null pointer
dot = _glewStrCLen(s,'.');
if (dot == 0)
return GLEW_ERROR_NO_GL_VERSION; // <<< Function escapes here
// ... more statement down here
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)