我正在尝试使用 cg (用于 ogre3d)编写着色器。我似乎无法解析我想用作自己代码起点的工作着色器。
这是着色器的声明:
void main
(
float2 iTexCoord0 : TEXCOORD0,
out float4 oColor : COLOR,
uniform sampler2D covMap1,
uniform sampler2D covMap2,
uniform sampler2D splat1,
uniform sampler2D splat2,
uniform sampler2D splat3,
uniform sampler2D splat4,
uniform sampler2D splat5,
uniform sampler2D splat6,
uniform float splatScaleX,
uniform float splatScaleZ
)
{...}
我的问题:
iTexCoord0 显然是一个输入参数。为什么不宣布统一?
(oColor 显然是一个输出参数。毫无疑问)
covMap1 - splat6 是纹理。这些参数或其他东西是否加载到显卡内存中(如全局变量)?着色器程序的食人魔定义没有将它们列为参数。
splatScaleX 和 splatScaleZ 也是参数吗?着色器程序的食人魔定义也没有将这些作为参数列出。
从外部程序发送值时,声明的顺序有什么意义吗?
我想传入一个浮点数组(高度图)。我认为那将是
uniform float splatScaleZ,
uniform float heightmap[1024]
)
{...}
如果我不传递其中一个参数,着色器将不会被执行(并且我的对象将不可见,因为它没有纹理)?
有没有更好的方法来调试这些,而不是仅仅点击/错过和猜测?