C++ GLEW未初始化;抛出;缺少OpenGL版本“;
我试图在SDL_窗口上初始化OpenGL上下文 问题是,当我尝试执行C++ GLEW未初始化;抛出;缺少OpenGL版本“;,c++,linux,opengl,sdl,glew,C++,Linux,Opengl,Sdl,Glew,我试图在SDL_窗口上初始化OpenGL上下文 问题是,当我尝试执行glewInit()时,它无法初始化,并给出错误消息“缺少OpenGL版本” 我在Google上翻了翻,似乎这个错误要么在OpenGL上下文未初始化时出现,要么更具体地说,对于SDL,当上下文未通过SDL\u GL\u MakeCurrent设置为当前时出现 值得一提的是,这里使用的SDL/OpenGL对象(gi_窗口、gi_glcontext)是GameInstance类中的公共变量 我的OpenGL版本是3.0,SDL版本是
glewInit()
时,它无法初始化,并给出错误消息“缺少OpenGL版本”
我在Google上翻了翻,似乎这个错误要么在OpenGL上下文未初始化时出现,要么更具体地说,对于SDL,当上下文未通过SDL\u GL\u MakeCurrent
设置为当前时出现
值得一提的是,这里使用的SDL/OpenGL对象(gi_窗口、gi_glcontext)是GameInstance
类中的公共变量
我的OpenGL版本是3.0,SDL版本是2.0.3,GLEW版本是1.10-2
正在使用的系统是64位Arch Linux(因此安装了上述库的64位版本)
初始化代码
我是个白痴
if(glewerror =! GLEW_OK)
{
std::cerr << "GLEW Error(something about the initilazation): " <<
glewGetErrorString(glewerror) << std::endl;
}
if(glewerror=!GLEW_OK)
{
性病::cerr囊性纤维化只需要组成我们DNA的序列中约2或3个字母不同——这通常是致命的。然而,我们可以拥有数百或数千个不同于其他人的基因,而不会产生不良影响。关键是——有些东西是至关重要的,而另一些则不是。将代码缩减到最小功能ning程序并从那里开始。感谢您的响应,但我已经从头重写了此代码;甚至删除了错误处理(当然从glewInit()
中除外),但问题仍然存在。在编辑3中,您的SDL_Init()在哪里
go?这有点重要。你所有的代码都很混乱。你的新代码缺少SDL_Init()
call。但它试图在创建上下文后设置GL上下文版本,这将无效。您的原始区域代码使用了正确的顺序。这可能是它失败的原因。可能是您没有GL3支持。您链接的示例的顺序也不正确,因此您可能会在那里获得旧上下文。@derhass,@genpfault啊,是的,我有一个头脑放屁,不包括SDL_Init。我应该有GL3支持,至少在glGetString(GL_版本)
告诉我的范围内(它输出3.0 Mesa 10.2.2
)。你并不孤单!!谢谢你发布这篇文章。哇……我花了一段时间才看到“!=”和“=!”的区别
#include <SDL2/SDL.h>
#include <SDL2/SDL_version.h>
#include <GL/glew.h>
#include <iostream>
int main()
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window* gi_window = SDL_CreateWindow("I would love for this to work!",
SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, 640, 480,
SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
SDL_GLContext gi_glcontext = SDL_GL_CreateContext(gi_window);
SDL_GL_MakeCurrent(gi_window, gi_glcontext);
SDL_GL_SetAttribute ( SDL_GL_CONTEXT_MAJOR_VERSION , 3 );
SDL_GL_SetAttribute ( SDL_GL_CONTEXT_MAJOR_VERSION , 0 );
glewExperimental = GL_TRUE;
GLenum glewerror = glewInit();
if(glewerror =! GLEW_OK)
{
std::cerr << "GLEW Error(something about the initilazation): " << glewGetErrorString(glewerror) << std::endl;
}
}
if(glewerror =! GLEW_OK)
{
std::cerr << "GLEW Error(something about the initilazation): " <<
glewGetErrorString(glewerror) << std::endl;
}
if(glewerror != GLEW_OK)
{
std::cerr << "GLEW Error(something about the initilazation): " <
glewGetErrorString(glewerror) << std::endl;
}