mirror of
https://github.com/TombEngine/TombEngine.git
synced 2025-04-28 15:57:59 +03:00
Added debris and effects drawing in mirrored rooms;
Some optimizations for early skip non mirrored items;
This commit is contained in:
parent
2218dd3179
commit
ec6ab64131
4 changed files with 90 additions and 32 deletions
|
@ -470,8 +470,8 @@ namespace TEN::Renderer
|
||||||
void PrepareWeatherParticles(RenderView& view);
|
void PrepareWeatherParticles(RenderView& view);
|
||||||
void PrepareDrips(RenderView& view);
|
void PrepareDrips(RenderView& view);
|
||||||
void PrepareBubbles(RenderView& view);
|
void PrepareBubbles(RenderView& view);
|
||||||
void DrawEffects(RenderView& view, RendererPass rendererPass);
|
void DrawEffects(RendererMirror* mirror, RenderView& view, RendererPass rendererPass);
|
||||||
void DrawEffect(RenderView& view, RendererEffect* effect, RendererPass rendererPass);
|
void DrawEffect(RendererMirror* mirror, RenderView& view, RendererEffect* effect, RendererPass rendererPass);
|
||||||
void PrepareSplashes(RenderView& view);
|
void PrepareSplashes(RenderView& view);
|
||||||
void DrawSprites(RendererMirror* mirror, RenderView& view, RendererPass rendererPass);
|
void DrawSprites(RendererMirror* mirror, RenderView& view, RendererPass rendererPass);
|
||||||
void DrawDisplaySprites(RenderView& view);
|
void DrawDisplaySprites(RenderView& view);
|
||||||
|
@ -498,7 +498,7 @@ namespace TEN::Renderer
|
||||||
void DrawStatistics();
|
void DrawStatistics();
|
||||||
void DrawExamines();
|
void DrawExamines();
|
||||||
void DrawDiary();
|
void DrawDiary();
|
||||||
void DrawDebris(RenderView& view, RendererPass rendererPass);
|
void DrawDebris(RendererMirror* mirror, RenderView& view, RendererPass rendererPass);
|
||||||
void DrawFullScreenImage(ID3D11ShaderResourceView* texture, float fade, ID3D11RenderTargetView* target,
|
void DrawFullScreenImage(ID3D11ShaderResourceView* texture, float fade, ID3D11RenderTargetView* target,
|
||||||
ID3D11DepthStencilView* depthTarget);
|
ID3D11DepthStencilView* depthTarget);
|
||||||
void PrepareShockwaves(RenderView& view);
|
void PrepareShockwaves(RenderView& view);
|
||||||
|
|
|
@ -480,6 +480,9 @@ namespace TEN::Renderer
|
||||||
{
|
{
|
||||||
auto* rat = &Rats[i];
|
auto* rat = &Rats[i];
|
||||||
|
|
||||||
|
if (mirror != nullptr && rat->RoomNumber != mirror->RoomNumber)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (rat->On)
|
if (rat->On)
|
||||||
{
|
{
|
||||||
RendererMesh* mesh = GetMesh(Objects[ID_RATS_EMITTER].meshIndex + (rand() % 8));
|
RendererMesh* mesh = GetMesh(Objects[ID_RATS_EMITTER].meshIndex + (rand() % 8));
|
||||||
|
@ -520,6 +523,9 @@ namespace TEN::Renderer
|
||||||
{
|
{
|
||||||
auto* rat = &Rats[i];
|
auto* rat = &Rats[i];
|
||||||
|
|
||||||
|
if (mirror != nullptr && rat->RoomNumber != mirror->RoomNumber)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (rat->On)
|
if (rat->On)
|
||||||
{
|
{
|
||||||
activeRatsExist = true;
|
activeRatsExist = true;
|
||||||
|
@ -732,6 +738,9 @@ namespace TEN::Renderer
|
||||||
if (!bat.On)
|
if (!bat.On)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (mirror != nullptr && bat.RoomNumber != mirror->RoomNumber)
|
||||||
|
continue;
|
||||||
|
|
||||||
for (auto& bucket : mesh.Buckets)
|
for (auto& bucket : mesh.Buckets)
|
||||||
{
|
{
|
||||||
if (!IsSortedBlendMode(bucket.BlendMode))
|
if (!IsSortedBlendMode(bucket.BlendMode))
|
||||||
|
@ -765,6 +774,9 @@ namespace TEN::Renderer
|
||||||
{
|
{
|
||||||
const auto& bat = Bats[i];
|
const auto& bat = Bats[i];
|
||||||
|
|
||||||
|
if (mirror != nullptr && bat.RoomNumber != mirror->RoomNumber)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (bat.On)
|
if (bat.On)
|
||||||
{
|
{
|
||||||
auto& room = _rooms[bat.RoomNumber];
|
auto& room = _rooms[bat.RoomNumber];
|
||||||
|
@ -884,6 +896,9 @@ namespace TEN::Renderer
|
||||||
{
|
{
|
||||||
const auto& beetle = TEN::Entities::TR4::BeetleSwarm[i];
|
const auto& beetle = TEN::Entities::TR4::BeetleSwarm[i];
|
||||||
|
|
||||||
|
if (mirror != nullptr && beetle.RoomNumber != mirror->RoomNumber)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (beetle.On)
|
if (beetle.On)
|
||||||
{
|
{
|
||||||
auto& room = _rooms[beetle.RoomNumber];
|
auto& room = _rooms[beetle.RoomNumber];
|
||||||
|
@ -976,6 +991,9 @@ namespace TEN::Renderer
|
||||||
if (!locust.on)
|
if (!locust.on)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (mirror != nullptr && locust.roomNumber != mirror->RoomNumber)
|
||||||
|
continue;
|
||||||
|
|
||||||
auto& mesh = *GetMesh(Objects[ID_LOCUSTS].meshIndex + (-locust.counter & 3));
|
auto& mesh = *GetMesh(Objects[ID_LOCUSTS].meshIndex + (-locust.counter & 3));
|
||||||
|
|
||||||
for (auto& bucket : mesh.Buckets)
|
for (auto& bucket : mesh.Buckets)
|
||||||
|
@ -1012,6 +1030,9 @@ namespace TEN::Renderer
|
||||||
if (!locust.on)
|
if (!locust.on)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
if (mirror != nullptr && locust.roomNumber != mirror->RoomNumber)
|
||||||
|
continue;
|
||||||
|
|
||||||
activeLocustsExist = true;
|
activeLocustsExist = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1847,7 +1868,7 @@ namespace TEN::Renderer
|
||||||
DrawScarabs(nullptr, view, RendererPass::GBuffer);
|
DrawScarabs(nullptr, view, RendererPass::GBuffer);
|
||||||
DrawGunShells(nullptr, view, RendererPass::GBuffer);
|
DrawGunShells(nullptr, view, RendererPass::GBuffer);
|
||||||
DrawBats(nullptr, view, RendererPass::GBuffer);
|
DrawBats(nullptr, view, RendererPass::GBuffer);
|
||||||
DrawEffects(view, RendererPass::GBuffer);
|
DrawEffects(nullptr, view, RendererPass::GBuffer);
|
||||||
DrawRats(nullptr, view, RendererPass::GBuffer);
|
DrawRats(nullptr, view, RendererPass::GBuffer);
|
||||||
DrawLocusts(nullptr, view, RendererPass::GBuffer);
|
DrawLocusts(nullptr, view, RendererPass::GBuffer);
|
||||||
|
|
||||||
|
@ -1880,10 +1901,10 @@ namespace TEN::Renderer
|
||||||
DrawScarabs(nullptr, view, RendererPass::Opaque);
|
DrawScarabs(nullptr, view, RendererPass::Opaque);
|
||||||
DrawGunShells(nullptr, view, RendererPass::Opaque);
|
DrawGunShells(nullptr, view, RendererPass::Opaque);
|
||||||
DrawBats(nullptr, view, RendererPass::Opaque);
|
DrawBats(nullptr, view, RendererPass::Opaque);
|
||||||
DrawEffects(view, RendererPass::Opaque);
|
DrawEffects(nullptr, view, RendererPass::Opaque);
|
||||||
DrawRats(nullptr, view, RendererPass::Opaque);
|
DrawRats(nullptr, view, RendererPass::Opaque);
|
||||||
DrawLocusts(nullptr, view, RendererPass::Opaque);
|
DrawLocusts(nullptr, view, RendererPass::Opaque);
|
||||||
DrawDebris(view, RendererPass::Opaque);
|
DrawDebris(nullptr, view, RendererPass::Opaque);
|
||||||
DrawSprites(nullptr, view, RendererPass::Opaque);
|
DrawSprites(nullptr, view, RendererPass::Opaque);
|
||||||
DrawFishSwarm(view, RendererPass::Opaque);
|
DrawFishSwarm(view, RendererPass::Opaque);
|
||||||
|
|
||||||
|
@ -1899,8 +1920,10 @@ namespace TEN::Renderer
|
||||||
DrawScarabs(&mirror, view, RendererPass::Opaque);
|
DrawScarabs(&mirror, view, RendererPass::Opaque);
|
||||||
DrawGunShells(&mirror, view, RendererPass::Opaque);
|
DrawGunShells(&mirror, view, RendererPass::Opaque);
|
||||||
DrawBats(&mirror, view, RendererPass::Opaque);
|
DrawBats(&mirror, view, RendererPass::Opaque);
|
||||||
|
DrawEffects(&mirror, view, RendererPass::Opaque);
|
||||||
DrawRats(&mirror, view, RendererPass::Opaque);
|
DrawRats(&mirror, view, RendererPass::Opaque);
|
||||||
DrawLocusts(&mirror, view, RendererPass::Opaque);
|
DrawLocusts(&mirror, view, RendererPass::Opaque);
|
||||||
|
DrawDebris(&mirror, view, RendererPass::Opaque);
|
||||||
DrawSprites(&mirror, view, RendererPass::Opaque);
|
DrawSprites(&mirror, view, RendererPass::Opaque);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1914,10 +1937,10 @@ namespace TEN::Renderer
|
||||||
DrawSpiders(view, RendererPass::Additive);
|
DrawSpiders(view, RendererPass::Additive);
|
||||||
DrawScarabs(nullptr, view, RendererPass::Additive);
|
DrawScarabs(nullptr, view, RendererPass::Additive);
|
||||||
DrawBats(nullptr, view, RendererPass::Additive);
|
DrawBats(nullptr, view, RendererPass::Additive);
|
||||||
DrawEffects(view, RendererPass::Additive);
|
DrawEffects(nullptr, view, RendererPass::Additive);
|
||||||
DrawRats(nullptr, view, RendererPass::Additive);
|
DrawRats(nullptr, view, RendererPass::Additive);
|
||||||
DrawLocusts(nullptr, view, RendererPass::Additive);
|
DrawLocusts(nullptr, view, RendererPass::Additive);
|
||||||
DrawDebris(view, RendererPass::Additive);
|
DrawDebris(nullptr, view, RendererPass::Additive);
|
||||||
DrawSprites(nullptr, view, RendererPass::Additive);
|
DrawSprites(nullptr, view, RendererPass::Additive);
|
||||||
DrawFishSwarm(view, RendererPass::Additive);
|
DrawFishSwarm(view, RendererPass::Additive);
|
||||||
|
|
||||||
|
@ -1932,8 +1955,10 @@ namespace TEN::Renderer
|
||||||
DrawStatics(&mirror, view, RendererPass::Additive);
|
DrawStatics(&mirror, view, RendererPass::Additive);
|
||||||
DrawScarabs(&mirror, view, RendererPass::Additive);
|
DrawScarabs(&mirror, view, RendererPass::Additive);
|
||||||
DrawBats(&mirror, view, RendererPass::Additive);
|
DrawBats(&mirror, view, RendererPass::Additive);
|
||||||
|
DrawEffects(&mirror, view, RendererPass::Additive);
|
||||||
DrawRats(&mirror, view, RendererPass::Additive);
|
DrawRats(&mirror, view, RendererPass::Additive);
|
||||||
DrawLocusts(&mirror, view, RendererPass::Additive);
|
DrawLocusts(&mirror, view, RendererPass::Additive);
|
||||||
|
DrawDebris(&mirror, view, RendererPass::Additive);
|
||||||
DrawSprites(&mirror, view, RendererPass::Additive);
|
DrawSprites(&mirror, view, RendererPass::Additive);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1946,7 +1971,7 @@ namespace TEN::Renderer
|
||||||
DrawItems(nullptr, view, RendererPass::CollectTransparentFaces);
|
DrawItems(nullptr, view, RendererPass::CollectTransparentFaces);
|
||||||
DrawStatics(nullptr, view, RendererPass::CollectTransparentFaces);
|
DrawStatics(nullptr, view, RendererPass::CollectTransparentFaces);
|
||||||
DrawBats(nullptr, view, RendererPass::CollectTransparentFaces);
|
DrawBats(nullptr, view, RendererPass::CollectTransparentFaces);
|
||||||
DrawEffects(view, RendererPass::CollectTransparentFaces);
|
DrawEffects(nullptr, view, RendererPass::CollectTransparentFaces);
|
||||||
DrawRats(nullptr, view, RendererPass::CollectTransparentFaces);
|
DrawRats(nullptr, view, RendererPass::CollectTransparentFaces);
|
||||||
DrawLocusts(nullptr, view, RendererPass::CollectTransparentFaces);
|
DrawLocusts(nullptr, view, RendererPass::CollectTransparentFaces);
|
||||||
DrawFishSwarm(view, RendererPass::CollectTransparentFaces);
|
DrawFishSwarm(view, RendererPass::CollectTransparentFaces);
|
||||||
|
@ -2421,9 +2446,7 @@ namespace TEN::Renderer
|
||||||
void Renderer::DrawAnimatingItem(RendererItem* item, RendererMirror* mirror, RenderView& view, RendererPass rendererPass)
|
void Renderer::DrawAnimatingItem(RendererItem* item, RendererMirror* mirror, RenderView& view, RendererPass rendererPass)
|
||||||
{
|
{
|
||||||
if (mirror != nullptr && item->RoomNumber != mirror->RoomNumber)
|
if (mirror != nullptr && item->RoomNumber != mirror->RoomNumber)
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
ItemInfo* nativeItem = &g_Level.Items[item->ItemNumber];
|
ItemInfo* nativeItem = &g_Level.Items[item->ItemNumber];
|
||||||
RendererRoom* room = &_rooms[item->RoomNumber];
|
RendererRoom* room = &_rooms[item->RoomNumber];
|
||||||
|
@ -2646,6 +2669,9 @@ namespace TEN::Renderer
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (mirror != nullptr)
|
||||||
|
return;
|
||||||
|
|
||||||
// Collect sorted blend modes faces ordered by room, if transparent pass
|
// Collect sorted blend modes faces ordered by room, if transparent pass
|
||||||
|
|
||||||
for (auto it = view.SortedStaticsToDraw.begin(); it != view.SortedStaticsToDraw.end(); it++)
|
for (auto it = view.SortedStaticsToDraw.begin(); it != view.SortedStaticsToDraw.end(); it++)
|
||||||
|
@ -2661,6 +2687,11 @@ namespace TEN::Renderer
|
||||||
|
|
||||||
for (int i = 0; i < statics.size(); i++)
|
for (int i = 0; i < statics.size(); i++)
|
||||||
{
|
{
|
||||||
|
if (mirror != nullptr && statics[i]->RoomNumber != mirror->RoomNumber)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
for (int j = 0; j < refMesh->Buckets.size(); j++)
|
for (int j = 0; j < refMesh->Buckets.size(); j++)
|
||||||
{
|
{
|
||||||
auto& bucket = refMesh->Buckets[j];
|
auto& bucket = refMesh->Buckets[j];
|
||||||
|
@ -3348,6 +3379,8 @@ namespace TEN::Renderer
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::DrawSortedFaces(RendererMirror* mirror, RenderView& view)
|
void Renderer::DrawSortedFaces(RendererMirror* mirror, RenderView& view)
|
||||||
|
{
|
||||||
|
if (mirror == nullptr)
|
||||||
{
|
{
|
||||||
std::sort(
|
std::sort(
|
||||||
view.TransparentObjectsToDraw.begin(),
|
view.TransparentObjectsToDraw.begin(),
|
||||||
|
@ -3357,6 +3390,7 @@ namespace TEN::Renderer
|
||||||
return (a.Distance > b.Distance);
|
return (a.Distance > b.Distance);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < view.TransparentObjectsToDraw.size(); i++)
|
for (int i = 0; i < view.TransparentObjectsToDraw.size(); i++)
|
||||||
{
|
{
|
||||||
|
@ -3366,7 +3400,7 @@ namespace TEN::Renderer
|
||||||
_sortedPolygonsVertices.clear();
|
_sortedPolygonsVertices.clear();
|
||||||
_sortedPolygonsIndices.clear();
|
_sortedPolygonsIndices.clear();
|
||||||
|
|
||||||
if (mirror != nullptr && object->ObjectType != RendererObjectType::Sprite)
|
if (mirror != nullptr && object->ObjectType == RendererObjectType::Room)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -3665,7 +3699,8 @@ namespace TEN::Renderer
|
||||||
_context->PSSetShader(_psItems.Get(), nullptr, 0);
|
_context->PSSetShader(_psItems.Get(), nullptr, 0);
|
||||||
|
|
||||||
// Bind main item properties.
|
// Bind main item properties.
|
||||||
_stItem.World = objectInfo->Item->InterpolatedWorld;
|
Matrix world = objectInfo->Item->InterpolatedWorld;
|
||||||
|
_stItem.World = world;
|
||||||
_stItem.Color = objectInfo->Item->Color;
|
_stItem.Color = objectInfo->Item->Color;
|
||||||
_stItem.AmbientLight = objectInfo->Item->AmbientLight;
|
_stItem.AmbientLight = objectInfo->Item->AmbientLight;
|
||||||
memcpy(_stItem.BonesMatrices, objectInfo->Item->InterpolatedAnimTransforms, sizeof(Matrix) * MAX_BONES);
|
memcpy(_stItem.BonesMatrices, objectInfo->Item->InterpolatedAnimTransforms, sizeof(Matrix) * MAX_BONES);
|
||||||
|
@ -3704,7 +3739,9 @@ namespace TEN::Renderer
|
||||||
_context->VSSetShader(_vsStatics.Get(), nullptr, 0);
|
_context->VSSetShader(_vsStatics.Get(), nullptr, 0);
|
||||||
_context->PSSetShader(_psStatics.Get(), nullptr, 0);
|
_context->PSSetShader(_psStatics.Get(), nullptr, 0);
|
||||||
|
|
||||||
_stStatic.World = objectInfo->Static->World;
|
Matrix world = objectInfo->Static->World;
|
||||||
|
_stStatic.World = world;
|
||||||
|
|
||||||
_stStatic.Color = objectInfo->Static->Color;
|
_stStatic.Color = objectInfo->Static->Color;
|
||||||
_stStatic.AmbientLight = objectInfo->Room->AmbientLight;
|
_stStatic.AmbientLight = objectInfo->Room->AmbientLight;
|
||||||
_stStatic.LightMode = (int)GetStaticRendererObject(objectInfo->Static->ObjectNumber).ObjectMeshes[0]->LightMode;
|
_stStatic.LightMode = (int)GetStaticRendererObject(objectInfo->Static->ObjectNumber).ObjectMeshes[0]->LightMode;
|
||||||
|
@ -3741,7 +3778,9 @@ namespace TEN::Renderer
|
||||||
_context->VSSetShader(_vsStatics.Get(), nullptr, 0);
|
_context->VSSetShader(_vsStatics.Get(), nullptr, 0);
|
||||||
_context->PSSetShader(_psStatics.Get(), nullptr, 0);
|
_context->PSSetShader(_psStatics.Get(), nullptr, 0);
|
||||||
|
|
||||||
_stStatic.World = objectInfo->World;
|
Matrix world = objectInfo->World;
|
||||||
|
_stStatic.World = world;
|
||||||
|
|
||||||
_stStatic.Color = Vector4::One;
|
_stStatic.Color = Vector4::One;
|
||||||
_stStatic.AmbientLight = objectInfo->Room->AmbientLight;
|
_stStatic.AmbientLight = objectInfo->Room->AmbientLight;
|
||||||
_stStatic.LightMode = (int)objectInfo->Mesh->LightMode;
|
_stStatic.LightMode = (int)objectInfo->Mesh->LightMode;
|
||||||
|
|
|
@ -1341,15 +1341,21 @@ namespace TEN::Renderer
|
||||||
return spriteMatrix;
|
return spriteMatrix;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::DrawEffect(RenderView& view, RendererEffect* effect, RendererPass rendererPass)
|
void Renderer::DrawEffect(RendererMirror* mirror, RenderView& view, RendererEffect* effect, RendererPass rendererPass)
|
||||||
{
|
{
|
||||||
const auto& room = _rooms[effect->RoomNumber];
|
const auto& room = _rooms[effect->RoomNumber];
|
||||||
|
|
||||||
_stStatic.World = effect->InterpolatedWorld;
|
Matrix world = effect->InterpolatedWorld;
|
||||||
|
if (mirror != nullptr)
|
||||||
|
{
|
||||||
|
world = world * mirror->ReflectionMatrix;
|
||||||
|
}
|
||||||
|
_stStatic.World = world;
|
||||||
|
|
||||||
_stStatic.Color = effect->Color;
|
_stStatic.Color = effect->Color;
|
||||||
_stStatic.AmbientLight = effect->AmbientLight;
|
_stStatic.AmbientLight = effect->AmbientLight;
|
||||||
_stStatic.LightMode = (int)LightMode::Dynamic;
|
_stStatic.LightMode = (int)LightMode::Dynamic;
|
||||||
BindStaticLights(effect->LightsToDraw, nullptr);
|
BindStaticLights(effect->LightsToDraw, mirror);
|
||||||
_cbStatic.UpdateData(_stStatic, _context.Get());
|
_cbStatic.UpdateData(_stStatic, _context.Get());
|
||||||
|
|
||||||
auto& mesh = *effect->Mesh;
|
auto& mesh = *effect->Mesh;
|
||||||
|
@ -1375,7 +1381,7 @@ namespace TEN::Renderer
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::DrawEffects(RenderView& view, RendererPass rendererPass)
|
void Renderer::DrawEffects(RendererMirror* mirror, RenderView& view, RendererPass rendererPass)
|
||||||
{
|
{
|
||||||
_context->VSSetShader(_vsStatics.Get(), nullptr, 0);
|
_context->VSSetShader(_vsStatics.Get(), nullptr, 0);
|
||||||
_context->PSSetShader(_psStatics.Get(), nullptr, 0);
|
_context->PSSetShader(_psStatics.Get(), nullptr, 0);
|
||||||
|
@ -1390,22 +1396,28 @@ namespace TEN::Renderer
|
||||||
{
|
{
|
||||||
for (auto* effectPtr : roomPtr->EffectsToDraw)
|
for (auto* effectPtr : roomPtr->EffectsToDraw)
|
||||||
{
|
{
|
||||||
|
if (mirror != nullptr && effectPtr->RoomNumber != mirror->RoomNumber)
|
||||||
|
continue;
|
||||||
|
|
||||||
const auto& room = _rooms[effectPtr->RoomNumber];
|
const auto& room = _rooms[effectPtr->RoomNumber];
|
||||||
const auto& object = Objects[effectPtr->ObjectID];
|
const auto& object = Objects[effectPtr->ObjectID];
|
||||||
|
|
||||||
if (object.drawRoutine && object.loaded)
|
if (object.drawRoutine && object.loaded)
|
||||||
DrawEffect(view, effectPtr, rendererPass);
|
DrawEffect(mirror, view, effectPtr, rendererPass);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::DrawDebris(RenderView& view, RendererPass rendererPass)
|
void Renderer::DrawDebris(RendererMirror* mirror, RenderView& view, RendererPass rendererPass)
|
||||||
{
|
{
|
||||||
bool activeDebrisExist = false;
|
bool activeDebrisExist = false;
|
||||||
for (auto& deb : DebrisFragments)
|
for (auto& deb : DebrisFragments)
|
||||||
{
|
{
|
||||||
if (deb.active)
|
if (deb.active)
|
||||||
{
|
{
|
||||||
|
if (mirror != nullptr && deb.roomNumber != mirror->RoomNumber)
|
||||||
|
continue;
|
||||||
|
|
||||||
activeDebrisExist = true;
|
activeDebrisExist = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1422,6 +1434,9 @@ namespace TEN::Renderer
|
||||||
{
|
{
|
||||||
if (deb.active)
|
if (deb.active)
|
||||||
{
|
{
|
||||||
|
if (mirror != nullptr && deb.roomNumber != mirror->RoomNumber)
|
||||||
|
continue;
|
||||||
|
|
||||||
if (!SetupBlendModeAndAlphaTest(deb.mesh.blendMode, rendererPass, 0))
|
if (!SetupBlendModeAndAlphaTest(deb.mesh.blendMode, rendererPass, 0))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -1434,7 +1449,13 @@ namespace TEN::Renderer
|
||||||
BindTexture(TextureRegister::ColorMap, &std::get<0>(_moveablesTextures[deb.mesh.tex]), SamplerStateRegister::LinearClamp);
|
BindTexture(TextureRegister::ColorMap, &std::get<0>(_moveablesTextures[deb.mesh.tex]), SamplerStateRegister::LinearClamp);
|
||||||
}
|
}
|
||||||
|
|
||||||
_stStatic.World = Matrix::Lerp(deb.PrevTransform, deb.Transform, GetInterpolationFactor());
|
Matrix world = Matrix::Lerp(deb.PrevTransform, deb.Transform, GetInterpolationFactor());
|
||||||
|
if (mirror != nullptr)
|
||||||
|
{
|
||||||
|
world = world * mirror->ReflectionMatrix;
|
||||||
|
}
|
||||||
|
_stStatic.World = world;
|
||||||
|
|
||||||
_stStatic.Color = deb.color;
|
_stStatic.Color = deb.color;
|
||||||
_stStatic.AmbientLight = _rooms[deb.roomNumber].AmbientLight;
|
_stStatic.AmbientLight = _rooms[deb.roomNumber].AmbientLight;
|
||||||
_stStatic.LightMode = (int)deb.lightMode;
|
_stStatic.LightMode = (int)deb.lightMode;
|
||||||
|
|
|
@ -281,9 +281,7 @@ void Renderer::UpdateLaraAnimations(bool force)
|
||||||
void TEN::Renderer::Renderer::DrawLara(RendererMirror* mirror, RenderView& view, RendererPass rendererPass)
|
void TEN::Renderer::Renderer::DrawLara(RendererMirror* mirror, RenderView& view, RendererPass rendererPass)
|
||||||
{
|
{
|
||||||
if (mirror != nullptr && LaraItem->RoomNumber != mirror->RoomNumber)
|
if (mirror != nullptr && LaraItem->RoomNumber != mirror->RoomNumber)
|
||||||
{
|
|
||||||
return;
|
return;
|
||||||
}
|
|
||||||
|
|
||||||
// Don't draw player if using optics.
|
// Don't draw player if using optics.
|
||||||
if (Lara.Control.Look.OpticRange != 0 || SpotcamDontDrawLara)
|
if (Lara.Control.Look.OpticRange != 0 || SpotcamDontDrawLara)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue