GLEW 未初始化;吐出"Missing OpenGL Version"

GLEW not initialising; Throws up "Missing OpenGL Version"

本文关键字:Missing Version OpenGL 吐出 初始化 GLEW      更新时间:2023-10-16

我正在尝试在SDL_Window上初始化OpenGL上下文。

问题是,当我尝试执行glewInit()时,它无法初始化并给出错误信息"Missing OpenGL version."

我在谷歌上闲逛了一下,似乎这个错误要么出现在OpenGL上下文没有初始化的时候,或者更具体地说,对于SDL,当上下文不是由SDL_GL_MakeCurrent当前的时候。

值得一提的是,这里使用的SDL/OpenGL对象(gi_window, gi_glcontext)是GameInstance类中的公共变量。

我的OpenGL版本是3.0,我的SDL版本是2.0.3,我的GLEW版本是1.10-2。

使用的系统是64位Arch Linux(因此安装了上述库的64位版本)。

初始化代码

#include "../headers/init.h"
GameInstance::GameInstance(int p_fps, int p_height, int p_width, const char* p_wtitle)
{
  gi_fps = p_fps;
  if(SDL_Init(SDL_INIT_EVERYTHING) < 0)
  {
    std::cerr << "SDL Error(something about the init):" << SDL_GetError() << std::endl;
  }
  gi_window = SDL_CreateWindow(p_wtitle,
                               SDL_WINDOWPOS_UNDEFINED,
                               SDL_WINDOWPOS_UNDEFINED, p_width, p_height,
                               SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN);
  if(gi_window == NULL)
  {
    std::cerr << "SDL Error(couldn't create window): " << SDL_GetError() << std::endl;
  }
  SDL_GL_SetAttribute ( SDL_GL_CONTEXT_MAJOR_VERSION , 3 ) ;
  SDL_GL_SetAttribute ( SDL_GL_CONTEXT_MINOR_VERSION , 0 ) ;
  gi_glcontext = SDL_GL_CreateContext(gi_window);
  if(gi_glcontext == NULL)
  {
    std::cerr << "SDL Error(something about glcontext): " << SDL_GetError() << std::endl;
  }
    std::cout << glGetString(GL_VERSION) << std::endl;
  if(SDL_GL_MakeCurrent(gi_window, gi_glcontext) < 0)
  {
    std::cerr << "SDL Error(something about glcontext): " << SDL_GetError() << std::endl;
  }

  glewExperimental = GL_TRUE;
  GLenum glewerror = glewInit();
  if(glewerror =! GLEW_OK)
  {
    std::cerr << "GLEW Error(something about the initilazation): " << glewGetErrorString(glewerror) << std::endl;
  }
  SDL_version compiled;
  SDL_GetVersion(&compiled);
  printf("SDL Version: %d.%d.%dn",compiled.major, compiled.minor, compiled.patch); // 
  SDL_Delay(200000);
}
编辑:

似乎Missing OpenGL Version也出现的另一个原因,当glewExperimental没有设置,因为只有glewExperimental版本支持3.0+

我已经正确设置了glewExperimental(至少从我从网上的例子中收集到的),但它仍然给我Missing OpenGL Version

编辑2:

这里的代码没有抛出Missing OpenGL version,尽管它与我的非常相似。

编辑3:

根据enhzflep的建议,我重写了代码,试图诊断出发生了什么。

错误没有缓解。

#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;
 }

向所有试图帮助我的人干杯!