mirror of
https://github.com/mrxenginner/reVC.git
synced 2026-10-10 20:03:05 +08:00
CRenderer
This commit is contained in:
@@ -1088,7 +1088,7 @@ CMenuManager::Draw()
|
||||
rightText = TheText.Get(gbShowCollisionPolys ? "FEM_ON" : "FEM_OFF");
|
||||
break;
|
||||
case MENUACTION_SHOWCULL:
|
||||
rightText = TheText.Get(gbShowCullZoneDebugStuff ? "FEM_ON" : "FEM_OFF");
|
||||
// REMOVED(MIAMI)
|
||||
break;
|
||||
case MENUACTION_SHOWHEADBOB:
|
||||
rightText = TheText.Get(TheCamera.m_bHeadBob ? "FEM_ON" : "FEM_OFF");
|
||||
@@ -4464,7 +4464,7 @@ CMenuManager::ProcessButtonPresses(void)
|
||||
CGame::ReloadIPLs();
|
||||
break;
|
||||
case MENUACTION_SHOWCULL:
|
||||
gbShowCullZoneDebugStuff = !gbShowCullZoneDebugStuff;
|
||||
// REMOVED(MIAMI)
|
||||
break;
|
||||
case MENUACTION_MEMCARDSAVECONFIRM:
|
||||
return;
|
||||
|
||||
@@ -234,7 +234,7 @@ CStreaming::Init(void)
|
||||
}
|
||||
}
|
||||
#else
|
||||
CStreaming::Init();
|
||||
CStreaming::Init2();
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -725,7 +725,7 @@ CStreaming::RequestBigBuildings(eLevelName level, const CVector &pos)
|
||||
b = CPools::GetBuildingPool()->GetSlot(i);
|
||||
if(b && b->bIsBIGBuilding && b->m_level == level)
|
||||
if(b->bStreamBIGBuilding){
|
||||
if(CRenderer::ShouldModelBeStreamed(b))
|
||||
if(CRenderer::ShouldModelBeStreamed(b, pos))
|
||||
RequestModel(b->GetModelIndex(), 0);
|
||||
}else
|
||||
RequestModel(b->GetModelIndex(), BIGBUILDINGFLAGS);
|
||||
@@ -745,7 +745,7 @@ CStreaming::InstanceBigBuildings(eLevelName level, const CVector &pos)
|
||||
b = CPools::GetBuildingPool()->GetSlot(i);
|
||||
if(b && b->bIsBIGBuilding && b->m_level == level &&
|
||||
b->bStreamBIGBuilding && b->m_rwObject == nil)
|
||||
if(CRenderer::ShouldModelBeStreamed(b))
|
||||
if(CRenderer::ShouldModelBeStreamed(b, pos))
|
||||
b->CreateRwObject();
|
||||
}
|
||||
}
|
||||
|
||||
+7
-4
@@ -778,14 +778,17 @@ RenderScene(void)
|
||||
DoRWRenderHorizon();
|
||||
CRenderer::RenderRoads();
|
||||
CCoronas::RenderReflections();
|
||||
RwRenderStateSet(rwRENDERSTATEFOGENABLE, (void*)TRUE);
|
||||
CRenderer::RenderEverythingBarRoads();
|
||||
CRenderer::RenderBoats();
|
||||
DefinedState();
|
||||
RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE);
|
||||
CWaterLevel::RenderWater();
|
||||
CRenderer::RenderBoats();
|
||||
CRenderer::RenderFadingInUnderwaterEntities();
|
||||
RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE);
|
||||
// CWaterLevel::RenderTransparentWater();
|
||||
CRenderer::RenderFadingInEntities();
|
||||
CRenderer::RenderVehiclesButNotBoats();
|
||||
RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE);
|
||||
CWeather::RenderRainStreaks();
|
||||
// CCoronas::RenderSunReflection
|
||||
}
|
||||
|
||||
void
|
||||
|
||||
@@ -329,6 +329,7 @@ DebugMenuPopulate(void)
|
||||
DebugMenuAddCmd("Spawn", "Spawn Predator", [](){ SpawnCar(MI_PREDATOR); });
|
||||
|
||||
DebugMenuAddVarBool8("Render", "Draw hud", &CHud::m_Wants_To_Draw_Hud, nil);
|
||||
DebugMenuAddVarBool8("Render", "Backface Culling", &gBackfaceCulling, nil);
|
||||
#ifdef LIBRW
|
||||
DebugMenuAddVarBool8("Render", "PS2 Alpha test Emu", &gPS2alphaTest, nil);
|
||||
#endif
|
||||
|
||||
+16
-10
@@ -53,16 +53,16 @@ CEntity::CEntity(void)
|
||||
bHasBlip = false;
|
||||
bIsBIGBuilding = false;
|
||||
bStreamBIGBuilding = false;
|
||||
bRenderDamaged = false;
|
||||
|
||||
bRenderDamaged = false;
|
||||
bBulletProof = false;
|
||||
bFireProof = false;
|
||||
bCollisionProof = false;
|
||||
bMeleeProof = false;
|
||||
bOnlyDamagedByPlayer = false;
|
||||
bStreamingDontDelete = false;
|
||||
|
||||
bRemoveFromWorld = false;
|
||||
|
||||
bHasHitWall = false;
|
||||
bImBeingRendered = false;
|
||||
bTouchingWater = false;
|
||||
@@ -70,11 +70,15 @@ CEntity::CEntity(void)
|
||||
bDrawLast = false;
|
||||
bNoBrightHeadLights = false;
|
||||
bDoNotRender = false;
|
||||
|
||||
bDistanceFade = false;
|
||||
m_flagE2 = false;
|
||||
|
||||
m_flagE1 = false;
|
||||
m_flagE2 = false;
|
||||
bOffscreen = false;
|
||||
bIsStaticWaitingForCollision = false;
|
||||
m_flagE10 = false;
|
||||
m_flagE20 = false;
|
||||
m_flagE40 = false;
|
||||
|
||||
m_scanCode = 0;
|
||||
m_modelIndex = -1;
|
||||
@@ -924,6 +928,7 @@ CEntity::AddSteamsFromGround(CPtrList& list)
|
||||
}
|
||||
|
||||
#ifdef COMPATIBLE_SAVES
|
||||
// TODO(MIAMI)
|
||||
void
|
||||
CEntity::SaveEntityFlags(uint8*& buf)
|
||||
{
|
||||
@@ -955,26 +960,27 @@ CEntity::SaveEntityFlags(uint8*& buf)
|
||||
if (bMeleeProof) tmp |= BIT(27);
|
||||
if (bOnlyDamagedByPlayer) tmp |= BIT(28);
|
||||
if (bStreamingDontDelete) tmp |= BIT(29);
|
||||
if (bRemoveFromWorld) tmp |= BIT(0);
|
||||
if (bHasHitWall) tmp |= BIT(1);
|
||||
|
||||
WriteSaveBuf<uint32>(buf, tmp);
|
||||
|
||||
tmp = 0;
|
||||
|
||||
if (bRemoveFromWorld) tmp |= BIT(0);
|
||||
if (bHasHitWall) tmp |= BIT(1);
|
||||
if (bImBeingRendered) tmp |= BIT(2);
|
||||
if (bTouchingWater) tmp |= BIT(3);
|
||||
if (bIsSubway) tmp |= BIT(4);
|
||||
if (bDrawLast) tmp |= BIT(5);
|
||||
if (bNoBrightHeadLights) tmp |= BIT(6);
|
||||
if (bDoNotRender) tmp |= BIT(7);
|
||||
|
||||
if (bDistanceFade) tmp |= BIT(8);
|
||||
|
||||
if (m_flagE2) tmp |= BIT(9);
|
||||
|
||||
WriteSaveBuf<uint32>(buf, tmp);
|
||||
}
|
||||
|
||||
// TODO(MIAMI)
|
||||
void
|
||||
CEntity::LoadEntityFlags(uint8*& buf)
|
||||
{
|
||||
@@ -1006,19 +1012,19 @@ CEntity::LoadEntityFlags(uint8*& buf)
|
||||
bMeleeProof = !!(tmp & BIT(27));
|
||||
bOnlyDamagedByPlayer = !!(tmp & BIT(28));
|
||||
bStreamingDontDelete = !!(tmp & BIT(29));
|
||||
bRemoveFromWorld = !!(tmp & BIT(0));
|
||||
bHasHitWall = !!(tmp & BIT(1));
|
||||
|
||||
tmp = ReadSaveBuf<uint32>(buf);
|
||||
|
||||
bRemoveFromWorld = !!(tmp & BIT(0));
|
||||
bHasHitWall = !!(tmp & BIT(1));
|
||||
bImBeingRendered = !!(tmp & BIT(2));
|
||||
bTouchingWater = !!(tmp & BIT(3));
|
||||
bIsSubway = !!(tmp & BIT(4));
|
||||
bDrawLast = !!(tmp & BIT(5));
|
||||
bNoBrightHeadLights = !!(tmp & BIT(6));
|
||||
bDoNotRender = !!(tmp & BIT(7));
|
||||
|
||||
bDistanceFade = !!(tmp & BIT(8));
|
||||
|
||||
m_flagE2 = !!(tmp & BIT(9));
|
||||
}
|
||||
|
||||
|
||||
@@ -82,9 +82,13 @@ public:
|
||||
uint32 bDistanceFade : 1; // Fade entity because it is far away
|
||||
|
||||
// flagsE
|
||||
uint32 m_flagE1 : 1;
|
||||
uint32 m_flagE2 : 1;
|
||||
// TODO(MIAMI)
|
||||
uint32 bOffscreen : 1; // offscreen flag. This can only be trusted when it is set to true
|
||||
uint32 bIsStaticWaitingForCollision : 1; // this is used by script created entities - they are static until the collision is loaded below them
|
||||
uint32 m_flagE10 : 1;
|
||||
uint32 m_flagE20 : 1;
|
||||
uint32 m_flagE40 : 1;
|
||||
|
||||
uint16 m_scanCode;
|
||||
uint16 m_randomSeed;
|
||||
@@ -151,6 +155,8 @@ public:
|
||||
bool GetIsOnScreenComplex(void);
|
||||
bool IsVisible(void) { return m_rwObject && bIsVisible && GetIsOnScreen(); }
|
||||
bool IsVisibleComplex(void) { return m_rwObject && bIsVisible && GetIsOnScreenComplex(); }
|
||||
// TODO(MIAMI):
|
||||
bool IsEntityOccluded(void) { return false; }
|
||||
int16 GetModelIndex(void) const { return m_modelIndex; }
|
||||
void UpdateRwFrame(void);
|
||||
void SetupBigBuilding(void);
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
#include "common.h"
|
||||
|
||||
#include "Occlusion.h"
|
||||
|
||||
void
|
||||
COcclusion::ProcessBeforeRendering(void)
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
class COcclusion
|
||||
{
|
||||
public:
|
||||
static void ProcessBeforeRendering(void);
|
||||
};
|
||||
+152
-78
File diff suppressed because it is too large
Load Diff
@@ -4,7 +4,6 @@ class CEntity;
|
||||
|
||||
extern bool gbShowCollisionPolys;
|
||||
extern bool gbShowCollisionLines;
|
||||
extern bool gbShowCullZoneDebugStuff;
|
||||
extern bool gbBigWhiteDebugLightSwitchedOn;
|
||||
|
||||
extern bool gbDontRenderBuildings;
|
||||
@@ -36,8 +35,8 @@ public:
|
||||
|
||||
static void RenderRoads(void);
|
||||
static void RenderFadingInEntities(void);
|
||||
static void RenderFadingInUnderwaterEntities(void);
|
||||
static void RenderEverythingBarRoads(void);
|
||||
static void RenderVehiclesButNotBoats(void);
|
||||
static void RenderBoats(void);
|
||||
static void RenderOneRoad(CEntity *);
|
||||
static void RenderOneNonRoad(CEntity *);
|
||||
@@ -61,7 +60,7 @@ public:
|
||||
static void SortBIGBuildings(void);
|
||||
static void SortBIGBuildingsForSectorList(CPtrList *list);
|
||||
|
||||
static bool ShouldModelBeStreamed(CEntity *ent);
|
||||
static bool ShouldModelBeStreamed(CEntity *ent, const CVector &campos);
|
||||
|
||||
static void RemoveVehiclePedLights(CEntity *ent, bool reset);
|
||||
};
|
||||
|
||||
@@ -12,6 +12,7 @@ RtCharset *debugCharset;
|
||||
#endif
|
||||
|
||||
bool gPS2alphaTest = 1;
|
||||
bool gBackfaceCulling;
|
||||
|
||||
#ifndef FINAL
|
||||
static bool charsetOpen;
|
||||
@@ -116,6 +117,15 @@ DefinedState(void)
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
SetCullMode(uint32 mode)
|
||||
{
|
||||
if(gBackfaceCulling)
|
||||
RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)mode);
|
||||
else
|
||||
RwRenderStateSet(rwRENDERSTATECULLMODE, (void*)rwCULLMODECULLNONE);
|
||||
}
|
||||
|
||||
RwFrame*
|
||||
GetFirstFrameCallback(RwFrame *child, void *data)
|
||||
{
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
extern bool gPS2alphaTest;
|
||||
extern bool gBackfaceCulling;
|
||||
|
||||
void *RwMallocAlign(RwUInt32 size, RwUInt32 align);
|
||||
void RwFreeAlign(void *mem);
|
||||
@@ -11,6 +12,7 @@ void DestroyDebugFont();
|
||||
void ObrsPrintfString(const char *str, short x, short y);
|
||||
void FlushObrsPrintfs();
|
||||
void DefinedState(void);
|
||||
void SetCullMode(uint32 mode);
|
||||
RwFrame *GetFirstChild(RwFrame *frame);
|
||||
RwObject *GetFirstObject(RwFrame *frame);
|
||||
RpAtomic *GetFirstAtomic(RpClump *clump);
|
||||
|
||||
@@ -111,6 +111,11 @@ CVisibilityPlugins::SetRenderWareCamera(RwCamera *camera)
|
||||
ms_pedFadeDist = sq(70.0f * TheCamera.LODDistMultiplier);
|
||||
}
|
||||
|
||||
void
|
||||
CVisibilityPlugins::SetupVehicleVariables(RpClump *vehicle)
|
||||
{
|
||||
}
|
||||
|
||||
RpMaterial*
|
||||
SetAlphaCB(RpMaterial *material, void *data)
|
||||
{
|
||||
@@ -164,6 +169,11 @@ CVisibilityPlugins::RenderFadingEntities(void)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CVisibilityPlugins::RenderFadingUnderwaterEntities(void)
|
||||
{
|
||||
}
|
||||
|
||||
RpAtomic*
|
||||
CVisibilityPlugins::RenderWheelAtomicCB(RpAtomic *atomic)
|
||||
{
|
||||
@@ -237,6 +247,7 @@ CVisibilityPlugins::RenderWeaponCB(RpAtomic *atomic)
|
||||
return atomic;
|
||||
}
|
||||
|
||||
//--MIAMI: done
|
||||
RpAtomic*
|
||||
CVisibilityPlugins::RenderFadingAtomic(RpAtomic *atomic, float camdist)
|
||||
{
|
||||
@@ -247,29 +258,30 @@ CVisibilityPlugins::RenderFadingAtomic(RpAtomic *atomic, float camdist)
|
||||
|
||||
mi = GetAtomicModelInfo(atomic);
|
||||
lodatm = mi->GetAtomicFromDistance(camdist - FADE_DISTANCE);
|
||||
if(mi->m_additive){
|
||||
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDONE);
|
||||
if(mi->m_additive)
|
||||
AtomicDefaultRenderCallBack(atomic);
|
||||
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
|
||||
}else{
|
||||
fadefactor = (mi->GetLargestLodDistance() - (camdist - FADE_DISTANCE))/FADE_DISTANCE;
|
||||
if(fadefactor > 1.0f)
|
||||
fadefactor = 1.0f;
|
||||
alpha = mi->m_alpha * fadefactor;
|
||||
if(alpha == 255)
|
||||
AtomicDefaultRenderCallBack(atomic);
|
||||
else{
|
||||
RpGeometry *geo = RpAtomicGetGeometry(lodatm);
|
||||
uint32 flags = RpGeometryGetFlags(geo);
|
||||
RpGeometrySetFlags(geo, flags | rpGEOMETRYMODULATEMATERIALCOLOR);
|
||||
RpGeometryForAllMaterials(geo, SetAlphaCB, (void*)alpha);
|
||||
if(geo != RpAtomicGetGeometry(atomic))
|
||||
RpAtomicSetGeometry(atomic, geo, rpATOMICSAMEBOUNDINGSPHERE); // originally 5 (mistake?)
|
||||
AtomicDefaultRenderCallBack(atomic);
|
||||
RpGeometryForAllMaterials(geo, SetAlphaCB, (void*)255);
|
||||
RpGeometrySetFlags(geo, flags);
|
||||
}
|
||||
|
||||
fadefactor = (mi->GetLargestLodDistance() - (camdist - FADE_DISTANCE))/FADE_DISTANCE;
|
||||
if(fadefactor > 1.0f)
|
||||
fadefactor = 1.0f;
|
||||
alpha = mi->m_alpha * fadefactor;
|
||||
if(alpha == 255)
|
||||
AtomicDefaultRenderCallBack(atomic);
|
||||
else{
|
||||
RpGeometry *geo = RpAtomicGetGeometry(lodatm);
|
||||
uint32 flags = RpGeometryGetFlags(geo);
|
||||
RpGeometrySetFlags(geo, flags | rpGEOMETRYMODULATEMATERIALCOLOR);
|
||||
RpGeometryForAllMaterials(geo, SetAlphaCB, (void*)alpha);
|
||||
if(geo != RpAtomicGetGeometry(atomic))
|
||||
RpAtomicSetGeometry(atomic, geo, rpATOMICSAMEBOUNDINGSPHERE); // originally 5 (mistake?)
|
||||
AtomicDefaultRenderCallBack(atomic);
|
||||
RpGeometryForAllMaterials(geo, SetAlphaCB, (void*)255);
|
||||
RpGeometrySetFlags(geo, flags);
|
||||
}
|
||||
|
||||
if(mi->m_additive)
|
||||
RwRenderStateSet(rwRENDERSTATEDESTBLEND, (void*)rwBLENDINVSRCALPHA);
|
||||
|
||||
return atomic;
|
||||
}
|
||||
|
||||
|
||||
@@ -42,6 +42,7 @@ public:
|
||||
static bool InsertAtomicIntoSortedList(RpAtomic *a, float dist);
|
||||
|
||||
static void SetRenderWareCamera(RwCamera *camera);
|
||||
static void SetupVehicleVariables(RpClump *vehicle);
|
||||
|
||||
static RpAtomic *RenderWheelAtomicCB(RpAtomic *atomic);
|
||||
static RpAtomic *RenderObjNormalAtomic(RpAtomic *atomic);
|
||||
@@ -70,11 +71,11 @@ public:
|
||||
|
||||
static void RenderAlphaAtomics(void);
|
||||
static void RenderFadingEntities(void);
|
||||
static void RenderFadingUnderwaterEntities(void);
|
||||
|
||||
// All actually unused
|
||||
static bool DefaultVisibilityCB(RpClump *clump);
|
||||
static bool FrustumSphereCB(RpClump *clump);
|
||||
static bool MloVisibilityCB(RpClump *clump);
|
||||
static bool VehicleVisibilityCB(RpClump *clump);
|
||||
static bool VehicleVisibilityCB_BigVehicle(RpClump *clump);
|
||||
|
||||
|
||||
@@ -141,6 +141,7 @@ enum
|
||||
HANDLING_FAT_REARW = 0x1000000,
|
||||
HANDLING_NARROW_FRONTW = 0x2000000,
|
||||
HANDLING_GOOD_INSAND = 0x4000000,
|
||||
HANDLING_UNKNOWN = 0x8000000, // something for helis and planes
|
||||
};
|
||||
|
||||
struct tHandlingData
|
||||
|
||||
Reference in New Issue
Block a user