raze/source/core/palette.h

210 lines
4.3 KiB
C
Raw Normal View History

// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman
// Ken Silverman's official web site: "http://www.advsys.net/ken"
// See the included license file "BUILDLIC.TXT" for license info.
//
// This file has been modified from Ken Silverman's original release
// by Jonathon Fowler (jf@jonof.id.au)
// by the EDuke32 team (development@voidpoint.com)
#pragma once
#ifndef palette_h_
#define palette_h_
#include "renderstyle.h"
2020-04-11 21:54:33 +00:00
#include "filesystem.h"
#include "zstring.h"
#include "palentry.h"
2023-08-19 16:08:27 +00:00
#include "basics.h"
2021-10-30 08:51:03 +00:00
enum
{
MAXBASEPALS = 256,
MAXPALOOKUPS = 256,
MAXBLENDTABS = 256,
RESERVEDPALS = 4, // don't forget to increment this when adding reserved pals
DETAILPAL = (MAXPALOOKUPS - 1),
GLOWPAL = (MAXPALOOKUPS - 2),
SPECULARPAL = (MAXPALOOKUPS - 3),
NORMALPAL = (MAXPALOOKUPS - 4),
BRIGHTPAL = (MAXPALOOKUPS),
MAXREALPAL = MAXPALOOKUPS - RESERVEDPALS
2021-04-21 16:34:34 +00:00
};
// fixme: should use the flags from the PRSFlags enum directly
enum
{
TINTF_GRAYSCALE = 1,
TINTF_INVERT = 2,
TINTF_COLORIZE = 4,
TINTF_USEONART = 8,
TINTF_APPLYOVERPALSWAP = 16,
TINTF_APPLYOVERALTPAL = 32,
TINTF_BLEND_MULTIPLY = 0 << 6,
TINTF_BLEND_SCREEN = 1 << 6,
TINTF_BLEND_OVERLAY = 2 << 6,
TINTF_BLEND_HARDLIGHT = 3 << 6,
TINTF_BLENDMASK = 64 | 128,
TINTF_ALWAYSUSEART = 256,
TINTF_PRECOMPUTED = TINTF_COLORIZE | TINTF_BLENDMASK,
TINTF_ENABLE = 32768
};
2020-05-27 20:19:02 +00:00
struct LookupTable
{
2020-05-27 20:19:02 +00:00
FString Shades;
PalEntry FadeColor = 0;
float ShadeFactor = 1.f;
2020-05-27 20:19:02 +00:00
float Visibility = 0;
bool hasBrightmap = false;
bool noFloorPal = false;
int tintFlags = 0;
PalEntry tintColor = 0xffffff;
PalEntry tintShade = 0;
2020-05-27 20:19:02 +00:00
};
2020-05-27 20:19:02 +00:00
struct LookupTableInfo
{
2020-05-27 20:19:02 +00:00
LookupTable tables[MAXPALOOKUPS];
const uint8_t* getTable(int num)
{
if (tables[num].Shades.Len() == 0) num = 0;
return (const uint8_t*)tables[num].Shades.GetChars();
}
bool checkTable(int num)
{
return tables[num].Shades.IsNotEmpty();
}
void copyTable(int dest, int src)
{
tables[dest].Shades = tables[src].Shades;
}
void clearTable(int dest)
{
tables[dest].Shades = "";
}
void makeTable(int palnum, const uint8_t* remapbuf, int r, int g, int b, bool noFloorPal);
int setTable(int palnum, const uint8_t* remap);
void postLoadTables();
int loadTable(FileReader& fp);
void postLoadLookups();
void setupDefaultFog();
void setFadeColor(int num, int r, int g, int b)
{
tables[num].FadeColor = PalEntry(1, r, g, b);
}
PalEntry getFade(int num)
{
return tables[num].FadeColor;
}
bool noFloorPal(int num) const
{
return tables[num].noFloorPal;
}
void setPaletteTint(int palnum, int r, int g, int b, int sr, int sg, int sb, int flags);
2020-05-27 20:19:02 +00:00
};
extern LookupTableInfo lookups;
2020-05-23 12:40:54 +00:00
enum
{
Translation_BasePalettes = 1,
Translation_Remap,
};
extern uint8_t curbasepal;
extern int32_t r_scenebrightness;
struct palette_t
{
uint8_t r, g, b, f;
};
2020-05-23 12:40:54 +00:00
extern PalEntry palfadergb;
void paletteSetColorTable(int32_t id, uint8_t const* table, bool notransparency, bool twodonly);
#include "tflags.h"
enum ESetPalFlag
{
Pal_DontResetFade = 1,
};
inline void videoSetBrightness(int brightness)
{
r_scenebrightness = clamp(brightness, 0, 15);
}
typedef TFlags<ESetPalFlag> ESetPalFlags;
DEFINE_TFLAGS_OPERATORS(ESetPalFlags)
void videoSetPalette(int dapalid);
2020-05-23 12:40:54 +00:00
inline void videoFadePalette(uint8_t r, uint8_t g, uint8_t b, uint8_t offset)
{
palfadergb.r = r;
palfadergb.g = g;
palfadergb.b = b;
palfadergb.a = offset;
}
inline void videoclearFade()
{
palfadergb.d = 0;
}
2020-05-23 12:40:54 +00:00
void videoTintBlood(int32_t r, int32_t g, int32_t b);
2021-03-25 08:13:16 +00:00
extern int numshades;
extern void paletteLoadFromDisk(void);
struct glblenddef_t
{
float alpha;
uint8_t src, dst, flags;
};
struct glblend_t
{
glblenddef_t def[2];
};
extern glblend_t const nullglblend, defaultglblend;
extern glblend_t glblend[MAXBLENDTABS];
2022-08-03 13:50:27 +00:00
enum {
DAMETH_TRANS1 = 2,
DAMETH_TRANS2 = 3,
};
2020-05-23 12:40:54 +00:00
FRenderStyle GetRenderStyle(int blend, int def);
float GetAlphaFromBlend(uint32_t maskprops, uint32_t blend);
void DrawFullscreenBlends();
enum {
PALETTE_MAIN = 1 << 0,
PALETTE_SHADE = 1 << 1,
PALETTE_TRANSLUC = 1 << 2,
};
inline uint8_t paletteloaded;
#endif