From be2ed695c8c865dca1cde5b3c63985df9d66cabe Mon Sep 17 00:00:00 2001 From: Magnus Norddahl Date: Sun, 1 Oct 2023 15:17:05 +0200 Subject: [PATCH] More SetSideTextureUVs adjustments --- src/rendering/hwrenderer/doom_levelmesh.cpp | 16 +++++++++------- src/rendering/hwrenderer/doom_levelmesh.h | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/rendering/hwrenderer/doom_levelmesh.cpp b/src/rendering/hwrenderer/doom_levelmesh.cpp index 2dece6509..44fd060c4 100644 --- a/src/rendering/hwrenderer/doom_levelmesh.cpp +++ b/src/rendering/hwrenderer/doom_levelmesh.cpp @@ -1010,15 +1010,13 @@ void DoomLevelSubmesh::CreateSideSurfaces(FLevelLocals &doomMap, side_t *side) } } -void DoomLevelSubmesh::SetSideTextureUVs(DoomLevelMeshSurface& surface, side_t* side, side_t::ETexpart texpart, float tlZ, float blZ, float trZ, float brZ) +void DoomLevelSubmesh::SetSideTextureUVs(DoomLevelMeshSurface& surface, side_t* side, side_t::ETexpart texpart, float v1TopZ, float v1BottomZ, float v2TopZ, float v2BottomZ) { MeshVertexUVs.Reserve(4); FVector2* uvs = &MeshVertexUVs[surface.startVertIndex]; if (surface.texture.isValid()) { - const float sideHeight = std::max(tlZ - blZ, trZ - brZ); - const auto gtxt = TexMan.GetGameTexture(surface.texture); FTexCoordInfo tci; @@ -1032,10 +1030,14 @@ void DoomLevelSubmesh::SetSideTextureUVs(DoomLevelMeshSurface& surface, side_t* uvs[2].X = startU; uvs[3].X = endU; - uvs[0].Y = tci.FloatToTexV((float)(side->textures[texpart].yOffset)); - uvs[1].Y = tci.FloatToTexV((float)(side->textures[texpart].yOffset)); - uvs[2].Y = tci.FloatToTexV((float)(sideHeight + side->textures[texpart].yOffset)); - uvs[3].Y = tci.FloatToTexV((float)(sideHeight + side->textures[texpart].yOffset)); + // To do: the ceiling version is apparently used in some situation related to 3d floors (rover->top.isceiling) + //float offset = tci.RowOffset((float)side->GetTextureYOffset(texpart)) + tci.RowOffset((float)side->GetTextureYOffset(texpart)) + (float)side->sector->GetPlaneTexZ(sector_t::ceiling); + float offset = tci.RowOffset((float)side->GetTextureYOffset(texpart)) + tci.RowOffset((float)side->GetTextureYOffset(texpart)) + (float)side->sector->GetPlaneTexZ(sector_t::floor); + + uvs[0].Y = tci.FloatToTexV(offset - v1BottomZ); + uvs[1].Y = tci.FloatToTexV(offset - v2BottomZ); + uvs[2].Y = tci.FloatToTexV(offset - v1TopZ); + uvs[3].Y = tci.FloatToTexV(offset - v2TopZ); } else { diff --git a/src/rendering/hwrenderer/doom_levelmesh.h b/src/rendering/hwrenderer/doom_levelmesh.h index 5ef3bba77..7fb89c722 100644 --- a/src/rendering/hwrenderer/doom_levelmesh.h +++ b/src/rendering/hwrenderer/doom_levelmesh.h @@ -64,7 +64,7 @@ private: void CreateCeilingSurface(FLevelLocals& doomMap, subsector_t* sub, sector_t* sector, sector_t* controlSector, int typeIndex); void CreateFloorSurface(FLevelLocals& doomMap, subsector_t* sub, sector_t* sector, sector_t* controlSector, int typeIndex); void CreateSideSurfaces(FLevelLocals& doomMap, side_t* side); - void SetSideTextureUVs(DoomLevelMeshSurface& surface, side_t* side, side_t::ETexpart texpart, float tlZ, float blZ, float trZ, float brZ); + void SetSideTextureUVs(DoomLevelMeshSurface& surface, side_t* side, side_t::ETexpart texpart, float v1TopZ, float v1BottomZ, float v2TopZ, float v2BottomZ); void SetSubsectorLightmap(DoomLevelMeshSurface* surface); void SetSideLightmap(DoomLevelMeshSurface* surface);