如何调试GLSL Fragment shader

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何调试GLSL Fragment shader相关的知识,希望对你有一定的参考价值。

参考技术A fragment 是 附着在activity上的,不存在单独跳转关系,直接用切换,LS方法已提供或者2个fragment对应2个不同activity(估计不是你的初衷)。 参考技术B 在onAttach(Activity activity)不拿到了activity了么,在你要跳转的地方跳就是了

GLSL中几个修饰符的简单讲解

参考技术A uniform
attribute
varying

Uniform 外部application传递给vertex/fragment shader变量修饰。
A。他是通过 glUniform**()
B. 在Uniform、vertex, fragment shader程序内部,Uniform和contst类型,不能被shader修改

注意
1.被uniform修饰的变量,只能被shader使用,不能写入
2.如果uniform在vertex/fragment 两者的声明方式一样,则他们可以被vertex/fragment共享。理解为:

uniform float a; 在顶点着色器和片源着色器写的一模一样

使用场景:
1.变换矩阵、材质、光照、颜色等

使用:

uniform:修饰符 mat4:类型 viewProjMatrix:变量名
uniform mat4 viewProjMatrix; // 投影与视图模型矩阵
uniform mat4 viewMatrix; // 模型视图矩阵
uniform mat4 lightPosition; // 光源位置

1.attribute变量,只能在vertex Shader中使用。(不能在片源着色器中使用和声明)
2.在application中glBindAttribLocation()函数,来绑定每个变量的位置,
然后再使用glVertexAttribPointer()为变量赋值,
可以使用glGetAttribLocation来获取变量

使用场景:
1.顶点坐标、法线、纹理坐标、顶点颜色等等

使用:
attribute vec4 a_position;

gl_position = a_position * viewProjMatrix;

varying:是vertex与fragment shader之间做数据传递使用。如果需要做传递,则必须保证vertex shader与 fragment shader中两者的声明
必须保持一直(修饰符,类型,变量名)否则,不可以实现数据传递。

使用场景:
1.纹理坐标、顶点颜色等等

以上是关于如何调试GLSL Fragment shader的主要内容,如果未能解决你的问题,请参考以下文章

如何向GLSL中传入多个纹理

我的 GLSL 着色器程序链接正常,但是当我尝试使用它时出错——我该如何调试它?

将 ARB 程序集翻译成 GLSL?

在 webgl 中调试 GLSL 代码

有啥方法可以调试 GLSL 着色器?

光线行进时的 GLSL 伪影