HGE 一些图元渲染注释

HGE 一些图元渲染注释
下面是画线图元注释
 1  // 渲染指定颜色的线
 2  void  CALL HGE_Impl::Gfx_RenderLine( float  x1,  float  y1,  float  x2,  float  y2, DWORD color,  float  z)
 3  {
 4       if (VertArray)  // 如果顶点数组不为空
 5      {
 6           if (CurPrimType != HGEPRIM_LINES     // 如果最近一次不是画线操作
 7               ||  nPrim >= VERTEX_BUFFER_SIZE / HGEPRIM_LINES  // 如果画线操作缓存已经超过了最大数
 8               ||  CurTexture  ||     // 如果当前存在纹理
 9              CurBlendMode != BLEND_DEFAULT  // 如果混合不是缺省模式
10              )
11          {
12              _render_batch();   // 批量渲染
13 
14              CurPrimType = HGEPRIM_LINES;   // 当操作
15               if (CurBlendMode  !=  BLEND_DEFAULT) _SetBlendMode(BLEND_DEFAULT);  // 设置混合模式
16               if (CurTexture) { pD3DDevice -> SetTexture( 0 0 ); CurTexture = 0 ; }   // 清空纹理
17          }
18           // 将顶点加到缓存中
19           int  i = nPrim * HGEPRIM_LINES;
20          VertArray[i].x  =  x1; VertArray[i + 1 ].x  =  x2;
21          VertArray[i].y  =  y1; VertArray[i + 1 ].y  =  y2;
22          VertArray[i].z      =  VertArray[i + 1 ].z  =  z;
23          VertArray[i].col    =  VertArray[i + 1 ].col  =  color;
24          VertArray[i].tx     =  VertArray[i + 1 ].tx  =
25          VertArray[i].ty     =  VertArray[i + 1 ].ty  =   0.0f ;
26          nPrim ++ ;
27      }
28  }
29 
其它的Gfx_RenderTriple、Gfx_RenderQuad分别是三角与方型图元方法,与画线方法类似。
下面是批量画图元方法注释
 1  void  HGE_Impl::_render_batch( bool  bEndScene)
 2  {
 3       if (VertArray)
 4      {
 5          pVB -> Unlock();  // 锁定VertexBuffer 顶点缓存
 6          
 7           if (nPrim)   // 如果存在要画的图元
 8          {
 9               switch (CurPrimType)  
10              {
11                   case  HGEPRIM_QUADS:   // 方形图元,这里使用的是顶点索引的方式
12                      pD3DDevice -> DrawIndexedPrimitive(D3DPT_TRIANGLELIST,  0 , nPrim << 2 0 , nPrim << 1 );
13                       break ;
14 
15                   case  HGEPRIM_TRIPLES:  // 三角图元
16                      pD3DDevice -> DrawPrimitive(D3DPT_TRIANGLELIST,  0 , nPrim);
17                       break ;
18 
19                   case  HGEPRIM_LINES:   // 线性图元
20                      pD3DDevice -> DrawPrimitive(D3DPT_LINELIST,  0 , nPrim);
21                       break ;
22              }
23 
24              nPrim = 0 ;
25          }
26 
27           if (bEndScene) VertArray  =   0 ;
28           else  pVB -> Lock(  0 0 , (BYTE ** ) & VertArray,  0  );  // 解除锁定
29      }
30  }
在这里可以看出,HGE共有三种图元。对于连续画的相同图元,会先放到缓存中,当新图元类型发生变化或缓存满了,将会缓存画出来。
Gfx_StartBatch则是强制将缓存的图元画出来。

你可能感兴趣的:(HGE 一些图元渲染注释)