예제 #1
0
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()));
	}

}
예제 #2
0
			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;
			}