如何使用 OpenGL ARB_gl_spirv 扩展?

Posted

技术标签:

【中文标题】如何使用 OpenGL ARB_gl_spirv 扩展?【英文标题】:How to use OpenGL ARB_gl_spirv extension? 【发布时间】:2017-04-22 10:47:34 【问题描述】:

我想将我的 GLSL 着色器编译为 SPIR-V 二进制文件,并在我的 OpenGL 项目中使用它。

我找到了glslang,使用我可以将 glsl 着色器编译为 spir-v。但是我还没有找到任何关于如何在我的 C++ 项目中使用它的教程。如何加载这些二进制文件并从中创建着色器程序?

【问题讨论】:

【参考方案1】:

加载 SPIR-V 二进制文件,就像在 C++ 中加载任何其他二进制文件一样。然后,在编译着色器时,必须调用glShaderBinaryglSpecializeShader

GLuint vertexShader = glCreateShader( GL_VERTEX_SHADER );
glShaderBinary( 1, &vertexShader, GL_SHADER_BINARY_FORMAT_SPIR_V_ARB, vertexData, sizeof( vertexData ) ); // vertexData is the SPIR-V file contents
glSpecializeShader( vertexShader, "main", 0, nullptr, nullptr );
glAttachShader( program, vertexShader );

【讨论】:

以上是关于如何使用 OpenGL ARB_gl_spirv 扩展?的主要内容,如果未能解决你的问题,请参考以下文章

Qt & OpenGL:如何强制使用 OpenGL 2.1?

如何使用 OpenGL 创建“无限”世界

如何使用openGL画点?(c++)

如何使用 Qt 4 创建 OpenGL 3 上下文?

如何使用OpenGL知道所有顶点的当前坐标

opengl中如何实现图象的缩放