TinyRenderEngine------RenderSystem

RenderSystem负责场景的绘制。 TinyRenderEngine目前实现了基于D3D10的绘制系统。 绘制系统其实就是一个状态机。 我们先设置好图形管线上的状态,包括rasterizer stateblend statedepthstencil state等, 然后往图形管线上发送绘制任务。有新的绘制任务时,可能需要重新设置管线上某些state的值。 整个绘制系统的工作流程就是: set state -> draw -> set state -> draw -> ...  TinyRenderEngine中, 用一个绘制上下文类(RenderContext)来定义图形管线的状态。 所有的绘制任务都按RenderContext来分组绘制,拥有相同RenderContext的绘制任务属于同一个组并会一起绘制,这样可以尽可能的减少state重新设置的次数。这样的每一个组是一个RenderTask 下面详细介绍RenderContextRenderTask里有什么东西:

RenderContext: RenderContext里主要有以下一些成员

       1)  优先级:定义了绘制任务的优先级,绘制任务按优先级高低来进行绘制,以保证图像的正确

     2)  RenderTarget(s):用来存放绘制图象的缓存,就像绘画中的画布一样。 RenderTarget可以是一个窗口(RenderWindow), 也可以是一

         张Texture 如果是窗口,那么我们绘制的东西通常会在屏幕显示出来,如果是texture 那么绘制的东西作为一个texture(可以在后面

         的绘制中应用) 我们可以在一次绘制(draw call)中同时绘制到多个RenderTarget

     3)  RasterizerState: Rasterize stage 的状态,包括FillModeCullMode. 它是对ID3D10RasterizerState的抽象.

       4)  BlendState:位于OM stage 包括blend相关的state,以及write mask等。 它是对ID3D10BlendState的抽象

     5)  DepthStencilState:位于OM stage 包括depth teststencil test 等。 它是对ID3D10DepthStencilState的抽象

     6)  EffectEffect 是对D3D10ID3D10Effect的抽象,他从一个.fx 创建出来,包括ShaderTechniquePass 等,它还可以包括

            statetexture sampler以及一些其他的参数。 通常通过Effect(编辑.fx)来实现各种视觉效果

     7) Texture/Sampler: 目前还没加入Texture支持。 Texture在真实感绘制中是不可或缺的。很多逼真的效果都是通过texture mapping

        实现的

     8)  其他:比如Viewport

RenerTask每个RenderTask是在某个RenderContext下的一组绘制任务的列表。 这里的绘制任务是最小的绘制单位(RenderOperation),可以和SubMesh对应起来。RenderTask包含了以下东西:

     1)   RenderContext 引用:指定了在什么RenderContext下绘制

     2)  RenderList: 绘制任务列表,每个绘制任务是RenderOperation,它包含了VertexDataIndexData(如果用到index buffer)和用到的材

        质等

 

一个简单的render cycle大概是这样的:

 

RenderSystem 提供的接口:

1) 创建RenderTarget (RenderWindow/RenderTexture)

2)  创建 render state(RasterizerState/BlendState/DepthStencilState)

3)  创建 Effect

4)  创建 RenderContext

5)  绘制

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值