ID3DXEffect接口的几种使用方法……

1.semantics

比如在effect里这么写:

1 float4x4 matWorldViewProj : WORLDVIEWPROJ;

然后程序里可以这么获得这个变量的handle

1 D3DHANDLE handle = 
2     m_pEffect->GetParameterBySemantic(NULL, "WORLDVIEWPROJ");

看来我之前把一些常用变量的定义写到define.fx里去然后#include"define.fx"来统一不同shader里相同用途的变量的方式或许该改改了呢。

2.annotations

1 texture Tex0 < string name = "tiger.bmp"; >;

 就是括在尖括号里的“初始化语句”而已。必须以分号结尾,只能与Technique、Pass或者最顶层的变量相关联。只能是字符串或者数值类型。在程序里用GetAnnotation或者GetAnnotationByName访问。

3. parameter blocks

1     m_pEffect->SetTechnique( "RenderScene" );
2 
3     m_pEffect->BeginParameterBlock();
4     D3DXVECTOR4 v4( Diffuse.r, Diffuse.g, Diffuse.b, Diffuse.a );
5     m_pEffect->SetVector( "g_vDiffuse", &v4 );
6     m_pEffect->SetFloat( "g_fReflectivity", fReflectivity );
7     m_pEffect->SetFloat( "g_fAnimSpeed", fAnimSpeed );
8     m_pEffect->SetFloat( "g_fSizeMul", fSize );
9     m_hParameters = m_pEffect->EndParameterBlock();

设置effect的变量的方法。但是这种方法只能在ID3dXEffect::Begin()和ID3DXEffect()之外使用。

4.文档中关于Handles的介绍中有说:

Performance tip At the start of your application, perform an initialization pass to generate handles from the strings. From that point on, use only handles. Passing in strings instead of generated handles is slower.

也就是说,我之前那种把GetParameterByName和SetParameterXXX封装在一个函数里的方式会影响一定的效率……

 

 

 

转载于:https://www.cnblogs.com/snafloda/archive/2013/01/21/2869135.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值