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

Method DrawHairSorted

TombEngine/Renderer/RendererDraw.cpp:3972–4042  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3970 }
3971
3972 void Renderer::DrawHairSorted(RendererSortableObject* objectInfo, RendererObjectType lastObjectType, RenderView& view, int index)
3973 {
3974 if (index >= HairEffect.Units.size())
3975 {
3976 TENLog("Attempt to draw nonexistent hair unit", LogLevel::Warning);
3977 return;
3978 }
3979
3980 if (lastObjectType != objectInfo->ObjectType)
3981 {
3982 unsigned int stride = sizeof(Vertex);
3983 unsigned int offset = 0;
3984 _context->IASetVertexBuffers(0, 1, _moveablesVertexBuffer.Buffer.GetAddressOf(), &stride, &offset);
3985 _context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
3986 _context->IASetInputLayout(_inputLayout.Get());
3987
3988 SetDepthState(DepthState::Read);
3989 SetCullMode(CullMode::CounterClockwise);
3990
3991 _shaders.Bind(Shader::Items);
3992 }
3993
3994 _sortedPolygonsIndexBuffer.Update(_context.Get(), _sortedPolygonsIndices, 0, (int)_sortedPolygonsIndices.size());
3995 _context->IASetIndexBuffer(_sortedPolygonsIndexBuffer.Buffer.Get(), DXGI_FORMAT_R32_UINT, 0);
3996
3997 // Bind main item properties.
3998 Matrix world = objectInfo->Item->InterpolatedWorld;
3999 _stItem.World = world;
4000 _stItem.Color = objectInfo->Item->Color;
4001 _stItem.AmbientLight = objectInfo->Item->AmbientLight;
4002 _stItem.Skinned = (int)(objectInfo->Skinned ? SkinningMode::Full : SkinningMode::None);
4003
4004 const auto& moveableObj = *_moveableObjects[(int)GAME_OBJECT_ID::ID_HAIR_PRIMARY + index];
4005
4006 _stItem.World = Matrix::Identity;
4007 _stItem.BonesMatrices[0] = objectInfo->Item->InterpolatedAnimTransforms[HairUnit::GetRootMeshID(index)] * objectInfo->Item->InterpolatedWorld;
4008 ReflectMatrixOptionally(_stItem.BonesMatrices[0]);
4009
4010 bool forceValue = g_GameFlow->CurrentFreezeMode == FreezeMode::Player;
4011
4012 for (int i = 0; i < HairEffect.Units[index].Segments.size(); i++)
4013 {
4014 const auto& segment = HairEffect.Units[index].Segments[i];
4015 auto worldMatrix = segment.GlobalTransform;
4016
4017 ReflectMatrixOptionally(worldMatrix);
4018
4019 _stItem.BonesMatrices[i + 1] = worldMatrix;
4020 _stItem.BoneLightModes[i] = (int)LightMode::Dynamic;
4021 }
4022
4023 UpdateConstantBuffer(_stItem, _cbItem);
4024
4025 for (int k = 0; k < moveableObj.ObjectMeshes.size(); k++)
4026 _stItem.BoneLightModes[k] = (int)moveableObj.ObjectMeshes[k]->LightMode;
4027
4028 bool acceptsShadows = moveableObj.ShadowType == ShadowMode::None;
4029 BindMoveableLights(objectInfo->Item->LightsToDraw, objectInfo->Item->RoomNumber, objectInfo->Item->PrevRoomNumber, objectInfo->Item->LightFade, acceptsShadows);

Callers

nothing calls this directly

Calls 6

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

Tested by

no test coverage detected