mirror of
https://github.com/Relintai/godot-lportal.git
synced 2024-11-11 10:52:09 +01:00
SOB render list working (finally!)
This commit is contained in:
parent
15ab53250d
commit
7dd45301fa
24
lroom.cpp
24
lroom.cpp
@ -191,19 +191,19 @@ void LRoom::FinalizeVisibility(LRoomManager &manager)
|
||||
{
|
||||
//print_line("FinalizeVisibility room " + get_name() + " NumSOBs " + itos(m_SOBs.size()) + ", NumDOBs " + itos(m_DOBs.size()));
|
||||
|
||||
int last_sob = m_iFirstSOB + m_iNumSOBs;
|
||||
for (int n=m_iFirstSOB; n<last_sob; n++)
|
||||
{
|
||||
const LSob &sob = manager.m_SOBs[n];
|
||||
VisualInstance * pVI = sob.GetVI();
|
||||
// int last_sob = m_iFirstSOB + m_iNumSOBs;
|
||||
// for (int n=m_iFirstSOB; n<last_sob; n++)
|
||||
// {
|
||||
// const LSob &sob = manager.m_SOBs[n];
|
||||
// VisualInstance * pVI = sob.GetVI();
|
||||
|
||||
if (pVI)
|
||||
{
|
||||
//SoftShow(pVI, sob.m_bSOBVisible);
|
||||
bool bVisible = manager.m_BF_visible_SOBs.GetBit(n) != 0;
|
||||
SoftShow(pVI, bVisible);
|
||||
}
|
||||
}
|
||||
// if (pVI)
|
||||
// {
|
||||
// //SoftShow(pVI, sob.m_bSOBVisible);
|
||||
// bool bVisible = manager.m_BF_visible_SOBs.GetBit(n) != 0;
|
||||
// SoftShow(pVI, bVisible);
|
||||
// }
|
||||
// }
|
||||
|
||||
for (int n=0; n<m_DOBs.size(); n++)
|
||||
{
|
||||
|
2
lroom.h
2
lroom.h
@ -124,12 +124,12 @@ public:
|
||||
Geometry::MeshData m_Bound_MeshData;
|
||||
|
||||
bool IsVisible() const {return m_bVisible;}
|
||||
private:
|
||||
// instead of directly showing and hiding objects we now set their layer,
|
||||
// and the camera will hide them with a cull mask. This is so that
|
||||
// objects can still be rendered outside immediate view for casting shadows.
|
||||
static void SoftShow(VisualInstance * pVI, bool bShow);
|
||||
|
||||
private:
|
||||
// whether lportal thinks this room is currently visible
|
||||
// this allows us to show / hide dobs as they cross room boundaries
|
||||
bool m_bVisible;
|
||||
|
@ -700,6 +700,8 @@ void LRoomManager::FrameUpdate()
|
||||
|
||||
FrameUpdate_AddShadowCasters();
|
||||
|
||||
FrameUpdate_FinalizeVisibility_SoftShow();
|
||||
|
||||
// swap the current and previous visible room list
|
||||
LVector<int> * pTemp = m_pCurr_VisibleRoomList;
|
||||
m_pCurr_VisibleRoomList = m_pPrev_VisibleRoomList;
|
||||
@ -754,6 +756,28 @@ void LRoomManager::FrameUpdate_AddShadowCasters()
|
||||
|
||||
}
|
||||
|
||||
void LRoomManager::FrameUpdate_FinalizeVisibility_SoftShow()
|
||||
{
|
||||
// apply the appropriate soft show for each sob in the render list
|
||||
int nSOBs = m_RenderList_SOBs.size();
|
||||
|
||||
for (int n=0; n<nSOBs; n++)
|
||||
{
|
||||
int ID = m_RenderList_SOBs[n];
|
||||
const LSob &sob = m_SOBs[ID];
|
||||
|
||||
VisualInstance * pVI = sob.GetVI();
|
||||
|
||||
if (pVI)
|
||||
{
|
||||
//SoftShow(pVI, sob.m_bSOBVisible);
|
||||
bool bVisible = m_BF_visible_SOBs.GetBit(ID) != 0;
|
||||
LRoom::SoftShow(pVI, bVisible);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void LRoomManager::FrameUpdate_FinalizeVisibility_WithinRooms()
|
||||
{
|
||||
// and hide all the dobs that are in visible rooms that haven't been made visible
|
||||
|
@ -99,6 +99,7 @@ private:
|
||||
void FrameUpdate_FinalizeRooms();
|
||||
void FrameUpdate_AddShadowCasters();
|
||||
void FrameUpdate_FinalizeVisibility_WithinRooms();
|
||||
void FrameUpdate_FinalizeVisibility_SoftShow();
|
||||
|
||||
// debugging emulate view frustum
|
||||
void FrameUpdate_FrustumOnly();
|
||||
|
Loading…
Reference in New Issue
Block a user