游戏开发论坛

 找回密码
 立即注册
搜索
查看: 2544|回复: 2

[请教][D3D]HLSL中如何在cpp中给uniform变量赋值?

[复制链接]

4

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
发表于 2011-10-17 18:08:00 | 显示全部楼层 |阅读模式
例如这样一段shader脚本:
PS_OUTPUT RenderScenePS( VS_OUTPUT In,
                         uniform bool bTexture )
{
    PS_OUTPUT Output;

    // Lookup mesh texture and modulate it with diffuse
    if( bTexture )
        Output.RGBColor = tex2D(MeshTextureSampler, In.TextureUV) * In.Diffuse;
    else
        Output.RGBColor = In.Diffuse;

    return Output;
}

请问如何在cpp中给 bTexture 赋值?

0

主题

27

帖子

69

积分

注册会员

Rank: 2

积分
69
发表于 2011-10-18 17:19:00 | 显示全部楼层

Re:[请教][D3D]HLSL中如何在cpp中给uniform变量赋值?

有两种方式可以实现你的这个程序:
1,声明两个technique(或一个Technique里面的2个pass),在technique里面固化bTexture的值,然后在应用程序中根据情况调用不同的Technique或pass。
pass1
{
    VertexShader = vs();
    PixelShader = ps(true);
}
pass2
{
    VertexShader = vs();
    PixelShader = ps(false);
}
2,声明一个全局变量"g_bTexture",在使用Shader进行渲染之前,设置这个g_bTexture的值为你想要的。声明如下:
bool g_bTexture;
technique t
{
pass
{
    VertexShader = vs();
    PixelShader = ps(g_bTexture);
}
}

4

主题

14

帖子

14

积分

新手上路

Rank: 1

积分
14
 楼主| 发表于 2011-10-18 18:49:00 | 显示全部楼层

Re:[请教][D3D]HLSL中如何在cpp中给uniform变量赋值?

谢谢Luna~~我现在想到的方法也是用全局变量来实现我的需求。。。但是看到cg有类似的做法(直接在cpp中设置uniform参数的值),所以想问问是不是hlsl也有类似的用法?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-6-8 23:04

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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