如何调试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 uniformattribute
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的主要内容,如果未能解决你的问题,请参考以下文章