diff --git a/panda/src/dxgsg7/dxGraphicsStateGuardian7.cxx b/panda/src/dxgsg7/dxGraphicsStateGuardian7.cxx index f027ec2615..5b4e84c18f 100644 --- a/panda/src/dxgsg7/dxGraphicsStateGuardian7.cxx +++ b/panda/src/dxgsg7/dxGraphicsStateGuardian7.cxx @@ -456,7 +456,6 @@ dx_init( void) { #ifdef COUNT_DRAWPRIMS global_pD3DDevice = pDevice; #endif - _pCurrentGeomContext = NULL; _bDrawPrimDoSetupVertexBuffer = false; _last_testcooplevel_result = S_OK; @@ -1031,17 +1030,6 @@ typedef enum { FlatVerts,IndexedVerts,MixedFmtVerts } GeomVertFormat; -#define COPYVERTDATA_2_VERTEXBUFFER(PrimType,NumVertices) { \ - DWORD numVertBytes=_pCurFvfBufPtr-_pFvfBufBasePtr; \ - memcpy(_pCurrentGeomContext->_pEndofVertData,_pFvfBufBasePtr,numVertBytes); \ - DPInfo dpInfo; \ - dpInfo.nVerts=NumVertices; \ - dpInfo.primtype=PrimType; \ - _pCurrentGeomContext->_PrimInfo.push_back(dpInfo); \ - _pCurrentGeomContext->_num_verts+=dpInfo.nVerts; \ - _pCurrentGeomContext->_pEndofVertData+=numVertBytes; } - - INLINE void DXGraphicsStateGuardian7:: transform_color(Colorf &InColor,D3DCOLOR &OutRGBAColor) { Colorf transformed @@ -1380,12 +1368,8 @@ draw_point(GeomPoint *geom, GeomContext *gc) { nassertv((nPrims*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); - if(!_bDrawPrimDoSetupVertexBuffer) { - HRESULT hr = _pScrn->pD3DDevice->DrawPrimitive(D3DPT_POINTLIST, _curFVFflags, _pFvfBufBasePtr, nPrims, NULL); - TestDrawPrimFailure(DrawPrim,hr,_pScrn->pDD,nPrims,0); - } else { - COPYVERTDATA_2_VERTEXBUFFER(D3DPT_POINTLIST,nPrims); - } + HRESULT hr = _pScrn->pD3DDevice->DrawPrimitive(D3DPT_POINTLIST, _curFVFflags, _pFvfBufBasePtr, nPrims, NULL); + TestDrawPrimFailure(DrawPrim,hr,_pScrn->pDD,nPrims,0); } else { // setup for strided size_t vertex_size = draw_prim_setup(geom); @@ -1524,19 +1508,15 @@ draw_line(GeomLine* geom, GeomContext *gc) { DWORD nVerts = nPrims<<1; - if(!_bDrawPrimDoSetupVertexBuffer) { - if (_tmp_fvfOverrunBuf == NULL) { - nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); - hr = _pScrn->pD3DDevice->DrawPrimitive(D3DPT_LINELIST, _curFVFflags, _pFvfBufBasePtr, nVerts, NULL); - } else { - nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_tmp_fvfOverrunBuf)); - hr = _pScrn->pD3DDevice->DrawPrimitive(D3DPT_LINELIST, _curFVFflags, _tmp_fvfOverrunBuf, nVerts, NULL); - delete [] _tmp_fvfOverrunBuf; - } - TestDrawPrimFailure(DrawPrim,hr,_pScrn->pDD,nVerts,0); + if (_tmp_fvfOverrunBuf == NULL) { + nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); + hr = _pScrn->pD3DDevice->DrawPrimitive(D3DPT_LINELIST, _curFVFflags, _pFvfBufBasePtr, nVerts, NULL); } else { - COPYVERTDATA_2_VERTEXBUFFER(D3DPT_LINELIST,nVerts); + nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_tmp_fvfOverrunBuf)); + hr = _pScrn->pD3DDevice->DrawPrimitive(D3DPT_LINELIST, _curFVFflags, _tmp_fvfOverrunBuf, nVerts, NULL); + delete [] _tmp_fvfOverrunBuf; } + TestDrawPrimFailure(DrawPrim,hr,_pScrn->pDD,nVerts,0); _pCurFvfBufPtr = NULL; } @@ -1648,12 +1628,8 @@ draw_linestrip_base(Geom* geom, GeomContext *gc, bool bConnectEnds) { nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); - if(!_bDrawPrimDoSetupVertexBuffer) { - HRESULT hr = _pScrn->pD3DDevice->DrawPrimitive(D3DPT_LINESTRIP, _curFVFflags, _pFvfBufBasePtr, nVerts, NULL); - TestDrawPrimFailure(DrawPrim,hr,_pScrn->pDD,nVerts,0); - } else { - COPYVERTDATA_2_VERTEXBUFFER(D3DPT_LINESTRIP,nVerts); - } + HRESULT hr = _pScrn->pD3DDevice->DrawPrimitive(D3DPT_LINESTRIP, _curFVFflags, _pFvfBufBasePtr, nVerts, NULL); + TestDrawPrimFailure(DrawPrim,hr,_pScrn->pDD,nVerts,0); _pCurFvfBufPtr = NULL; } @@ -2266,12 +2242,8 @@ draw_tri(GeomTri *geom, GeomContext *gc) { nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); - if(!_bDrawPrimDoSetupVertexBuffer) { - hr = _pScrn->pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, _curFVFflags, _pFvfBufBasePtr, nVerts, NULL); - TestDrawPrimFailure(DrawPrim,hr,_pScrn->pDD,nVerts,nPrims); - } else { - COPYVERTDATA_2_VERTEXBUFFER(D3DPT_TRIANGLELIST,nVerts); - } + hr = _pScrn->pD3DDevice->DrawPrimitive(D3DPT_TRIANGLELIST, _curFVFflags, _pFvfBufBasePtr, nVerts, NULL); + TestDrawPrimFailure(DrawPrim,hr,_pScrn->pDD,nVerts,nPrims); _pCurFvfBufPtr = NULL; } @@ -2723,12 +2695,8 @@ draw_multitri(Geom *geom, D3DPRIMITIVETYPE trilisttype) { assert((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); - if(!_bDrawPrimDoSetupVertexBuffer) { - hr = _pScrn->pD3DDevice->DrawPrimitive(trilisttype, _curFVFflags, _pFvfBufBasePtr, nVerts, NULL); - TestDrawPrimFailure(DrawPrim,hr,_pScrn->pDD,nVerts,nVerts-2); - } else { - COPYVERTDATA_2_VERTEXBUFFER(trilisttype,nVerts); - } + hr = _pScrn->pD3DDevice->DrawPrimitive(trilisttype, _curFVFflags, _pFvfBufBasePtr, nVerts, NULL); + TestDrawPrimFailure(DrawPrim,hr,_pScrn->pDD,nVerts,nVerts-2); _pCurFvfBufPtr = NULL; } diff --git a/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx b/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx index 6a0fa0d953..573ef9b237 100644 --- a/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx +++ b/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx @@ -588,7 +588,6 @@ dx_init(void) { #ifdef COUNT_DRAWPRIMS global_pD3DDevice = pDevice; #endif - _pCurrentGeomContext = NULL; _bDrawPrimDoSetupVertexBuffer = false; _last_testcooplevel_result = D3D_OK; @@ -1293,16 +1292,6 @@ typedef enum { FlatVerts,IndexedVerts,MixedFmtVerts } GeomVertFormat; -#define COPYVERTDATA_2_VERTEXBUFFER(PrimType,NumVertices) { \ - DWORD numVertBytes=_pCurFvfBufPtr-_pFvfBufBasePtr; \ - memcpy(_pCurrentGeomContext->_pEndofVertData,_pFvfBufBasePtr,numVertBytes); \ - DPInfo dpInfo; \ - dpInfo.nVerts=NumVertices; \ - dpInfo.primtype=PrimType; \ - _pCurrentGeomContext->_PrimInfo.push_back(dpInfo); \ - _pCurrentGeomContext->_num_verts+=dpInfo.nVerts; \ - _pCurrentGeomContext->_pEndofVertData+=numVertBytes; } - INLINE void DXGraphicsStateGuardian8:: transform_color(Colorf &InColor,D3DCOLOR &OutRGBAColor) { @@ -1622,12 +1611,8 @@ draw_point(GeomPoint *geom, GeomContext *gc) { // iterate through the point draw_prim_inner_loop(nPrims, geom, _perVertex | _perPrim); - if(!_bDrawPrimDoSetupVertexBuffer) { - HRESULT hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_POINTLIST, nPrims, _pFvfBufBasePtr, vertex_size); - TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nPrims,0); - } else { - COPYVERTDATA_2_VERTEXBUFFER(D3DPT_POINTLIST,nPrims); - } + HRESULT hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_POINTLIST, nPrims, _pFvfBufBasePtr, vertex_size); + TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nPrims,0); _pCurFvfBufPtr = NULL; @@ -1718,19 +1703,15 @@ draw_line(GeomLine* geom, GeomContext *gc) { DWORD nVerts = nPrims<<1; - if(!_bDrawPrimDoSetupVertexBuffer) { - if (_tmp_fvfOverrunBuf == NULL) { - nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); - hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_LINELIST, nPrims, _pFvfBufBasePtr, vertex_size); - } else { - nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_tmp_fvfOverrunBuf)); - hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_LINELIST, nPrims, _tmp_fvfOverrunBuf, vertex_size); - delete [] _tmp_fvfOverrunBuf; - } - TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,0); + if (_tmp_fvfOverrunBuf == NULL) { + nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); + hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_LINELIST, nPrims, _pFvfBufBasePtr, vertex_size); } else { - COPYVERTDATA_2_VERTEXBUFFER(D3DPT_LINELIST,nVerts); + nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_tmp_fvfOverrunBuf)); + hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_LINELIST, nPrims, _tmp_fvfOverrunBuf, vertex_size); + delete [] _tmp_fvfOverrunBuf; } + TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,0); _pCurFvfBufPtr = NULL; } @@ -1841,12 +1822,8 @@ draw_linestrip_base(Geom* geom, GeomContext *gc, bool bConnectEnds) { nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); - if(!_bDrawPrimDoSetupVertexBuffer) { - HRESULT hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_LINESTRIP, nVerts-1, _pFvfBufBasePtr, vertex_size); - TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,0); - } else { - COPYVERTDATA_2_VERTEXBUFFER(D3DPT_LINESTRIP,nVerts); - } + HRESULT hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_LINESTRIP, nVerts-1, _pFvfBufBasePtr, vertex_size); + TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,0); _pCurFvfBufPtr = NULL; } @@ -2414,12 +2391,8 @@ draw_tri(GeomTri *geom, GeomContext *gc) { nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); - if(!_bDrawPrimDoSetupVertexBuffer) { - hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, nPrims, _pFvfBufBasePtr, vertex_size); - TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,nPrims); - } else { - COPYVERTDATA_2_VERTEXBUFFER(D3DPT_TRIANGLELIST,nVerts); - } + hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, nPrims, _pFvfBufBasePtr, vertex_size); + TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,nPrims); _pCurFvfBufPtr = NULL; @@ -2650,12 +2623,8 @@ draw_multitri(Geom *geom, D3DPRIMITIVETYPE trilisttype) { assert((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); DWORD numTris=nVerts-2; - if(!_bDrawPrimDoSetupVertexBuffer) { - hr = _pD3DDevice->DrawPrimitiveUP(trilisttype, numTris, _pFvfBufBasePtr, vertex_size); - TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,numTris); - } else { - COPYVERTDATA_2_VERTEXBUFFER(trilisttype,nVerts); - } + hr = _pD3DDevice->DrawPrimitiveUP(trilisttype, numTris, _pFvfBufBasePtr, vertex_size); + TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,numTris); _pCurFvfBufPtr = NULL; } diff --git a/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx b/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx index 036f8e1ec3..026b5a8a0c 100755 --- a/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx +++ b/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx @@ -589,7 +589,6 @@ dx_init(void) { #ifdef COUNT_DRAWPRIMS global_pD3DDevice = pDevice; #endif - _pCurrentGeomContext = NULL; _bDrawPrimDoSetupVertexBuffer = false; _last_testcooplevel_result = D3D_OK; @@ -1298,16 +1297,6 @@ typedef enum { FlatVerts,IndexedVerts,MixedFmtVerts } GeomVertFormat; -#define COPYVERTDATA_2_VERTEXBUFFER(PrimType,NumVertices) { \ - DWORD numVertBytes=_pCurFvfBufPtr-_pFvfBufBasePtr; \ - memcpy(_pCurrentGeomContext->_pEndofVertData,_pFvfBufBasePtr,numVertBytes); \ - DPInfo dpInfo; \ - dpInfo.nVerts=NumVertices; \ - dpInfo.primtype=PrimType; \ - _pCurrentGeomContext->_PrimInfo.push_back(dpInfo); \ - _pCurrentGeomContext->_num_verts+=dpInfo.nVerts; \ - _pCurrentGeomContext->_pEndofVertData+=numVertBytes; } - INLINE void DXGraphicsStateGuardian9:: transform_color(Colorf &InColor,D3DCOLOR &OutRGBAColor) { @@ -1626,13 +1615,8 @@ draw_point(GeomPoint *geom, GeomContext *gc) { // iterate through the point draw_prim_inner_loop(nPrims, geom, _perVertex | _perPrim); - if(!_bDrawPrimDoSetupVertexBuffer) { - HRESULT hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_POINTLIST, nPrims, _pFvfBufBasePtr, vertex_size); - TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nPrims,0); - } else { - COPYVERTDATA_2_VERTEXBUFFER(D3DPT_POINTLIST,nPrims); - } - + HRESULT hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_POINTLIST, nPrims, _pFvfBufBasePtr, vertex_size); + TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nPrims,0); _pCurFvfBufPtr = NULL; } @@ -1722,19 +1706,15 @@ draw_line(GeomLine* geom, GeomContext *gc) { DWORD nVerts = nPrims<<1; - if(!_bDrawPrimDoSetupVertexBuffer) { - if (_tmp_fvfOverrunBuf == NULL) { - nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); - hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_LINELIST, nPrims, _pFvfBufBasePtr, vertex_size); - } else { - nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_tmp_fvfOverrunBuf)); - hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_LINELIST, nPrims, _tmp_fvfOverrunBuf, vertex_size); - delete [] _tmp_fvfOverrunBuf; - } - TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,0); + if (_tmp_fvfOverrunBuf == NULL) { + nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); + hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_LINELIST, nPrims, _pFvfBufBasePtr, vertex_size); } else { - COPYVERTDATA_2_VERTEXBUFFER(D3DPT_LINELIST,nVerts); + nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_tmp_fvfOverrunBuf)); + hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_LINELIST, nPrims, _tmp_fvfOverrunBuf, vertex_size); + delete [] _tmp_fvfOverrunBuf; } + TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,0); _pCurFvfBufPtr = NULL; } @@ -1845,12 +1825,8 @@ draw_linestrip_base(Geom* geom, GeomContext *gc, bool bConnectEnds) { nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); - if(!_bDrawPrimDoSetupVertexBuffer) { - HRESULT hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_LINESTRIP, nVerts-1, _pFvfBufBasePtr, vertex_size); - TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,0); - } else { - COPYVERTDATA_2_VERTEXBUFFER(D3DPT_LINESTRIP,nVerts); - } + HRESULT hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_LINESTRIP, nVerts-1, _pFvfBufBasePtr, vertex_size); + TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,0); _pCurFvfBufPtr = NULL; } @@ -2418,12 +2394,8 @@ draw_tri(GeomTri *geom, GeomContext *gc) { nassertv((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); - if(!_bDrawPrimDoSetupVertexBuffer) { - hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, nPrims, _pFvfBufBasePtr, vertex_size); - TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,nPrims); - } else { - COPYVERTDATA_2_VERTEXBUFFER(D3DPT_TRIANGLELIST,nVerts); - } + hr = _pD3DDevice->DrawPrimitiveUP(D3DPT_TRIANGLELIST, nPrims, _pFvfBufBasePtr, vertex_size); + TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,nPrims); _pCurFvfBufPtr = NULL; @@ -2655,12 +2627,8 @@ draw_multitri(Geom *geom, D3DPRIMITIVETYPE trilisttype) { assert((nVerts*vertex_size) == (_pCurFvfBufPtr-_pFvfBufBasePtr)); DWORD numTris=nVerts-2; - if(!_bDrawPrimDoSetupVertexBuffer) { - hr = _pD3DDevice->DrawPrimitiveUP(trilisttype, numTris, _pFvfBufBasePtr, vertex_size); - TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,numTris); - } else { - COPYVERTDATA_2_VERTEXBUFFER(trilisttype,nVerts); - } + hr = _pD3DDevice->DrawPrimitiveUP(trilisttype, numTris, _pFvfBufBasePtr, vertex_size); + TestDrawPrimFailure(DrawPrim,hr,_pD3DDevice,nVerts,numTris); _pCurFvfBufPtr = NULL; }