Effect* CreateEffect(const char* i_pBinaryMaterialFile) { // Load effects Effect* pResult = LoadEffectData(i_pBinaryMaterialFile); if (pResult) return pResult; else return nullptr; }
void ModContentManager::LoadGameData() { // Note: load order dependencies // Load Effect LoadEffectData(mEffectData); // Load Actor LoadActorData(mActorData); // Load Projectiles LoadProjectileData(mProjectileData); }
void MeshEntity::QuickRender() { traceInFast(MeshEntity::QuickRender); if(!mesh) return; if(GetActiveEffect()) LoadEffectData(); else { MatrixPush(); MatrixMultiply(invTransform); if(bHasScale) MatrixScale(scale); } LoadVertexBuffer(VertBuffer); LoadIndexBuffer(mesh->IdxBuffer); for(DWORD i=0;i<mesh->nSections;i++) { DrawSection §ion = mesh->SectionList[i]; Material *material = MaterialList[i]; if(!material) continue; if(material->effect == GetActiveEffect()) material->LoadParameters(); if(material->flags & MATERIAL_TWOSIDED) { GSCullMode cullMode; cullMode = GetCullMode(); SetCullMode(GS_NEITHER); GS->Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3); SetCullMode(cullMode); } else GS->Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3); } if(GetActiveEffect()) ResetEffectData(); else MatrixPop(); traceOutFast; }
void MeshEntity::RenderInitialPass() { traceInFast(MeshEntity::RenderInitialPass); profileSegment("MeshEntity::RenderInitialPass"); if(!mesh) return; LoadEffectData(); LoadVertexBuffer(VertBuffer); LoadIndexBuffer(mesh->IdxBuffer); for(DWORD i=0;i<mesh->nSections;i++) { DrawSection §ion = mesh->SectionList[i]; Material *material = MaterialList[i]; if(material && section.numFaces) { if(material->effect == GetActiveEffect()) { material->LoadParameters(); if(material->flags & MATERIAL_TWOSIDED) { GSCullMode cullMode; cullMode = GetCullMode(); SetCullMode(GS_NEITHER); Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3); SetCullMode(cullMode); } else Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3); } } } ResetEffectData(); traceOutFast; }
void MeshEntity::RenderLightmaps() { traceInFast(MeshEntity::RenderLightmaps); if(!mesh || !bLightmapped) return; LoadEffectData(); LoadVertexBuffer(VertBuffer); LoadIndexBuffer(mesh->IdxBuffer); HANDLE param[3]; param[0] = level->GetLightmapU();//GetActiveEffect()->GetParameterByName(TEXT("lightmapU")); param[1] = level->GetLightmapV();//GetActiveEffect()->GetParameterByName(TEXT("lightmapV")); param[2] = level->GetLightmapW();//GetActiveEffect()->GetParameterByName(TEXT("lightmapW")); if(lightmap.X) { GetActiveEffect()->SetTexture(param[0], lightmap.X); GetActiveEffect()->SetTexture(param[1], lightmap.Y); GetActiveEffect()->SetTexture(param[2], lightmap.Z); } else { //actually it should never get here Texture *black = GetTexture(TEXT("Base:Default/black.tga")); GetActiveEffect()->SetTexture(param[0], black); GetActiveEffect()->SetTexture(param[1], black); GetActiveEffect()->SetTexture(param[2], black); } for(DWORD i=0;i<mesh->nSections;i++) { DrawSection §ion = mesh->SectionList[i]; Material *material = MaterialList[i]; if(material && section.numFaces) { if(material->effect == GetActiveEffect()) { material->LoadParameters(); if(material->flags & MATERIAL_TWOSIDED) { GSCullMode cullMode; cullMode = GetCullMode(); SetCullMode(GS_NEITHER); Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3); SetCullMode(cullMode); } else Draw(GS_TRIANGLES, 0, section.startFace*3, section.numFaces*3); } } } ResetEffectData(); traceOutFast; }