MCPcopy Create free account
hub / github.com/TombEngine/TombEngine / DrawItemSorted

Method DrawItemSorted

TombEngine/Renderer/RendererDraw.cpp:3833–3890  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3831 }
3832
3833 void Renderer::DrawItemSorted(RendererSortableObject* objectInfo, RendererObjectType lastObjectType, RenderView& view)
3834 {
3835 if (lastObjectType != objectInfo->ObjectType)
3836 {
3837 unsigned int stride = sizeof(Vertex);
3838 unsigned int offset = 0;
3839 _context->IASetVertexBuffers(0, 1, _moveablesVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
3840 _context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
3841 _context->IASetInputLayout(_inputLayout.Get());
3842
3843 SetDepthState(DepthState::Read);
3844 SetCullMode(CullMode::CounterClockwise);
3845
3846 _shaders.Bind(Shader::Items);
3847 }
3848
3849 _sortedPolygonsIndexBuffer.Update(_context.Get(), _sortedPolygonsIndices, 0, (int)_sortedPolygonsIndices.size());
3850 _context->IASetIndexBuffer(_sortedPolygonsIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
3851
3852 // Bind main item properties.
3853 Matrix world = objectInfo->Item->InterpolatedWorld;
3854 _stItem.World = world;
3855 _stItem.Color = objectInfo->Item->Color;
3856 _stItem.AmbientLight = objectInfo->Item->AmbientLight;
3857 _stItem.Skinned = (int)(objectInfo->Skinned ? SkinningMode::Full : SkinningMode::None);
3858
3859 const auto& moveableObj = *_moveableObjects[objectInfo->Item->ObjectID];
3860
3861 if (objectInfo->Skinned)
3862 {
3863 for (int m = 0; m < moveableObj.BindPoseTransforms.size(); m++)
3864 _stItem.BonesMatrices[m] = moveableObj.BindPoseTransforms[m] * objectInfo->Item->InterpolatedAnimTransforms[m];
3865 }
3866 else
3867 {
3868 memcpy(_stItem.BonesMatrices, objectInfo->Item->InterpolatedAnimTransforms, sizeof(Matrix) * MAX_BONES);
3869 }
3870
3871 UpdateConstantBuffer(_stItem, _cbItem);
3872
3873 for (int k = 0; k < moveableObj.ObjectMeshes.size(); k++)
3874 _stItem.BoneLightModes[k] = (int)moveableObj.ObjectMeshes[k]->LightMode;
3875
3876 bool acceptsShadows = moveableObj.ShadowType == ShadowMode::None;
3877 BindMoveableLights(objectInfo->Item->LightsToDraw, objectInfo->Item->RoomNumber, objectInfo->Item->PrevRoomNumber, objectInfo->Item->LightFade, acceptsShadows);
3878 UpdateConstantBuffer(_stItem, _cbItem);
3879
3880 SetBlendMode(objectInfo->BlendMode);
3881 SetAlphaTest(AlphaTestMode::None, ALPHA_TEST_THRESHOLD);
3882
3883 BindBucketTextures(*objectInfo->Bucket, TextureSource::Moveables, objectInfo->Bucket->Animated);
3884 BindMaterial(objectInfo->Bucket->MaterialIndex, false);
3885
3886 DrawIndexedTriangles((int)_sortedPolygonsIndices.size(), 0, 0);
3887
3888 _numSortedMoveablesDrawCalls++;
3889 _numSortedTriangles += (int)_sortedPolygonsIndices.size() / 3;
3890 }

Callers

nothing calls this directly

Calls 5

GetAddressOfMethod · 0.80
BindMethod · 0.80
GetMethod · 0.45
UpdateMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected