轻量级前端框架助力开发者提升项目效率与性能
1426
2022-11-20
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~