游戏开发论坛

 找回密码
 立即注册
搜索
查看: 3122|回复: 6

请教关于HLSL static 的问题

[复制链接]

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
发表于 2008-4-27 17:50:00 | 显示全部楼层 |阅读模式
这个static是否与C++相同啊?在C++中,如果STATIC声明的变量在函数外被赋初值后,假如A函数改变它的话,B函数调用它的值是被A所改变的值,而着色器中怎么不行啊?是不是用static声明的变量值不能被改变啊?还是什么别的问题?? [em24]

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2008-4-28 14:07:00 | 显示全部楼层

Re:请教关于HLSL static 的问题

static用于全局变量,表示值为一个内部变量,仅能被当前shader中的代码访问。
用于局部变量则表示这个值将在多次调用间驻留。静态变量只能进行一次初始化操作,如果没有使用特定值进行初始化,则默认为0。

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
 楼主| 发表于 2008-4-28 19:47:00 | 显示全部楼层

Re:请教关于HLSL static 的问题

ls谢谢你的答复,可是我那A和B函数是在shader里的啊,static声明的变量在调用A和B之前被初始化,在A函数中改变了这个值,然后在调用B函数时,使用这个值,但是值还是一开始的赋初值,并不是调用A函数改变后的值,这个真奇怪啊?

59

主题

984

帖子

1200

积分

金牌会员

Rank: 6Rank: 6

积分
1200
发表于 2008-4-29 09:44:00 | 显示全部楼层

Re:请教关于HLSL static 的问题

静态变量只能在第一次初始化的时候赋值

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
 楼主| 发表于 2008-4-29 15:46:00 | 显示全部楼层

Re:请教关于HLSL static 的问题

c++中,静态变量被赋初值后,它的值是可以被改变的啊,只不过它的值总是最后一次被赋值的那个值,难道着色器里不是这个套路??

5

主题

686

帖子

697

积分

高级会员

Rank: 4

积分
697
QQ
发表于 2008-4-29 19:56:00 | 显示全部楼层

Re:请教关于HLSL static 的问题

着色器是运行在GPU上的,跟CPU又没关系,LZ怎么可以这样比呢。。事实上static变量在编译时是放到常量寄存器中的,因此可以在多个shader函数及多次调用shader之间共享,但常量寄存器必须是在渲染前被设置,因此在程序中根本无法改变它的值,LZ可以用fxc把编译后的ASM代码输出看看就晓得了
CPU里面又没有常量寄存器,当然不一样了

35

主题

1735

帖子

1739

积分

金牌会员

Rank: 6Rank: 6

积分
1739
QQ
 楼主| 发表于 2008-4-29 21:27:00 | 显示全部楼层

Re:请教关于HLSL static 的问题

啊呀,多谢LS分析的如此透彻,看来我还是缺乏学习啊,谢谢jk20012001啦,也谢谢clayman啦。还是好人多啊,哈哈。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

作品发布|文章投稿|广告合作|关于本站|游戏开发论坛 ( 闽ICP备17032699号-3 )

GMT+8, 2026-1-22 16:18

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表