glslc 编写 glsl 允许使用 #include 指令

最佳工具就在我的 vulkan sdk 里面,我居然没发现!小丑竟是我自己!
其实情有可原,百度基本没找到该工具的相关信息。因为属于vulkan时代的新东西,还很少人用把。

可以同时用于vulkan和opengl 4.6,其他opengl版本可以开启相关的spirv扩展以获得支持。

该工具名为 glslc 位于 vulkan sdk 中
vulkan sdk 地址:https://vulkan.lunarg.com/sdk/home

这个工具可以让你像编译c文件一样编译glsl文件到spirv字节码文件,同时支持 #include 指令,并且附加了更多的增强功能。

该工具可以准确的指出你的错误是位于源文件还是位于头文件中。

opengl 4.6 核心支持 spirv 着色器。opengl 4.5或更低版本可以通过扩展来开启spirv着色器支持。

glslc 工具开源仓库,有非常详细的参数说明。
https://github.com/google/shaderc/tree/main/glslc

注意,opengl 中使用需要使用分离式 program。

该工具也支持编译 hlsl 文件

该工具具有一个 libshaderc 的C链接库,允许你在程序在运行时对 glsl 源文件链接生成 spirv 着色器字节码。从而无须扩展 ARB_shading_language_include

libshaderc C链接库开源仓库
https://github.com/google/shaderc

使用示例:

头文件 a.h
顶点着色器源文件 b.vert
a.h

mat4 func(mat4 m1, mat4 m2)
{
	return m1 * m2;
}

b.vert

#version 450
#extension GL_ARB_separate_shader_objects : enable
#extension GL_EXT_scalar_block_layout : enable

#include "a.h"

layout(location = 0) in vec3	in_pos;
layout(location = 1) in vec3	in_color;

layout(location = 0) out vec4	out_pos;
layout(location = 1) out vec3	out_color;

layout(set=0, binding=0, std430) uniform _cam_param
{
	mat4 model_mat;
	mat4 view_proj_mat;
};

void main()
{
	mat4 mvp_mat  = func(view_proj_mat, model_mat);
	out_pos = mvp_mat * vec4(in_pos, 1.0);
	out_color = in_color;
	gl_Position = out_pos;
}

编译为b_vert.spv文件

glslc -o b_vert.spv b.vert

完成。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值