Merge pull request #265 from erorcun/erorcun

Renderer fixes
This commit is contained in:
erorcun 2019-11-03 02:15:21 +03:00 committed by GitHub
commit 11d071a032
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 12 deletions

View file

@ -87,6 +87,9 @@ enum Config {
NUM_FIRES = 40, NUM_FIRES = 40,
NUMPEDROUTES = 200, NUMPEDROUTES = 200,
NUMVISIBLEENTITIES = 2000,
NUMINVISIBLEENTITIES = 150,
}; };
// We'll use this once we're ready to become independent of the game // We'll use this once we're ready to become independent of the game

View file

@ -40,9 +40,9 @@ struct EntityInfo
CLinkList<EntityInfo> &gSortedVehiclesAndPeds = *(CLinkList<EntityInfo>*)0x629AC0; CLinkList<EntityInfo> &gSortedVehiclesAndPeds = *(CLinkList<EntityInfo>*)0x629AC0;
int32 &CRenderer::ms_nNoOfVisibleEntities = *(int32*)0x940730; int32 &CRenderer::ms_nNoOfVisibleEntities = *(int32*)0x940730;
CEntity **CRenderer::ms_aVisibleEntityPtrs = (CEntity**)0x6E9920; CEntity *(&CRenderer::ms_aVisibleEntityPtrs)[NUMVISIBLEENTITIES] = *(CEntity * (*)[NUMVISIBLEENTITIES]) * (uintptr*)0x6E9920;
CEntity *(&CRenderer::ms_aInVisibleEntityPtrs)[NUMINVISIBLEENTITIES] = *(CEntity * (*)[NUMINVISIBLEENTITIES]) * (uintptr*)0x880B50;
int32 &CRenderer::ms_nNoOfInVisibleEntities = *(int32*)0x8F1B78; int32 &CRenderer::ms_nNoOfInVisibleEntities = *(int32*)0x8F1B78;
CEntity **CRenderer::ms_aInVisibleEntityPtrs = (CEntity**)0x880B50;
CVector &CRenderer::ms_vecCameraPosition = *(CVector*)0x8E2C3C; CVector &CRenderer::ms_vecCameraPosition = *(CVector*)0x8E2C3C;
CVehicle *&CRenderer::m_pFirstPersonVehicle = *(CVehicle**)0x885B80; CVehicle *&CRenderer::m_pFirstPersonVehicle = *(CVehicle**)0x885B80;
@ -73,9 +73,9 @@ CRenderer::PreRender(void)
for(i = 0; i < ms_nNoOfInVisibleEntities; i++) for(i = 0; i < ms_nNoOfInVisibleEntities; i++)
ms_aInVisibleEntityPtrs[i]->PreRender(); ms_aInVisibleEntityPtrs[i]->PreRender();
for(node = CVisibilityPlugins::m_alphaEntityList.tail.prev; for(node = CVisibilityPlugins::m_alphaEntityList.head.next;
node != &CVisibilityPlugins::m_alphaEntityList.head; node != &CVisibilityPlugins::m_alphaEntityList.tail;
node = node->prev) node = node->next)
((CEntity*)node->item.entity)->PreRender(); ((CEntity*)node->item.entity)->PreRender();
CHeli::SpecialHeliPreRender(); CHeli::SpecialHeliPreRender();
@ -983,7 +983,7 @@ CRenderer::ScanSectorList(CPtrList *lists)
dy = ms_vecCameraPosition.y - ent->GetPosition().y; dy = ms_vecCameraPosition.y - ent->GetPosition().y;
if(dx > -65.0f && dx < 65.0f && if(dx > -65.0f && dx < 65.0f &&
dy > -65.0f && dy < 65.0f && dy > -65.0f && dy < 65.0f &&
ms_nNoOfInVisibleEntities < 150) ms_nNoOfInVisibleEntities < NUMINVISIBLEENTITIES - 1)
ms_aInVisibleEntityPtrs[ms_nNoOfInVisibleEntities++] = ent; ms_aInVisibleEntityPtrs[ms_nNoOfInVisibleEntities++] = ent;
break; break;
case VIS_STREAMME: case VIS_STREAMME:
@ -1033,7 +1033,7 @@ CRenderer::ScanSectorList_Priority(CPtrList *lists)
dy = ms_vecCameraPosition.y - ent->GetPosition().y; dy = ms_vecCameraPosition.y - ent->GetPosition().y;
if(dx > -65.0f && dx < 65.0f && if(dx > -65.0f && dx < 65.0f &&
dy > -65.0f && dy < 65.0f && dy > -65.0f && dy < 65.0f &&
ms_nNoOfInVisibleEntities < 150) ms_nNoOfInVisibleEntities < NUMINVISIBLEENTITIES - 1)
ms_aInVisibleEntityPtrs[ms_nNoOfInVisibleEntities++] = ent; ms_aInVisibleEntityPtrs[ms_nNoOfInVisibleEntities++] = ent;
break; break;
case VIS_STREAMME: case VIS_STREAMME:
@ -1078,7 +1078,7 @@ CRenderer::ScanSectorList_Subway(CPtrList *lists)
dy = ms_vecCameraPosition.y - ent->GetPosition().y; dy = ms_vecCameraPosition.y - ent->GetPosition().y;
if(dx > -65.0f && dx < 65.0f && if(dx > -65.0f && dx < 65.0f &&
dy > -65.0f && dy < 65.0f && dy > -65.0f && dy < 65.0f &&
ms_nNoOfInVisibleEntities < 150) ms_nNoOfInVisibleEntities < NUMINVISIBLEENTITIES - 1)
ms_aInVisibleEntityPtrs[ms_nNoOfInVisibleEntities++] = ent; ms_aInVisibleEntityPtrs[ms_nNoOfInVisibleEntities++] = ent;
break; break;
} }
@ -1160,8 +1160,12 @@ CRenderer::IsEntityCullZoneVisible(CEntity *ent)
return IsVehicleCullZoneVisible(ent); return IsVehicleCullZoneVisible(ent);
case ENTITY_TYPE_PED: case ENTITY_TYPE_PED:
ped = (CPed*)ent; ped = (CPed*)ent;
if(ped->bInVehicle) if (ped->bInVehicle) {
return ped->m_pMyVehicle && IsVehicleCullZoneVisible(ped->m_pMyVehicle); if (ped->m_pMyVehicle)
return IsVehicleCullZoneVisible(ped->m_pMyVehicle);
else
return true;
}
return !(ped->m_pCurSurface && ped->m_pCurSurface->bZoneCulled2); return !(ped->m_pCurSurface && ped->m_pCurSurface->bZoneCulled2);
case ENTITY_TYPE_OBJECT: case ENTITY_TYPE_OBJECT:
obj = (CObject*)ent; obj = (CObject*)ent;

View file

@ -19,9 +19,9 @@ class CPtrList;
class CRenderer class CRenderer
{ {
static int32 &ms_nNoOfVisibleEntities; static int32 &ms_nNoOfVisibleEntities;
static CEntity **ms_aVisibleEntityPtrs; // [2000]; static CEntity *(&ms_aVisibleEntityPtrs)[NUMVISIBLEENTITIES];
static int32 &ms_nNoOfInVisibleEntities; static int32 &ms_nNoOfInVisibleEntities;
static CEntity **ms_aInVisibleEntityPtrs; // [150]; static CEntity *(&ms_aInVisibleEntityPtrs)[NUMINVISIBLEENTITIES];
static CVector &ms_vecCameraPosition; static CVector &ms_vecCameraPosition;
static CVehicle *&m_pFirstPersonVehicle; static CVehicle *&m_pFirstPersonVehicle;