D3D10 的状态对象

这两天一直在思考 Shader Tree ,树中每个 Node 是 Shader State,问题是 Shader State 的粒度应该是怎样的?是针对每个 render state call 都对应一个 Node 吗?这样树的深度太大,在遍历和修改时效率会很差,所以开始考虑将 Shader state 分组,例如将设置 texture sampler 的分为一组,将 blend 的分为一组,将 alpha 操作的分为一组。今天在翻 D3D10 的文档时偶尔看到了 State Object,仔细看了一下说明,这正是我要解决的粒度问题。原来 D3D10 已经将这些 render state 分组,每一个分组对应一些操作,比如 Input Layout Object 就是将所有的关于绘制所需的顶点数据设置分为一组,这里使用一个描述结构来完成顶点结构的定义,跟 OGRE 的顶点语义结构定义类似,不过是由 D3D Runtime 来完成。这样 render state 的粒度就大了,配置和设置就很方便,将 state-setting 管线化,这样就使硬件缓存称为可能,从而达到最小的渲染状态改变。总体感觉,DX10 比以前版本更像一个图形引擎,比如这个 State Object,看来 D3D 已经将触角深入到了应用层次,也许以后的引擎构建会更加简单。对于我的引擎来说,可以参考 D3D10 的一些概念,融入到引擎中,针对不同的渲染器来实现。头痛,D3D10 已经包含了引擎的一部分概念了…..
Advertisements
此条目发表在DreamEngine 3D 图形引擎开发分类目录。将固定链接加入收藏夹。

发表评论

Fill in your details below or click an icon to log in:

WordPress.com 徽标

You are commenting using your WordPress.com account. Log Out /  更改 )

Google+ photo

You are commenting using your Google+ account. Log Out /  更改 )

Twitter picture

You are commenting using your Twitter account. Log Out /  更改 )

Facebook photo

You are commenting using your Facebook account. Log Out /  更改 )

Connecting to %s