void MeshEntity::RenderBare(BOOL bUseTransform) { traceInFast(MeshEntity::RenderBare); if(!mesh) return; if(bUseTransform) { MatrixPush(); MatrixMultiply(invTransform); if(bHasScale) MatrixScale(scale); } LoadVertexBuffer(VertBuffer); LoadIndexBuffer(mesh->IdxBuffer); GS->DrawBare(GS_TRIANGLES, 0, 0, mesh->nFaces*3); LoadVertexBuffer(NULL); LoadIndexBuffer(NULL); if(bUseTransform) MatrixPop(); traceOutFast; }
void MeshObject::RenderBare() { traceIn(MeshObject::RenderBare); LoadVertexBuffer(mesh->VertBuffer); LoadIndexBuffer(mesh->IdxBuffer); GS->DrawBare(GS_TRIANGLES, 0, 0, mesh->nFaces*3); LoadVertexBuffer(NULL); LoadIndexBuffer(NULL); traceOut; }
void MT_Terrain::Init(ID3D11Device *d3dDevice, ID3D11DeviceContext *d3dDeviceContext) { m_shader = new MT_Shader(); m_shader->Init(d3dDevice, d3dDeviceContext, k_VertexShaderFileName, k_PixelShaderFileName); m_heightMap = new MT_HeightMap(); m_heightMap->Init(TERRAIN_HEIGHTMAP_PATH); m_texture = new MT_Texture(); m_texture->LoadTexture(d3dDevice, d3dDeviceContext, TERRAIN_TEXTURE_GRASS_PATH); m_texture->LoadTexture(d3dDevice, d3dDeviceContext, TERRAIN_TEXTURE_ROCK_PATH); m_texture->LoadTexture(d3dDevice, d3dDeviceContext, TERRAIN_TEXTURE_WATER_PATH); m_texture->LoadSampler(d3dDevice, d3dDeviceContext); m_light = new MT_Light(); LightBufferValues lightValues; lightValues.ambient = k_Light_Ambient; lightValues.diffuse = k_Light_Diffuse; lightValues.direction = k_Light_Direction; lightValues.light_enabled = LIGHT_TOGGLE; lightValues.texture_enabled = TEXTURE_TOGGLE; m_light->Init(d3dDevice, d3dDeviceContext, lightValues); CreateInputLayoutObjectForVertexBuffer(d3dDevice, d3dDeviceContext, m_shader->GetVertexShaderBlob()); m_toggle_flatGrid = TOGGLE_FLAT_GRID; LoadVertexBuffer(d3dDevice, d3dDeviceContext); LoadIndexBuffer(d3dDevice, d3dDeviceContext); }
void MeshObject::Render() { traceIn(MeshObject::Render); LoadVertexBuffer(mesh->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->GetEffect() == GetActiveEffect()) material->LoadParameters(); if(material->GetFlags() & 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); } traceOut; }
//Loads the Vertex and Index buffers void ColladaMesh::LoadBuffers(daeElement *geometry) { if(diffuseTexture == 0) { HR(D3DX11CreateShaderResourceViewFromFile(device, L"../Assets/Textures/stone2.jpg", 0, 0, &diffuseTexture, 0 )); } //Create the vertex buffer by passing the pointer to the mesh daeElement LoadVertexBuffer(geometry->getChild("mesh")); //Create the index buffer by passing the pointer to the mesh daeElement LoadIndexBuffer(geometry->getChild("mesh")); }
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::RenderWireframe() { traceInFast(MeshEntity::RenderWireframe); Shader *shader = GetCurrentVertexShader(); if(shader) shader->SetColor(shader->GetParameter(1), wireframeColor | 0xFF000000); MatrixPush(); MatrixMultiply(invTransform); LoadVertexBuffer(VertBuffer); LoadIndexBuffer(mesh->WireframeBuffer); GS->DrawBare(GS_LINES); MatrixPop(); traceOutFast; }
void RotationManipulator::RenderScaled(const Vect &cameraDir, float scale) { traceInFast(RotationManipulator::RenderScaled); DWORD i; Shader *rotManipShader = GetVertexShader(TEXT("Editor:RotationManipulator.vShader")); LoadVertexShader(rotManipShader); LoadPixelShader(GetPixelShader(TEXT("Base:SolidColor.pShader"))); rotManipShader->SetVector(rotManipShader->GetParameter(2), cameraDir); MatrixPush(); MatrixTranslate(GetWorldPos()); MatrixScale(scale, scale, scale); for(i=0; i<3; i++) { Vect axisColor(0.0f, 0.0f, 0.0f); axisColor.ptr[i] = 1.0f; if(i == activeAxis) axisColor.Set(1.0f, 1.0f, 0.0f); else axisColor.ptr[i] = 1.0f; rotManipShader->SetVector(rotManipShader->GetParameter(1), axisColor); LoadVertexBuffer(axisBuffers[i]); LoadIndexBuffer(NULL); Draw(GS_LINESTRIP); } LoadVertexBuffer(NULL); //---------------------------------------------------- Shader *solidShader = GetVertexShader(TEXT("Base:SolidColor.vShader")); LoadVertexShader(solidShader); MatrixPush(); MatrixRotate(Quat().SetLookDirection(cameraDir)); LoadVertexBuffer(axisBuffers[2]); LoadIndexBuffer(NULL); solidShader->SetColor(solidShader->GetParameter(1), 0.5, 0.5, 0.5, 0.5); Draw(GS_LINESTRIP); MatrixScale(1.25f, 1.25f, 1.25f); //--------------- if(activeAxis == 4) solidShader->SetColor(solidShader->GetParameter(1), 1.0f, 1.0f, 0.0, 1.0f); else solidShader->SetColor(solidShader->GetParameter(1), 0.8, 0.8, 0.8, 0.8); Draw(GS_LINESTRIP); MatrixPop(); MatrixPop(); LoadVertexShader(NULL); LoadPixelShader(NULL); 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; }