From 91bb7c0641e4fcef47f8c9231a0986d0e2413889 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 10 Dec 2018 02:56:49 +0100 Subject: [PATCH] Let FSkyboxTexture map to the last defined regular texture of the same name instead of its first face This is normally a better fallback for the software renderer. --- src/r_data/gldefs.cpp | 8 +++++--- src/textures/skyboxtexture.cpp | 26 ++++++++++++++++++++------ src/textures/skyboxtexture.h | 15 +++++++-------- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/src/r_data/gldefs.cpp b/src/r_data/gldefs.cpp index fa67b9c55..513d51094 100644 --- a/src/r_data/gldefs.cpp +++ b/src/r_data/gldefs.cpp @@ -102,7 +102,10 @@ static void ParseVavoomSkybox() sc.ScriptError("%s: Skybox definition requires 6 faces", sb->GetName().GetChars()); } sb->SetSize(); - if (!error) TexMan.AddTexture(sb); + if (!error) + { + TexMan.AddTexture(sb); + } } } @@ -964,8 +967,7 @@ class GLDefsParser sc.MustGetString(); - FSkyBox * sb = new FSkyBox; - sb->Name = sc.String; + FSkyBox * sb = new FSkyBox(sc.String); sb->Name.ToUpper(); if (sc.CheckString("fliptop")) { diff --git a/src/textures/skyboxtexture.cpp b/src/textures/skyboxtexture.cpp index 2aed8d3e7..6b5346ac2 100644 --- a/src/textures/skyboxtexture.cpp +++ b/src/textures/skyboxtexture.cpp @@ -36,8 +36,14 @@ FSkyBox::FSkyBox(const char *name) : FTexture(name) -{ - faces[0]=faces[1]=faces[2]=faces[3]=faces[4]=faces[5]=NULL; +{ + FTextureID texid = TexMan.CheckForTexture(name, ETextureType::Wall); + if (texid.isValid()) + { + previous = TexMan.GetTexture(texid); + CopySize(previous); + } + faces[0]=faces[1]=faces[2]=faces[3]=faces[4]=faces[5] = nullptr; UseType = ETextureType::Override; bSkybox = true; fliptop = false; @@ -51,8 +57,7 @@ FSkyBox::FSkyBox(const char *name) TArray FSkyBox::Get8BitPixels(bool alphatex) { - if (faces[0]) return faces[0]->Get8BitPixels(alphatex); - return FTexture::Get8BitPixels(alphatex); + return previous->Get8BitPixels(alphatex); } //----------------------------------------------------------------------------- @@ -63,7 +68,16 @@ TArray FSkyBox::Get8BitPixels(bool alphatex) FBitmap FSkyBox::GetBgraBitmap(PalEntry *p, int *trans) { - if (faces[0]) return faces[0]->GetBgraBitmap(p, trans); - return FTexture::GetBgraBitmap(p, trans); + return previous->GetBgraBitmap(p, trans); } +//----------------------------------------------------------------------------- +// +// +// +//----------------------------------------------------------------------------- + +FImageSource *FSkyBox::GetImage() const +{ + return previous->GetImage(); +} diff --git a/src/textures/skyboxtexture.h b/src/textures/skyboxtexture.h index 996681063..2288a4094 100644 --- a/src/textures/skyboxtexture.h +++ b/src/textures/skyboxtexture.h @@ -12,18 +12,22 @@ class FSkyBox : public FTexture { public: + FTexture *previous; FTexture * faces[6]; bool fliptop; - FSkyBox(const char *name = nullptr); + FSkyBox(const char *name); TArray Get8BitPixels(bool alphatex); FBitmap GetBgraBitmap(PalEntry *, int *trans) override; + FImageSource *GetImage() const override; + void SetSize() { - if (faces[0]) + if (!previous && faces[0]) previous = faces[0]; + if (previous) { - CopySize(faces[0]); + CopySize(previous); } } @@ -36,9 +40,4 @@ public: { return fliptop; } - - FImageSource *GetImage() const override - { - return faces[0] ? faces[0]->GetImage() : nullptr; - } };