[IGfxWorld] More work, some possible fixes
This commit is contained in:
parent
38080b7d73
commit
0b1f28bdae
@ -18,8 +18,6 @@ namespace Assets
|
|||||||
asset->smodelInsts = reader->readArray<Game::GfxStaticModelInst>(asset->smodelCount);
|
asset->smodelInsts = reader->readArray<Game::GfxStaticModelInst>(asset->smodelCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<Game::GfxSurface*> surfs;
|
|
||||||
|
|
||||||
if (asset->surfaces)
|
if (asset->surfaces)
|
||||||
{
|
{
|
||||||
asset->surfaces = reader->readArray<Game::GfxSurface>(world->surfaceCount);
|
asset->surfaces = reader->readArray<Game::GfxSurface>(world->surfaceCount);
|
||||||
@ -27,7 +25,6 @@ namespace Assets
|
|||||||
for (unsigned int i = 0; i < world->surfaceCount; ++i)
|
for (unsigned int i = 0; i < world->surfaceCount; ++i)
|
||||||
{
|
{
|
||||||
Game::GfxSurface* surface = &asset->surfaces[i];
|
Game::GfxSurface* surface = &asset->surfaces[i];
|
||||||
surfs.push_back(&asset->surfaces[i]);
|
|
||||||
|
|
||||||
if (surface->material)
|
if (surface->material)
|
||||||
{
|
{
|
||||||
@ -434,17 +431,6 @@ namespace Assets
|
|||||||
{
|
{
|
||||||
asset->heroOnlyLights = reader.readArray<Game::GfxHeroOnlyLight>(asset->heroOnlyLightCount);
|
asset->heroOnlyLights = reader.readArray<Game::GfxHeroOnlyLight>(asset->heroOnlyLightCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
// We need to temporarily allocate a runtime buffer
|
|
||||||
// It's not accessed during the building process,
|
|
||||||
// but as we're interacting with the runtime, we have to
|
|
||||||
// allocate a valid buffer for the time we're using it.
|
|
||||||
if (asset->dpvs.surfaceMaterials)
|
|
||||||
{
|
|
||||||
asset->dpvs.surfaceMaterials = builder->getAllocator()->allocateArray<Game::GfxDrawSurf>(asset->surfaceCount);
|
|
||||||
}
|
|
||||||
|
|
||||||
Game::SortWorldSurfaces(asset);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1174,7 +1160,7 @@ namespace Assets
|
|||||||
this->saveGfxLightGrid(&asset->lightGrid, &dest->lightGrid, builder);
|
this->saveGfxLightGrid(&asset->lightGrid, &dest->lightGrid, builder);
|
||||||
|
|
||||||
if (asset->models)
|
if (asset->models)
|
||||||
{
|
{
|
||||||
AssertSize(Game::GfxBrushModel, 60);
|
AssertSize(Game::GfxBrushModel, 60);
|
||||||
SaveLogEnter("GfxBrushModel");
|
SaveLogEnter("GfxBrushModel");
|
||||||
|
|
||||||
|
@ -597,7 +597,6 @@ namespace Components
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (pass->argumentDef)
|
if (pass->argumentDef)
|
||||||
{
|
{
|
||||||
buffer->align(Utils::Stream::ALIGN_4);
|
buffer->align(Utils::Stream::ALIGN_4);
|
||||||
@ -645,6 +644,98 @@ namespace Components
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
static Game::GfxWorld* storedWorld = nullptr;
|
||||||
|
|
||||||
|
AssetHandler::OnLoad([](Game::XAssetType type, Game::XAssetHeader asset, std::string name, bool* /*restrict*/)
|
||||||
|
{
|
||||||
|
if (type == Game::XAssetType::ASSET_TYPE_GFXWORLD)
|
||||||
|
{
|
||||||
|
Game::GfxWorld* world = asset.gfxWorld;
|
||||||
|
Utils::Stream* buffer = new Utils::Stream(0x1000);
|
||||||
|
for (unsigned int i = 0; i < world->dpvs.staticSurfaceCount; ++i)
|
||||||
|
{
|
||||||
|
buffer->saveString(Utils::String::VA("%s\n", world->dpvs.surfaces[world->dpvs.sortedSurfIndex[i]].material->name));
|
||||||
|
}
|
||||||
|
Utils::IO::WriteFile("userraw/logs/matlog.txt", buffer->toBuffer());
|
||||||
|
|
||||||
|
storedWorld = asset.gfxWorld;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Dvar::OnInit([]()
|
||||||
|
{
|
||||||
|
Dvar::Register<bool>("r_drawAabbTrees", false, Game::DVAR_FLAG_USERCREATED, "draw aabb trees");
|
||||||
|
});
|
||||||
|
|
||||||
|
Renderer::OnFrame([]()
|
||||||
|
{
|
||||||
|
if (!Game::CL_IsCgameInitialized() || !Dvar::Var("r_drawAabbTrees").get<bool>()) return;
|
||||||
|
|
||||||
|
float cyan[4] = { 0.0f, 0.5f, 0.5f, 1.0f };
|
||||||
|
|
||||||
|
Game::GfxWorld** gameWorld = reinterpret_cast<Game::GfxWorld**>(0x66DEE94);
|
||||||
|
|
||||||
|
for (int i = 0; i < (*gameWorld)->dpvsPlanes.cellCount; ++i)
|
||||||
|
{
|
||||||
|
for (int j = 0; j < (*gameWorld)->aabbTreeCounts[i].aabbTreeCount; ++j)
|
||||||
|
{
|
||||||
|
Game::vec3_t v1, v2, v3, v4, v5, v6, v7, v8;
|
||||||
|
float* center = (*gameWorld)->aabbTrees[i].aabbTree[j].bounds.midPoint;
|
||||||
|
float* halfSize = (*gameWorld)->aabbTrees[i].aabbTree[j].bounds.halfSize;
|
||||||
|
v1[0] = center[0] - halfSize[0];
|
||||||
|
v1[1] = center[1] - halfSize[1];
|
||||||
|
v1[2] = center[2] - halfSize[2];
|
||||||
|
|
||||||
|
v2[0] = center[0] + halfSize[0];
|
||||||
|
v2[1] = center[1] - halfSize[1];
|
||||||
|
v2[2] = center[2] - halfSize[2];
|
||||||
|
|
||||||
|
v3[0] = center[0] - halfSize[0];
|
||||||
|
v3[1] = center[1] + halfSize[1];
|
||||||
|
v3[2] = center[2] - halfSize[2];
|
||||||
|
|
||||||
|
v4[0] = center[0] + halfSize[0];
|
||||||
|
v4[1] = center[1] + halfSize[1];
|
||||||
|
v4[2] = center[2] - halfSize[2];
|
||||||
|
|
||||||
|
v5[0] = center[0] - halfSize[0];
|
||||||
|
v5[1] = center[1] - halfSize[1];
|
||||||
|
v5[2] = center[2] + halfSize[2];
|
||||||
|
|
||||||
|
v6[0] = center[0] + halfSize[0];
|
||||||
|
v6[1] = center[1] - halfSize[1];
|
||||||
|
v6[2] = center[2] + halfSize[2];
|
||||||
|
|
||||||
|
v7[0] = center[0] - halfSize[0];
|
||||||
|
v7[1] = center[1] + halfSize[1];
|
||||||
|
v7[2] = center[2] + halfSize[2];
|
||||||
|
|
||||||
|
v8[0] = center[0] + halfSize[0];
|
||||||
|
v8[1] = center[1] + halfSize[1];
|
||||||
|
v8[2] = center[2] + halfSize[2];
|
||||||
|
|
||||||
|
// bottom
|
||||||
|
Game::R_AddDebugLine(cyan, v1, v2);
|
||||||
|
Game::R_AddDebugLine(cyan, v2, v4);
|
||||||
|
Game::R_AddDebugLine(cyan, v4, v3);
|
||||||
|
Game::R_AddDebugLine(cyan, v3, v1);
|
||||||
|
|
||||||
|
// top
|
||||||
|
Game::R_AddDebugLine(cyan, v5, v6);
|
||||||
|
Game::R_AddDebugLine(cyan, v6, v8);
|
||||||
|
Game::R_AddDebugLine(cyan, v8, v7);
|
||||||
|
Game::R_AddDebugLine(cyan, v7, v5);
|
||||||
|
|
||||||
|
// verticals
|
||||||
|
Game::R_AddDebugLine(cyan, v1, v5);
|
||||||
|
Game::R_AddDebugLine(cyan, v2, v6);
|
||||||
|
Game::R_AddDebugLine(cyan, v3, v7);
|
||||||
|
Game::R_AddDebugLine(cyan, v4, v8);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// Dvars
|
// Dvars
|
||||||
Dvar::Register<bool>("ui_streamFriendly", false, Game::DVAR_FLAG_SAVED, "Stream friendly UI");
|
Dvar::Register<bool>("ui_streamFriendly", false, Game::DVAR_FLAG_SAVED, "Stream friendly UI");
|
||||||
|
|
||||||
|
@ -754,4 +754,41 @@ namespace Game
|
|||||||
*specular1 = saveSpecular1;
|
*specular1 = saveSpecular1;
|
||||||
*specular2 = saveSpecular2;
|
*specular2 = saveSpecular2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void R_AddDebugLine(float* color, float* v1, float* v2)
|
||||||
|
{
|
||||||
|
void* debugglobals = reinterpret_cast<void*> (Utils::Hook::Get<int>(0x66DAD78) + 268772);
|
||||||
|
void* func = reinterpret_cast<void*> (0x51CEB0);
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
mov eax, v2
|
||||||
|
push eax
|
||||||
|
mov eax, v1
|
||||||
|
push eax
|
||||||
|
mov esi, debugglobals
|
||||||
|
mov edi, color
|
||||||
|
call func
|
||||||
|
add esp, 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void R_AddDebugString(float *color, float *pos, float scale, char *string)
|
||||||
|
{
|
||||||
|
void* debugglobals = reinterpret_cast<void*> (Utils::Hook::Get<int>(0x66DAD78) + 268772);
|
||||||
|
void* func = reinterpret_cast<void*> (0x51D0A0);
|
||||||
|
__asm
|
||||||
|
{
|
||||||
|
mov eax, string
|
||||||
|
push eax
|
||||||
|
mov eax, scale
|
||||||
|
push eax
|
||||||
|
mov eax, color
|
||||||
|
push eax
|
||||||
|
mov eax, pos
|
||||||
|
push eax
|
||||||
|
mov edi, debugglobals
|
||||||
|
call func
|
||||||
|
add esp, 16
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -772,4 +772,6 @@ namespace Game
|
|||||||
int CL_GetMaxXP();
|
int CL_GetMaxXP();
|
||||||
|
|
||||||
void SortWorldSurfaces(GfxWorld* world);
|
void SortWorldSurfaces(GfxWorld* world);
|
||||||
|
void R_AddDebugLine(float* color, float* v1, float* v2);
|
||||||
|
void R_AddDebugString(float *color, float *pos, float scale, char *str);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user