bool TerrainShaderClass::RenderDeferred(ID3D11DeviceContext* pDeviceContext, ObjectClass* pObject, CameraClass* pCamera) { bool result; unsigned int bufferNumber; // Set the shader parameters that it will use for rendering. result = ShaderClass::SetConstantBufferParameters(pDeviceContext, pObject->GetWorldMatrix(), pCamera->GetViewMatrix(), pCamera->GetProjMatrix(), pCamera->GetPosition()); if (!result) { return false; } // Set the position of the constant buffer in the vertex shader. bufferNumber = 0; // Set the constant buffer in the vertex shader with the updated values. pDeviceContext->GSSetConstantBuffers(bufferNumber, 1, &mMatrixBuffer); TextureClass* pTexture = pObject->GetTexture(); ID3D11ShaderResourceView** tex = pTexture->GetShaderResourceView(); // Set shader texture resource in the pixel shader. pDeviceContext->PSSetShaderResources(0, pTexture->GetTextureCount(), tex); if (pTexture->blendEnabled()) { ID3D11ShaderResourceView* tex2 = pTexture->GetBlendMapShaderResourceView(); pDeviceContext->PSSetShaderResources(3, 1, &tex2); } // Now render the prepared buffers with the shader. pDeviceContext->PSSetSamplers(0, 1, &mSampleState); // Set the vertex input layout. pDeviceContext->IASetInputLayout(mLayout); // Set the vertex and pixel shaders that will be used to render this triangle. pDeviceContext->VSSetShader(mVertexShader, nullptr, 0); pDeviceContext->HSSetShader(mHullShader, nullptr, 0); pDeviceContext->DSSetShader(mDomainShader, nullptr, 0); pDeviceContext->GSSetShader(mGeometryShader, nullptr, 0); pDeviceContext->PSSetShader(mDeferredPS, nullptr, 0); // Render mesh stored in active buffers pDeviceContext->DrawIndexed(pObject->GetIndexCount(0), 0, 0); return true; }
bool LightShaderClass::RenderAnimated(ID3D11DeviceContext* pDeviceContext, ObjectClass* pObject, CameraClass* pCamera, PointLightClass** ppLights, UINT NrOfLights, FogClass* pDrawDistFog) { bool result; unsigned int bufferNumber; // Set the position of the constant buffer in the vertex shader. bufferNumber = 0; result = SetTbufferParameters(pDeviceContext, pObject->GetWorldMatrix(), pCamera->GetViewMatrix(), pCamera->GetProjMatrix(), pObject); if (!result) { return false; } pDeviceContext->GSSetConstantBuffers(0, 1, &mBoneTBuffer); result = SetConstantBufferParameters(pDeviceContext, ppLights, NrOfLights, pObject, pDrawDistFog, pCamera); if (!result) { return false; } TextureClass* pTexture = pObject->GetTexture(); ID3D11ShaderResourceView** tex = pTexture->GetShaderResourceView(); // Set shader texture resource in the pixel shader. pDeviceContext->PSSetShaderResources(0, pTexture->GetTextureCount(), tex); // Now render the prepared buffers with the shader. pDeviceContext->PSSetSamplers(0, 1, &mSampleState); // Set the vertex input layout. pDeviceContext->IASetInputLayout(mLayout); // Set the vertex and pixel shaders that will be used to render this triangle. pDeviceContext->VSSetShader(mVertexShader, nullptr, 0); pDeviceContext->HSSetShader(mHullShader, nullptr, 0); pDeviceContext->DSSetShader(mDomainShader, nullptr, 0); pDeviceContext->GSSetShader(mAniGS, nullptr, 0); pDeviceContext->PSSetShader(mPixelShader, nullptr, 0); // Render mesh stored in active buffers pDeviceContext->DrawIndexed(pObject->GetIndexCount(0), 0, 0); return true; }
bool TerrainShaderClass::Render(ID3D11DeviceContext* pDeviceContext, ObjectClass* pObject, CameraClass* pCamera, LightObjectClass* pSunLightObject, FogClass* pDrawDistFog) { bool result; unsigned int bufferNumber; // Set the shader parameters that it will use for rendering. result = ShaderClass::SetConstantBufferParameters(pDeviceContext, pObject->GetWorldMatrix(), pCamera->GetViewMatrix(), pCamera->GetProjMatrix(), pCamera->GetForward()); if (!result) { return false; } // Set the position of the constant buffer in the vertex shader. bufferNumber = 0; // Set the constant buffer in the vertex shader with the updated values. pDeviceContext->GSSetConstantBuffers(bufferNumber, 1, &mMatrixBuffer); TextureClass* pTexture = pObject->GetTexture(); result = SetConstantBufferParameters(pDeviceContext, pSunLightObject, pDrawDistFog); if (!result) { return false; } ID3D11ShaderResourceView** tex = pTexture->GetShaderResourceView(); // Set shader texture resource in the pixel shader. pDeviceContext->PSSetShaderResources(0, pTexture->GetTextureCount(), tex); // Now render the prepared buffers with the shader. RenderShader(pDeviceContext, pObject->GetIndexCount(0)); return true; }
bool TerrainShaderClass::RenderShadowsDeferred(ID3D11DeviceContext* pDeviceContext, ObjectClass* pObject, CameraClass* pCamera, PointLightClass* pLights, ID3D11ShaderResourceView* pShadowmap, UINT indexCount, UINT indexStart) { bool result; unsigned int bufferNumber; // Set the position of the constant buffer in the vertex shader. bufferNumber = 0; result = SetShadowConstantBufferParamters(pDeviceContext, pObject, pCamera, pLights); if (!result) { return false; } ModelClass* pModel = pObject->GetModel(); pDeviceContext->PSSetShaderResources(0, 1, &pShadowmap); TextureClass* pTexture = pModel->GetDetailMap(); ID3D11ShaderResourceView** tex = pTexture->GetShaderResourceView(); // Set shader texture resource in the pixel shader. pDeviceContext->PSSetShaderResources(1, 1, tex); pTexture = pModel->GetNormalMap(); tex = pTexture->GetShaderResourceView(); // Set shader texture resource in the pixel shader. pDeviceContext->PSSetShaderResources(2, 1, tex); pTexture = pModel->GetTexture(); tex = pTexture->GetShaderResourceView(); // Set shader texture resource in the pixel shader. pDeviceContext->PSSetShaderResources(3, pTexture->GetTextureCount(), tex); pDeviceContext->PSSetSamplers(1, 1, &mPointSampleState); // Now render the prepared buffers with the shader. pDeviceContext->PSSetSamplers(0, 1, &mSampleState); // Set the vertex input layout. pDeviceContext->IASetInputLayout(mLayout); // Set the vertex and pixel shaders that will be used to render this triangle. pDeviceContext->VSSetShader(mShadowDeferredVS, nullptr, 0); pDeviceContext->HSSetShader(mHullShader, nullptr, 0); pDeviceContext->DSSetShader(mDomainShader, nullptr, 0); pDeviceContext->GSSetShader(mShadowDeferredGS, nullptr, 0); pDeviceContext->PSSetShader(mShadowDeferredPS, nullptr, 0); // Render mesh stored in active buffers pDeviceContext->DrawIndexed(indexCount, indexStart, 0); return true; }