title: shader语义绑定问题
date: 2019-06-24 22:50:47
tags:
一个关于shader语义绑定的问题
学习shader语言的时候根据教程编辑了如下代码:
Shader "Custom/NewSurfaceShader"
{
SubShader
{
pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
void vert(in float2 objPos:POSITION ,out float4 pos:POSITION,out float4 col:COLOR)
{
pos = float4 (objPos,0,1);
col = pos;
}
void frag(inout float4 col:COLOR)
{
}
ENDCG
}
}
}
按道理代表像素位置的pos
属性和代表颜色的col
属性是同一种基本类型,可以运算后会使图像四个顶点分别是不同的颜色,但是最后出来这个图像:
图像全部是黑色,pos
数据没有成功传入col
。上网查询最终找到问题。链接地址
cg中代码col=pos
并不像java那样直接指向方法区中的数字。而是指向熟悉pos
。在进入片段着色处理后只传入col
而指向的pos
没有传入,因此得不到数据。因此将pos
想方设法传入片段着色器即可解决。
这里定义了一个结构体传入frag
。
最终修改后的代码:
Shader "Custom/NewSurfaceShader"
{
SubShader
{
pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
struct out_data
{
float4 pos:POSITION;
float4 col:COLOR;
};
out_data vert(float2 objPos:POSITION)
{
out_data data;
data.pos = float4 (objPos,0,1);
data.col = data.pos;
return data;
}
float4 frag(out_data data):COLOR
{
return data.col;
}
ENDCG
}
}
}
修改后的图像