GPU编程入门(8) GPU ASM 顶点渲染初步

ZDNet软件频道时间2008-07-03作者:gamedevers |
本文关键词:ASM 顶点渲染 GPU

这次我们结合directx的例子程序 EffectParam来解释一下参数块和共享参数的概念,例子位于:directx安装目录SamplesC++Direct3DEffectParam ,这两个东西一起说,自然是他们之间有关系的,一般一起用的。。。下面开始.

首先是共享参数,效果的参数就是效果里头申明的所有非静态的变量,包括全局变量和注释,如果在申明的时候技术上“shared”关键字

shared float4x4 g_mWorld;                     // World view matrix
shared float4x4 g_mView; // World * View * Projection matrix
shared float4x4 g_mProj; // World * View * Projection matrix

shared float4 g_vLight 
= float4( 0.0f0.0f-10.0f1.0f );  // Light position in view space
shared float4 g_vLightColor = float4( 1.0f1.0f1.0f1.0f );
texture  g_txScene;
float4   Diffuse;

在创建effect时传入LPD3DEFFECTPOOL参数,就可以在不同效果间共享参数。创建效果池代码如下

ID3DXEffectPool * g_pEffectPool=NULL;    //共享池
D3DXCreateEffectPool( & g_pEffectPool);

对于一个在多个effect中共享的参数,他们必须是相同的名字,类型和语义

由于贡献参数的effect必须使用同一个设备(device),所以那些依赖于渲染设备的参数是不能共享的,比如说texture,当含有共享参数的effect背释放时,共享参数从共享池中释放。既然是共享参数,那么当在某个地方改变参数值的时候,所有使用该参数的effect中的参数值都改变,这个太明显了吧。。。。

例子程序中共享的参数就是上面那些。。。。

然后是参数块(parameter blocks),它是一组effect状态改变块,一个参数块可以记录状态的改变,从而可以在后面通过调用某个函数设置这些状态,创建参数块的代码:

m_pEffect->BeginParameterBlock();         //开始设置参数块
.........//使用相应函数设置参数,比如m_pEffect->SetVector(xxxx);什么的
m_pEffect->EndParameterBlock();          //j结束参数块的设置

一般在结束参数块设置的时候会返回一个句柄,这个句柄(假设是m_hParam,上面的代码里头忘记了,哈哈。。)在调用参数块的时候使用,具体就是

m_pEffect->ApplyParameterBlock( pMat->m_hParam )    //其中,pMat是材质对象

调用了这个之后,效果就把参数块中的所有参数作为一个整天一起操作了,就好像一次是使用了多个API函数设置参数的效果一样。实例EffectParam为一个标准的Direct3D材质属性设置了一个包含环境光,漫反射,镜面放射,自发光和镜面反射强度的参数块,具体代码。。。还是贴出来吧。。。叮咚,不知道怎么了,代码块不见了,那就不贴了,自己找去,就算是我督促大家去看例子吧。

您看到此篇文章时的感受是:
支持
愤怒
无聊
暴汗
养眼
炒作
不解
标题党
搞笑
ASM的相关文章
    顶点渲染的相关文章
    用户评论
    用户名
    评论内容
    发表时间
    - 发表评论 -
    匿名
    注册用户

    百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
    中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
    京公网安备:1101082134