void AasRenderer::RenderGeometryShadow(gfx::AnimatedModel * model, const gfx::AnimatedModelParams & params, const gfx::Light3d & globalLight, float alpha) { // Find or create render caching data for the submesh auto &renderData = mRenderDataCache[model->GetHandle()]; if (!renderData) { renderData = std::make_unique<AasRenderData>(); } mDevice.SetMaterial(mGeometryShadowMaterial); auto d3d = mDevice.GetDevice(); d3d->SetVertexShaderConstantF(0, &mDevice.GetCamera().GetViewProj()._11, 4); d3d->SetVertexShaderConstantF(4, &globalLight.dir.x, 1); XMFLOAT4 floats{ params.offsetZ, 0, 0, 0 }; d3d->SetVertexShaderConstantF(5, &floats.x, 1); floats.x = alpha; d3d->SetVertexShaderConstantF(6, &floats.x, 1); auto materialIds(model->GetSubmeshes()); for (size_t i = 0; i < materialIds.size(); ++i) { auto submesh(model->GetSubmesh(params, i)); auto &submeshData = GetSubmeshData(*renderData, i, *submesh); submeshData.binding.Bind(); d3d->SetIndices(submeshData.idxBuffer->GetBuffer()); D3DLOG(d3d->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, submesh->GetVertexCount(), 0, submesh->GetPrimitiveCount())); } }
Air::U1 System::SetConstantBuffer( enumShaderType type,IConstantBuffer* pBuffer ) { if(pBuffer==NULL) return false; enumConstantBufferType cbType = pBuffer->GetType(); const static U32 uiRegister[6] = { 0, 6, 15, 19, 30, 19 }; U32 uiRegisterStart = uiRegister[cbType]; if(type == enVS){ SetVertexShaderConstantF(uiRegisterStart,(float*)pBuffer->GetBuffer(),pBuffer->GetSize()); }else{ SetPixelShaderConstantF(uiRegisterStart,(float*)pBuffer->GetBuffer(),pBuffer->GetSize()); } return true; }