mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-11 07:11:54 +00:00
- fixed the BarShader texture.
Even though unlikely, this should work as a regular texture because it can be used as such. As a result of the above, true color generation needs to be done explicitly now.
This commit is contained in:
parent
1d59a53cd4
commit
494504229f
3 changed files with 36 additions and 16 deletions
|
@ -139,10 +139,9 @@ union FRenderStyle
|
|||
bool IsVisible(double alpha) const throw();
|
||||
private:
|
||||
// Code that compares an actor's render style with a legacy render
|
||||
// style value should be updated. Making these conversion operators
|
||||
// private will catch those cases.
|
||||
operator ERenderStyle() const { return STYLE_Normal; }
|
||||
operator int() const { return STYLE_Normal; }
|
||||
// style value should be updated.
|
||||
operator ERenderStyle() = delete;
|
||||
operator int() const = delete;
|
||||
};
|
||||
|
||||
extern FRenderStyle LegacyRenderStyles[STYLE_Count];
|
||||
|
|
|
@ -49,9 +49,11 @@
|
|||
#include "r_defs.h"
|
||||
#include "r_state.h"
|
||||
#include "r_data/r_translate.h"
|
||||
#include "r_data/renderstyle.h"
|
||||
#include "bitmap.h"
|
||||
|
||||
|
||||
class FBarShader : public FTexture
|
||||
class FBarShader : public FWorldTexture
|
||||
{
|
||||
public:
|
||||
FBarShader(bool vertical, bool reverse)
|
||||
|
@ -62,6 +64,7 @@ public:
|
|||
Width = vertical ? 2 : 256;
|
||||
Height = vertical ? 256 : 2;
|
||||
CalcBitSize();
|
||||
PixelsAreStatic = 2; // The alpha buffer is static, but if this gets used as a regular texture, a separate buffer needs to be made.
|
||||
|
||||
// Fill the column/row with shading values.
|
||||
// Vertical shaders have have minimum alpha at the top
|
||||
|
@ -106,24 +109,41 @@ public:
|
|||
}
|
||||
}
|
||||
}
|
||||
DummySpan[0].TopOffset = 0;
|
||||
DummySpan[0].Length = vertical ? 256 : 2;
|
||||
DummySpan[1].TopOffset = 0;
|
||||
DummySpan[1].Length = 0;
|
||||
}
|
||||
const uint8_t *GetColumn(unsigned int column, const Span **spans_out)
|
||||
|
||||
uint8_t *MakeTexture(FRenderStyle style) override
|
||||
{
|
||||
if (spans_out != NULL)
|
||||
if (style.Flags & STYLEF_RedIsAlpha)
|
||||
{
|
||||
*spans_out = DummySpan;
|
||||
return Pixels;
|
||||
}
|
||||
return Pixels + ((column & WidthMask) << HeightBits);
|
||||
else
|
||||
{
|
||||
// Since this presents itself to the game as a regular named texture
|
||||
// it can easily be used on walls and flats and should work as such,
|
||||
// even if it makes little sense.
|
||||
auto Pix = new uint8_t[512];
|
||||
for (int i = 0; i < 512; i++)
|
||||
{
|
||||
Pix[i] = GrayMap[Pixels[i]];
|
||||
}
|
||||
const uint8_t *GetPixels() { return Pixels; }
|
||||
void Unload() {}
|
||||
return Pix;
|
||||
}
|
||||
}
|
||||
|
||||
int CopyTrueColorPixels(FBitmap *bmp, int x, int y, int rotate, FCopyInfo *inf = NULL) override
|
||||
{
|
||||
bmp->CopyPixelData(x, y, Pixels, Width, Height, Height, 1, rotate, translationtables[TRANSLATION_Standard][8]->Palette, inf);
|
||||
}
|
||||
|
||||
bool UseBasePalette() override
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
uint8_t Pixels[512];
|
||||
Span DummySpan[2];
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -588,6 +588,7 @@ class FWorldTexture : public FTexture
|
|||
protected:
|
||||
uint8_t *Pixeldata[2] = { nullptr, nullptr };
|
||||
Span **Spandata[2] = { nullptr, nullptr };
|
||||
uint8_t PixelsAreStatic = 0; // can be set by subclasses which provide static pixel buffers.
|
||||
|
||||
FWorldTexture(const char *name = nullptr, int lumpnum = -1);
|
||||
~FWorldTexture();
|
||||
|
|
Loading…
Reference in a new issue