- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试构建一个 OpenGL 应用程序。首先,我使用旧的固定功能管道进行绘图。然后我注意到这已经过时并且想切换到可编程管道。为此,我使用了网络上的一些教程。更改代码后,我尝试编译它,但我的编译器找不到(核心配置文件?)函数,如 glShaderSource、glCompileShader、glCreateProgram、glAttachShader、glLinkProgram 等。我没有使用 GLFW 库进行窗口管理或类似的东西,而是使用 xlib。
信息 | grep OpenGL 正在打印以下内容:
OpenGL vendor string: NVIDIA Corporation
OpenGL renderer string: GeForce GTX 675M/PCIe/SSE2
OpenGL core profile version string: 4.3.0 NVIDIA 331.113
OpenGL core profile shading language version string: 4.30 NVIDIA via Cg compiler
OpenGL core profile context flags: (none)
OpenGL core profile profile mask: core profile
OpenGL core profile extensions:
OpenGL version string: 4.4.0 NVIDIA 331.113
OpenGL shading language version string: 4.40 NVIDIA via Cg compiler
OpenGL context flags: (none)
OpenGL profile mask: (none)
OpenGL extensions:
#include <GL/gl.h>
#include <GL/glx.h>
In file included from main.cpp:1:0:
../../gui/iml/app.window.h: In constructor ‘gui::iml::AppWindow::AppWindow()’:
../../gui/iml/app.window.h:65:52: error: ‘glCreateShader’ was not declared in this scope
fragmentShader = glCreateShader(GL_VERTEX_SHADER);
^
../../gui/iml/app.window.h:66:47: error: ‘glShaderSource’ was not declared in this scope
glShaderSource(vertexShader,1,&vshader,NULL);
^
../../gui/iml/app.window.h:67:32: error: ‘glCompileShader’ was not declared in this scope
glCompileShader(vertexShader);
^
../../gui/iml/app.window.h:72:38: error: ‘glCreateProgram’ was not declared in this scope
GLuint sprogram = glCreateProgram();
^
../../gui/iml/app.window.h:73:50: error: ‘glAttachShader’ was not declared in this scope
glAttachShader(this->shaderProg,fragmentShader);
^
../../gui/iml/app.window.h:75:34: error: ‘glLinkProgram’ was not declared in this scope
glLinkProgram(this->shaderProg);
g++ -Wall -Winline -DDEBUG main.cpp -I ../../gui/ -o debug -lX11 -lGL -lGLU -pthread -std=c++11
/*
* Mesa 3-D graphics library
*
* Copyright (C) 1999-2006 Brian Paul All Rights Reserved.
* Copyright (C) 2009 VMware, Inc. All Rights Reserved.
*
sudo apt-get install libgles2-mesa-dev
最佳答案
虽然您的问题可能从表面上消失了,但实际上您并没有解决根本原因(至少如果您的目标是 LSB4 合规性,那么纯粹是因为您的程序实际上符合 LSB5 的 glShader... 函数而完全不走运)。
您遇到的问题是,Linux 标准库 (LSB) 仅将 OpenGL-1.2 定义为要包含在系统 ABI 中的强制功能集。 *任何超出 OpenGL-1.2 的符号都不属于您在 Linux 桌面系统上所允许的标准功能集的一部分。最近发布的 LSB5 将要求提高到 OpenGL-2.1。
无论如何,任何超出 LSB 定义的函数都必须(我重复 必须 )在运行时动态解析并测试可用性。如果你不这样做,你的程序最终会在其他人的系统上崩溃。
解析符号的相关函数是glXGetProcAddress
(或 wglGetProcAddress
分别在 Windows 上)。 不要启用 gl3.h
的原型(prototype)定义……只有痛苦和苦难在这条路上。相反,为了保护自己的工作,请使用经过适当测试的 OpenGL 加载程序库,如 GLEW(有相当多的问题)或 glLoadGen/glload (我建议使用后者)。
关于c++ - OpenGL XUbuntu 14.04 glShaderSource、glCompileShader、glCreateProgram 函数未声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30800157/
在调试我的系统时,我发现我使用的所有着色器都从未编译过。所有 GLSL 程序都愉快地链接在一起,并且工作得非常顺利。 我已在整个代码库中搜索了对 glCompileShader 的调用,但没有找到。
这个片段着色器可以毫无问题地编译和工作: #version 330 core uniform sampler2D sampler; uniform vec3 clr; vec2 pos; void m
尝试在 MacOS 上使用 OpenGL 运行 Java 应用程序时收到以下错误代码: A fatal error has been detected by the Java Runtime Envi
我正在尝试构建一个 OpenGL 应用程序。首先,我使用旧的固定功能管道进行绘图。然后我注意到这已经过时并且想切换到可编程管道。为此,我使用了网络上的一些教程。更改代码后,我尝试编译它,但我的编译器找
我是一名优秀的程序员,十分优秀!