关于Shader代码全局变量赋值的疑问。

weilai1990 2011-04-30 01:43:34


// 部分代码省略。

vector g_LightDirection;

VS_OUTPUT Main( VS_INPUT input )
{
VS_OUTPUT output = (VS_OUTPUT)0;
// 每次在shader中对全局变量赋值的时候就会报错。难道说全局变量不可以在shader代码中赋值?
g_LightDirection.w = 0.0f;
g_LightDirection = mul( g_LightDirection, g_ViewMatrix );
input.normal.w = 0.0f;
input.normal = mul( input.normal, g_ViewMatrix );

return output;
}

谢谢!
...全文
1182 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
张赐 2011-05-05
  • 打赏
  • 举报
回复
要使用全局变量必须用const来修饰

或者使用uniform,但是uniform修饰的变量不能赋初值,只能从shader外部传入
zxy1492 2011-05-05
  • 打赏
  • 举报
回复
glsl中把全局变量叫做uniform :
n.

1. 制服, 校服

adj.

1. 全都相同的, 一律的, 清一色的, 一致的, 统一的
jerris 2011-05-04
  • 打赏
  • 举报
回复
全局变量不能赋值,原因是,显卡的架构和CPU的不同,显卡的各个渲染管道在运算时是并行的,如果在PS或者VS中有对全局变量赋值的代码,就会出现抢占和临界点问题,一般现在的显卡都有过百的渲染通道,如果可以赋值根本是做不到的,所以显卡中的寄存器在运算时只能读不能写。而CPU每个运算核心都有自己的寄存器。
星羽 2011-05-01
  • 打赏
  • 举报
回复
const Mark a variable that cannot be changed by a shader, therefore, it must be initialized in the variable declaration. Global variables are considered const by default (suppress this behavior by supplying the /Gec flag to the compiler).
IONPhantom 2011-04-30
  • 打赏
  • 举报
回复
全局变量是创建在 Constant Buffer 中的, Constnat Buffer 在 Shader 中是只读的,不能写入
Sou2012 2011-04-30
  • 打赏
  • 举报
回复
全局变量不能赋值。 没有必要在SHADER里改变全局变量, 可以在程序里改变。
gamemagic 2011-04-30
  • 打赏
  • 举报
回复
全局变量都是const的,当然不能赋值

GPU内部是并行计算结构(类似多线程),改变全局的参数将非常危险,并且是没有意义的。

8,305

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧