opengl - 如何使用 OpenGL ARB_gl_spirv 扩展?

标签 opengl glsl spir-v

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

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

最佳答案

加载 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 - 如何使用 OpenGL ARB_gl_spirv 扩展?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43558287/

相关文章:

c - OSX 上 C OpenGL 程序的基本框架

Java 代码 (openGL) 占用过多内存并导致应用程序停止工作

glsl - 绑定(bind)多个统一缓冲区对象

opencl - 截至 2018 年中期,NVIDIA SPIR 支持的状态如何?

opengl - 指定为 GL_RGBA 的内部格式的什么数据类型?

c++ - Visual Studio 2013 强制将 64 DLL 文件转换为 32 位应用程序 - 如何解决此问题?

c++ - GLSL 截断符号距离表示 (TSDF) 实现

c++ - GLSL 像素着色器仅运行 0 个纹理单元

floating-point - 如何使用 Vulkan 在现代 GLSL 中获得 16 位 float ?

rust - 是否可以在运行时编译Vulkano着色器?