Made SWPaletteTexture an ImageSource and let it be managed by the texture manager.

This is a lot easier to manage because the palette is just static data that can easily mimic an image.
This commit is contained in:
Christoph Oelckers 2018-12-10 02:43:37 +01:00
parent 4cd60fbe99
commit b32aa60760
2 changed files with 14 additions and 11 deletions

View file

@ -33,6 +33,7 @@
#include "d_player.h"
#include "textures/bitmap.h"
#include "swrenderer/scene/r_light.h"
#include "image.h"
// [RH] Base blending values (for e.g. underwater)
int BaseBlendR, BaseBlendG, BaseBlendB;
@ -41,27 +42,23 @@ void InitSoftwareSky();
class FSWPaletteTexture : public FTexture
class FSWPaletteTexture : public FImageSource
{
public:
FSWPaletteTexture()
{
Width = 256;
Height = 1;
UseType = ETextureType::MiscPatch;
}
FBitmap GetBgraBitmap(PalEntry *, int *trans) override
int CopyPixels(FBitmap *bmp, int conversion) override
{
FBitmap bmp;
bmp.Create(256, 1);
PalEntry *pe = (PalEntry*)bmp.GetPixels();
PalEntry *pe = (PalEntry*)bmp->GetPixels();
for (int i = 0; i < 256; i++)
{
pe[i] = GPalette.BaseColors[i].d | 0xff000000;
}
if (trans) *trans = 0;
return bmp;
return 0;
}
};
@ -74,7 +71,13 @@ public:
SWSceneDrawer::SWSceneDrawer()
{
PaletteTexture.reset(new FSWPaletteTexture);
auto texid = TexMan.CheckForTexture("@@palette@@", ETextureType::Any);
if (!texid.Exists())
{
auto tex = new FImageTexture(new FSWPaletteTexture, "@@palette@@");
texid = TexMan.AddTexture(tex);
}
PaletteTexture = TexMan.GetTexture(texid);
}
SWSceneDrawer::~SWSceneDrawer()
@ -98,7 +101,7 @@ sector_t *SWSceneDrawer::RenderView(player_t *player)
fbtex.reset(new FWrapperTexture(screen->GetWidth(), screen->GetHeight(), V_IsTrueColor()));
fbtex->GetSystemTexture(0)->AllocateBuffer(screen->GetWidth(), screen->GetHeight(), V_IsTrueColor() ? 4 : 1);
auto mat = FMaterial::ValidateTexture(fbtex.get(), false);
mat->AddTextureLayer(PaletteTexture.get());
mat->AddTextureLayer(PaletteTexture);
Canvas.reset();
Canvas.reset(new DCanvas(screen->GetWidth(), screen->GetHeight(), V_IsTrueColor()));

View file

@ -12,7 +12,7 @@ class FWrapperTexture;
class SWSceneDrawer
{
std::unique_ptr<FTexture> PaletteTexture;
FTexture *PaletteTexture;
std::unique_ptr<FWrapperTexture> FBTexture[2];
int FBTextureIndex = 0;
bool FBIsTruecolor = false;