Windows下配置glslangValidator实现命令行检查glsl语法

17 篇文章 4 订阅
15 篇文章 5 订阅

openGL系列文章目录

前言

GLSL(OpenGL着色语言OpenGL Shading Language)语法跟C语言很类似,在可编程管线中我们必须要纯手写顶点和片源着色器,这里就要求必须使用GLSL,自行编译,链接,使用,本片文章介绍了GLSL基础语法。
可是调试GLSL很麻烦

一、glslang

glslangValidator是OpenGL标准定制官方Khronos Group定制的GLSL参考编译器,命令行编译模式方便了用户直接测试glsl语法而绕过C/C++的相关依赖库编译,也不需要在主文件编写大量初始化代码。这在实际测试中能节省大量时间,在很多网站如shadertoy,用户编写的glsl代码能够直接在主函数内编译运行,这时候需要方便的语法检查,shadertoy网站也提供了简单的语法检查,然而glslang由于是标准定制官方定制的编译器,从而编译通过的glsl代码在各种支持GLSL语法的驱动上都能正确通过编译。

1.glslang下载

glslang下载地址

2.使用git编译glslang

glslangValidator编译对不同功能的GLSL文件后缀名有要求:

在这里插入图片描述

编译glslang

要完成以下配置工作需要Windows预先配置好git和cmake。
创建新的目录,名为glslang,将github上下载的zip解压到该目录然后鼠标右击Git Bash Here

步骤1

在这里插入图片描述

步骤2

进入命令行后分别输入如下命令:
1.git clone https://github.com/KhronosGroup/glslang.git
在这里插入图片描述
2.mkdir -p build
在这里插入图片描述
3.cd build
在这里插入图片描述
4.git config --global core.fileMode false
在这里插入图片描述
5.cmake …/glslang -DCMAKE_INSTALL_PREFIX="$(pwd)/install"
在这里插入图片描述
6.cmake --build . --config Release --target install
在这里插入图片描述
然后build文件夹下会生成很多文件,进入build/install/bin会看到这两个exe文件
在这里插入图片描述

并且生成 glslang.sln工程

在这里插入图片描述

glslang测试

#version 430
/**/
layout (location = 0) in vec3 vertPos;
layout (location = 1) in vec3 vertNormal;
out vec4 varyingColor;

struct PositionalLight
{	vec4 ambient;
	vec4 diffuse;
	vec4 specular;
	vec3 position;
};
struct Material
{	vec4 ambient;
	vec4 diffuse;
	vec4 specular;
	float shininess;
};

uniform vec4 globalAmbient;
uniform PositionalLight light;
uniform Material material;
uniform mat4 mv_matrix;
uniform mat4 proj_matrix;
uniform mat4 norm_matrix;

void main(void)
{	vec4 color;
	
	// convert vertex position to view space
	vec4 P = mv_matrix * vec4(vertPos,1.0);
	
	// convert normal to view space
	vec3 N = normalize((norm_matrix * vec4(vertNormal,1.0)).xyz);
	
	// calculate view-space light vector (from point to light)
	vec3 L = normalize(light.position - P.xyz);
	
	//  view vector is negative of view space position
	vec3 V = normalize(-P.xyz);
	
	//  R is reflection of -L around the plane defined by N
	vec3 R = reflect(-L,N);

	// ambient, diffuse, and specular contributions
	vec3 ambient =
		((globalAmbient * material.ambient)
		+ (light.ambient * material.ambient)).xyz;
		
	vec3 diffuse =
		light.diffuse.xyz * material.diffuse.xyz
		* max(dot(N,L), 0.0);
		
	vec3 specular =
		pow(max(dot(R,V), 0.0f), material.shininess)
		* material.specular.xyz * light.specular.xyz;

	// send the color output to the fragment shader
	varyingColor = vec4((ambient + diffuse + specular), 1.0);
	
	// send the position to the fragment shader, as before
	gl_Position = proj_matrix * mv_matrix * vec4(vertPos,1.0);
	
	return 0;
}

这里我故意在main中加了“return 0;” 语句
在这里插入图片描述
使用命令:glslangValidator vertSehader.vert
在这里插入图片描述

参考

小皓总是不务正业

### 回答1: glslangvalidator是一个用于验证、编译和分析GLSL(OpenGL着色器语言)代码的工具GLSL是一种用于编写图形渲染管线的着色器语言,它在OpenGL和Vulkan等图形API中广泛使用。 glslangvalidator通过将GLSL代码转化为可执行的可编译着色器对象,帮助开发人员进行代码的静态检查和优化。它的主要用途是在编写图形着色器检查语法错误、类型错误和语义错误,以确保代码的正确性。 glslangvalidator有助于开发人员进行着色器调试和性能优化。它可以生成底层硬件支持的最佳着色器代码,并提供了对着色器的性能分析报告。开发人员可以通过查看这些报告来了解着色器代码在不同硬件上的性能表现,从而优化代码以提高渲染性能。 此外,glslangvalidator还提供了命令行工具和编程接口,以便于集成到开发工作流程中。开发人员可以使用命令行工具GLSL代码进行验证和编译,也可以使用编程接口将glslangvalidator集成到自己的工具或应用程序中。 总之,glslangvalidator是一个功能强大的工具,用于验证、编译和分析GLSL代码,帮助开发人员创建高效、可靠的图形着色器。它在图形渲染领域的应用广泛,对于优化图形渲染性能和调试着色器代码非常有帮助。 ### 回答2: glslangvalidator是一个用于验证和编译GLSL(OpenGL着色语言)代码的工具GLSL是一种在图形渲染中使用的着色语言,它用于在显卡上执行计算和图形处理。 glslangvalidator是Khronos Group开发的一个开源项目,它为OpenGL和Vulkan提供了一个通用的着色器验证器。它能够检查GLSL代码是否符合语法规范,并对代码进行静态分析来检测错误和警告。这有助于开发人员在运行时之前发现和解决潜在的问题,从而提高代码的质量和性能。 使用glslangvalidator可以通过命令行界面进行操作。开发人员可以将GLSL代码文件作为输入参数传递给工具,然后它会对代码进行处理并返回验证结果。如果代码存在错误或警告,glslangvalidator将会提供相应的错误消息和建议来帮助开发人员进行调试和修复。 glslangvalidator支持GLSL的各个版本,并根据不同的OpenGL和Vulkan规范对代码进行验证。它还提供了许多选项来进行自定义和优化,使开发人员能够调整验证工具的行为以适应自己的需求。 总结来说,glslangvalidator是一款强大的工具,它可以帮助开发人员验证和编译GLSL代码,提高代码的质量和性能,并提供错误和警告消息来帮助开发人员进行调试和修复。它对于图形渲染和计算的开发非常有用。 ### 回答3: glslangvalidator是一个开源的GLSL(OpenGL的着色器编程语言)验证器,它是用C++编写的,并且由Khronos Group维护。GLSL是用于编写着色器程序的语言,这些程序可用于OpenGL的图形渲染管线中。 glslangvalidator的主要功能是验证GLSL着色器语法和语义,并输出错误信息。它能够检查着色器程序中的错误和警告,例如未声明的变量、语法错误、类型不匹配等。它还可以解析和分析着色器程序的结构,确保其语义正确。 通过glslangvalidator,开发人员可以在编写GLSL着色器之前快速发现并纠正潜在的问题。它可以大大地提高着色器开发的效率和准确性。在编译过程中,glslangvalidator还可以为开发人员提供详细的错误信息,以帮助他们理解和解决问题。 除了验证功能外,glslangvalidator还提供了其他一些功能。例如,它可以将GLSL编译成SPIR-V(一种通用的着色器中间语言),这在Vulkan(一种跨平台图形API)中非常有用。它还可以将SPIR-V反汇编成可阅读的形式,方便开发人员进行调试和分析。 总之,glslangvalidator是一种强大的工具,用于验证、编译和分析GLSL着色器程序。它对于OpenGL和Vulkan图形渲染开发非常有价值,并且提供了丰富的功能和错误报告,以帮助开发人员更轻松地创建高质量的着色器程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值