|

楼主 |
发表于 2009-5-20 12:25:00
|
显示全部楼层
Re:实际开发时,是使用ID3DXEffect还是直接管理顶点/像素着色
void HGE_Impl::_render_batch(bool bEndScene)
{
if(VertArray)
{
pVB->Unlock();
if(nPrim)
{
switch(CurPrimType)
{
case HGEPRIM_QUADS:
pD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, nPrim<<2, 0, nPrim<<1);
break;
case HGEPRIM_TRIPLES:
pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, nPrim);
break;
case HGEPRIM_LINES:
pD3DDevice->DrawPrimitive(D3DPT_LINELIST, 0, nPrim);
break;
}
nPrim=0;
}
if(bEndScene) VertArray = 0;
else pVB->Lock( 0, 0, (BYTE**)&VertArray, 0 );
}
}
void CALL HGE_Impl::Gfx_RenderQuad(const hgeQuad *quad)
{
if(VertArray)
{
if(CurPrimType!=HGEPRIM_QUADS || nPrim>=VERTEX_BUFFER_SIZE/HGEPRIM_QUADS || CurTexture!=quad->tex || CurBlendMode!=quad->blend)
{
_render_batch();
CurPrimType=HGEPRIM_QUADS;
if(CurBlendMode != quad->blend) _SetBlendMode(quad->blend);
if(quad->tex != CurTexture)
{
pD3DDevice->SetTexture( 0, (LPDIRECT3DTEXTURE8)quad->tex );
CurTexture = quad->tex;
}
}
memcpy(&VertArray[nPrim*HGEPRIM_QUADS], quad->v, sizeof(hgeVertex)*HGEPRIM_QUADS);
nPrim++;
}
}
纹理不同, 改变渲染模式, 改变渲染的图元形状, 以及超出VB内存 都会导致 _render_batch 的调用.
而_render_batch 是会 解锁/绘制/锁定 的. |
|