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

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
在这里插入图片描述

参考

小皓总是不务正业

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值