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

网友投稿 1297 2022-11-20

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

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

openGL系列文章目录

文章目录

​​openGL系列文章目录​​​​前言​​​​一、glslang​​

​​1.glslang-​​​​2.使用git编译glslang​​

​​编译glslang​​

​​步骤1​​​​步骤2​​

​​glslang测试​​​​参考​​

前言

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

并且生成 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;}

参考

​​小皓总是不务正业​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:openGL实现阴影映射(Shadow Mapping)
下一篇:JPA中JpaRepository接口的使用方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~