游戏开发论坛

 找回密码
 立即注册
搜索
查看: 1976|回复: 3

HLSL菜鸟问题

[复制链接]

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
发表于 2010-9-29 23:49:00 | 显示全部楼层 |阅读模式
才开始学HLSL~

我在RenderMonkey里建立个默认的Dx9Effect(Default_DirectX_Effect)。
将PS做了如下改动:
  1. // 修改前:
  2. float4 ps_main() : COLOR0 {
  3.     return float4(1.0f, 0.0f, 0.0f, 1.0f);
  4. }

  5. // 修改后:
  6. float4 ps_main() : COLOR0 {
  7.     static bool b = true;
  8.     float4 color;
  9.     if(b)
  10.         color = float4(1.0f, 0.0f, 0.0f, 1.0f);
  11.     else
  12.         color = float4(0.0f, 1.0f, 0.0f, 1.0f);
  13.     b = !b;
  14.     return color;
  15. }
复制代码

想看看效果,结果和没改之前一样。

我一定是什么东西没理解,各位大哥大姐给我解释解释。 :)

45

主题

1163

帖子

1165

积分

金牌会员

Rank: 6Rank: 6

积分
1165
发表于 2010-9-30 09:46:00 | 显示全部楼层

Re:HLSL菜鸟问题

static bool b = true;
GPU程序与CPU程序是不一样的,GPU处理像素是并行执行的.看看SDK中关于static的解释:

Mark a local variable so that it is initialized one time and persists between function calls. If the declaration does not include an initializer, the value is set to zero. A global variable marked static is not visible to an application.

1

主题

24

帖子

31

积分

注册会员

Rank: 2

积分
31
发表于 2010-9-30 09:58:00 | 显示全部楼层

Re:HLSL菜鸟问题

静态变量存储在常量寄存器中,而常量寄存器是只读的,因此对于该变量的改变只是使用临时变量模拟,在shader执行完后就不存在了,因此每次执行shader使用的都是初始值.

86

主题

2251

帖子

2386

积分

金牌会员

Rank: 6Rank: 6

积分
2386
QQ
 楼主| 发表于 2010-10-9 08:06:00 | 显示全部楼层

Re:HLSL菜鸟问题

:)
谢谢解答!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-8-18 16:02

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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