OpenGL:如何检查用户GFX卡是否可以使用我的着色器渲染
OpenGL: How to check if the user GFX card can render with my shader?
如果用户不支持我为更快地渲染某些内容而制作的着色器,我需要进行回退。
那么,我究竟如何检查这些东西呢?我知道某些 GLSL 版本不支持某些着色器函数,但是,这些功能与它们需要的版本的完整列表在哪里?
但问题是,我不知道我需要知道什么才能知道谁可以渲染该着色器。是否只是检查哪个 GLSL 版本支持哪个功能?还是还有更多要知道的?我想 100% 确定何时切换到回退渲染以及何时使用 GLSL 渲染。
我知道如何检索 GLSL 和 OpenGL 版本字符串。
如果glLinkProgram
设置了 GL 错误状态,则着色器与卡不兼容。
调用glLinkProgram
后,建议使用以下命令检查链路状态:
glGetProgramiv(program, GL_LINK_STATUS, &linkStatus);
这将为您提供一个布尔值,指示程序链接是否正常。您还有可用的GL_COMPILE_STATUS
。
大多数情况下,这将指示程序是否无法在您的平台上编译或链接。
但是,请注意,程序可能链接良好,但不适合在您的硬件上运行,在这种情况下,GL 渲染将回退到软件渲染上,并且缓慢缓慢。
在这种情况下,如果幸运的话,您将在此链接日志中收到一条消息,但此消息取决于平台。
相关文章:
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 模板专业化可以进入我的.cpp吗?
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- 如何使我的 sizeof sum 结构与空参数包一起工作
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 如何格式化我的文本文件以使其不会一遍又一遍地重复同一行?
- 如何改进我的代码,使其不会因超时而终止?(黑客排名挑战)
- 如何使实例化在我的 OpenGL 程序中工作?
- 如何判断类型双关语在我的平台上是否可以?
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 什么时候可以使用常量装饰调用我的重载函数?
- 我可以以某种方式使我的矢量/数组动态更改装置数量吗?
- 有哪些优化技巧可以使我的代码运行得更快
- 语法错误,也想知道我是否可以使这段代码更有效率
- 是否可以使程序的执行跳过 fprintf-语句/如何创建我自己的 fprintf 函数
- 仅仅使用(稳定的)第三方库就可以使我的代码无法工作
- 当我向只接受无符号整数的函数提供有符号整数时,是否有一种方法可以使GCC警告我?
- 我的C++模拟器使终端崩溃
- 如何使我的EXE可以在控制台接受参数
- 我可以让我的 Makefile 自动使 GCC 使用它支持的最新标准吗?