diff --git a/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx b/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx index ba135e9aac..2f915635bb 100755 --- a/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx +++ b/panda/src/dxgsg9/dxGraphicsStateGuardian9.cxx @@ -133,6 +133,7 @@ DXGraphicsStateGuardian9(const FrameBufferProperties &properties) : _enable_lru = dx_lru_management; _lru = 0; + _last_fvf = 0; } //////////////////////////////////////////////////////////////////// @@ -382,15 +383,21 @@ apply_vertex_buffer(VertexBufferContext *vbc) { } } -// HRESULT hr = _d3d_device->SetVertexShader(dvbc->_fvf); - HRESULT hr = _d3d_device->SetFVF(dvbc->_fvf); -#ifndef NDEBUG - if (FAILED(hr)) { - dxgsg9_cat.error() - << "SetVertexShader(0x" << (void*)dvbc->_fvf - << ") failed" << D3DERRORSTRING(hr); + if (dvbc->_fvf != _last_fvf) { + HRESULT hr = _d3d_device->SetFVF(dvbc->_fvf); + #ifndef NDEBUG + if (FAILED(hr)) { + dxgsg9_cat.error() + << "SetVertexShader(0x" << (void*)dvbc->_fvf + << ") failed" << D3DERRORSTRING(hr); + } + #endif + _last_fvf = dvbc->_fvf; + } + else + { +// dxgsg9_cat.error() << "EQUAL FVF\n"; } -#endif } //////////////////////////////////////////////////////////////////// @@ -2260,6 +2267,8 @@ reset() { // must check (_screen->_d3dcaps.PrimitiveMiscCaps & D3DPMISCCAPS_BLENDOP) (yes on GF2/Radeon8500, no on TNT) _d3d_device->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD); + _last_fvf = 0; + PRINT_REFCNT(dxgsg9, _d3d_device); } diff --git a/panda/src/dxgsg9/dxGraphicsStateGuardian9.h b/panda/src/dxgsg9/dxGraphicsStateGuardian9.h index e69e1b7346..5c2e196b9b 100755 --- a/panda/src/dxgsg9/dxGraphicsStateGuardian9.h +++ b/panda/src/dxgsg9/dxGraphicsStateGuardian9.h @@ -256,6 +256,8 @@ protected: Lru *_lru; + DWORD _last_fvf; + public: virtual TypeHandle get_type() const { return get_class_type();