void CubeMesh::Draw(RenderContext& context) { #if defined(DEBUG_OBB) context.SetRasterizerState(m_rasterType); context.ApplyShader(m_useShaderType); context.GetDeviceContext().IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); context.GetDeviceContext().IASetVertexBuffers(0, 1, &m_pVB, &m_Stride, &m_Offset); context.GetDeviceContext().IASetIndexBuffer(m_pIB, DXGI_FORMAT_R16_UINT, m_Offset); // Set constants cbWorld wbuffer = { XMMatrixTranspose(m_World) }; cbInvTransposeWorld invTransWorld = { MatrixInverseTranspose(m_World) }; cbMatTexPerObject matTexPerObject = { *m_texture->GetTextureCoordinateMatrix(), m_material }; if (m_useShaderType == ShaderType_LightTexture) { LightTextureShader* lightTexShader = (LightTextureShader*)context.GetShader(ShaderType_LightTexture); lightTexShader->setCBWorld(context.GetDeviceContext(), &wbuffer); lightTexShader->setCBInvTransposeMatrix(context.GetDeviceContext(), &invTransWorld); lightTexShader->setCBMatTexPerObject(context.GetDeviceContext(), &matTexPerObject); lightTexShader->setTexture2D(context.GetDeviceContext(), m_texture->GetTextureResource()); } else { //Solid Shader SolidColorShader* solidColorShader = (SolidColorShader*)context.GetShader(ShaderType_SolidColor); solidColorShader->setCBWorld(context.GetDeviceContext(), wbuffer); } context.DrawIndexedInstanced(36); #endif }
bool Terrain::Draw(RenderContext& renderContext) { renderContext.ApplyShader(m_useShaderType); XCShaderHandle* shaderHandle = nullptr; // Set constants ICamera& cam = renderContext.GetGlobalShaderData().m_camera; PerObjectBuffer perObject = { MatrixTranspose(m_World).GetUnaligned(), MatrixTranspose(m_World * cam.GetViewMatrix() * cam.GetProjectionMatrix()).GetUnaligned(), MatrixInverseTranspose(m_World).GetUnaligned(), XCMatrix().GetUnaligned(), m_material }; m_pCBPerObject->UploadDataOnGPU(renderContext.GetDeviceContext(), &perObject, sizeof(PerObjectBuffer)); if (m_useShaderType == ShaderType_LightTexture) { shaderHandle = (XCShaderHandle*)renderContext.GetShader(ShaderType_LightTexture); shaderHandle->SetConstantBuffer("PerObjectBuffer", renderContext.GetDeviceContext(), *m_pCBPerObject); shaderHandle->SetResource("gDiffuseMap", renderContext.GetDeviceContext(), m_textures[0]); } else if (m_useShaderType == ShaderType_TerrainMultiTexture) { shaderHandle = (XCShaderHandle*)renderContext.GetShader(ShaderType_TerrainMultiTexture); shaderHandle->SetConstantBuffer("PerObjectBuffer", renderContext.GetDeviceContext(), *m_pCBPerObject); shaderHandle->SetResource("gDiffuseMap", renderContext.GetDeviceContext(), m_textures[0]); shaderHandle->SetResource("gDiffuseMap1", renderContext.GetDeviceContext(), m_textures[1]); shaderHandle->SetResource("gDiffuseMap2", renderContext.GetDeviceContext(), m_textures[2]); shaderHandle->SetResource("gBlendMap", renderContext.GetDeviceContext(), m_textures[3]); } #if defined(FORWARD_LIGHTING) XCLightManager* lightMgr = (XCLightManager*)&SystemLocator::GetInstance()->RequestSystem("LightsManager"); shaderHandle->SetConstantBuffer("cbLightsPerFrame", renderContext.GetDeviceContext(), lightMgr->GetLightConstantBuffer()); #endif shaderHandle->SetVertexBuffer(renderContext.GetDeviceContext(), &m_vertexPosNormTexBuffer); shaderHandle->SetIndexBuffer(renderContext.GetDeviceContext(), m_indexBuffer); renderContext.DrawIndexedInstanced(m_indexBuffer.m_indexData.size(), m_indexBuffer.GetIndexBufferInGPUMem()); return true; }