/** * CRenderList::renderAll * @date Modified Apr 25, 2006 */ void CRenderList::renderAll(void) { // Render Geomtery LPDIRECT3DDEVICE9 pDev = CRenderSystem::getInstance().getRenderDevice().getD3DDevice(); m_poVertCache->begin(); SRenderTriangle* pTri; CMaterial* pTriMat = NULL; for(DWORD i = 0; i < m_dwCurrentIndex; ++i) { pTri = (SRenderTriangle*)m_oPrimList[i]; // Check for material change. pTriMat = pTri->m_pMaterial; if(pTriMat != m_pCurrentMaterial) { // Change material if(m_pCurrentMaterial) { // Render previous if the new material has effect on the shader or texture if(pTriMat->getDiffuse() != m_pCurrentMaterial->getDiffuse()) { // Make sure the straggler triangles get rendered. m_poVertCache->flush(); m_dwCurrentPass = 0; m_pCurrentMaterial->end(); }; } m_pCurrentMaterial = pTriMat; m_pCurrentMaterial->begin(); } // Add triangles m_poVertCache->insert(pTri->m_oVerts, 3, NULL, 3); } // Clean up last material if(m_pCurrentMaterial) { m_poVertCache->flush(); m_dwCurrentPass = 0; pDev->SetTexture(0, NULL); m_pCurrentMaterial->end(); m_pCurrentMaterial = NULL; } }