Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 尽管glxinfo断言可用,但OpenGL核心概要文件不可用_C_Opengl_Freebsd_Glfw - Fatal编程技术网

C 尽管glxinfo断言可用,但OpenGL核心概要文件不可用

C 尽管glxinfo断言可用,但OpenGL核心概要文件不可用,c,opengl,freebsd,glfw,C,Opengl,Freebsd,Glfw,我正在运行:FreeBSD 12.2版本,我有一个ThinkPad x230,我想它有一个Intel HD 4000 GPU。我正在尝试使用核心配置文件运行GLSL 4.20。当我运行我的程序(用C编写)时,我得到: 但是,如果我运行glxinfo命令,我会得到以下信息: 我已经修剪了上面的输出,因为它非常扩展。此外,该维基百科还断言OpenGL4.20确实受GPU支持(尽管它仅指GNU/Linux和Windows平台)。所以我真的很困惑我的系统是否支持OpenGL4.20。我是否遗漏了什么或g

我正在运行:FreeBSD 12.2版本,我有一个ThinkPad x230,我想它有一个Intel HD 4000 GPU。我正在尝试使用核心配置文件运行GLSL 4.20。当我运行我的程序(用C编写)时,我得到:

但是,如果我运行
glxinfo
命令,我会得到以下信息:

我已经修剪了上面的输出,因为它非常扩展。此外,该维基百科还断言OpenGL4.20确实受GPU支持(尽管它仅指GNU/Linux和Windows平台)。所以我真的很困惑我的系统是否支持OpenGL4.20。我是否遗漏了什么或glxinfo不准确

另外,当我运行
glxgears-info
时,我会得到(完整输出也会被修剪):

然后,如果我在顶点着色器和片段着色器中都设置了
#version 300 core
,则会弹出相同的错误:

Error - 0:1(10): error: GLSL 3.00 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
在程序中编译着色器时,会弹出此错误。我通过
GLFW3
使用OpenGL,并将
GLAD
设置为OpenGL版本4.20和核心概要文件。欢迎提出任何建议

我正在编辑我的问题,添加我正在运行的初始化代码:

struct GameContext*新的游戏上下文(大小、宽度、高度){
printf(“[GameContext]新的游戏上下文。\n”);
struct GameContext*game_context=calloc(1,sizeof(struct GameContext));
中止(空指针,(空*)游戏上下文,游戏上下文内存不足);
游戏上下文->键盘=新键盘();
游戏上下文->窗口=0;
游戏上下文->退出游戏=false;
glfwInit();
glfwWindowHint(GLFW_可调整大小,GLFW_为假);
游戏上下文->窗口=glfwCreateWindow(宽度,高度,“测试”,0,0);
中止(&null\u指针,(void*)游戏上下文->窗口,游戏上下文\u GLFW\u窗口\u错误);
glfwMakeContextCurrent(游戏上下文->窗口);
如果(!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
中止打开(&始终,空,游戏上下文错误);
glfwSwapInterval(1);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去GL_SRC_ALPHA);
glEnable(GL_混合物);
glEnable(GL_线_光滑);
glLineWidth(游戏背景线宽度);
glfwSetKeyCallback(游戏上下文->窗口,(GLFWkeyfun)处理键盘事件);
glfwSetWindowUserPointer(游戏上下文->窗口,(无效*)游戏上下文->键盘);
游戏内容->游戏对象=创建游戏对象();
返回游戏上下文;
}

Mesa通常会为您提供GL 2.1或3.0上下文,除非您要求更高的上下文

glfwCreateWindow()
之前使用
glfwWindowHint()
设置要请求的GL版本和核心属性:

glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 4 );
glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 2 );
glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE );

在一个文件夹中编辑。据我们所知,您没有请求核心上下文。请随意使用作为基础。这表示您当前的配置文件不支持GLSL 4.2。如果当前配置文件是旧的,则可能无法在旧配置文件中放置新着色器!glGetString(GL_版本)在您的程序中返回什么?@user253751正在给我:
3.0 Mesa 19.0.8
。所以你的意思是我没有告诉OpenGL我想通过提示使用它的3.0版本?尝试使用设置/context版本和。否则您将获得默认值。非常感谢您的帮助!这确实是问题所在。从OpenGL我仍然不明白的是,为什么这个信息(版本)既需要通过提示,也需要在着色器中指定。我错误地认为在着色器中指定配置文件版本就足够了。您可以提供低于当前版本的GLSL程序,如GL 4.2上下文上的
#version 130
。基本上只是告诉GL要使用哪个解析器和功能集。
Running synchronized to the vertical refresh.  The framerate should be
approximately the same as the monitor refresh rate.
GL_RENDERER   = Mesa DRI Intel(R) Ivybridge Mobile 
GL_VERSION    = 3.0 Mesa 19.0.8
GL_VENDOR     = Intel Open Source Technology Center
...
Error - 0:1(10): error: GLSL 3.00 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.00 ES, and 3.00 ES
glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 4 );
glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 2 );
glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE );