mirror of
https://github.com/DrBeef/Raze.git
synced 2024-12-25 03:50:58 +00:00
84 lines
1.8 KiB
C
84 lines
1.8 KiB
C
|
#ifndef __RES_VOXEL_H
|
||
|
#define __RES_VOXEL_H
|
||
|
|
||
|
#include <stdint.h>
|
||
|
// [RH] Voxels from Build
|
||
|
|
||
|
#define MAXVOXMIPS 5
|
||
|
|
||
|
struct kvxslab_t
|
||
|
{
|
||
|
uint8_t ztop; // starting z coordinate of top of slab
|
||
|
uint8_t zleng; // # of bytes in the color array - slab height
|
||
|
uint8_t backfacecull; // low 6 bits tell which of 6 faces are exposed
|
||
|
uint8_t col[1/*zleng*/];// color data from top to bottom
|
||
|
};
|
||
|
|
||
|
struct kvxslab_bgra_t
|
||
|
{
|
||
|
uint32_t ztop; // starting z coordinate of top of slab
|
||
|
uint32_t zleng; // # of bytes in the color array - slab height
|
||
|
uint32_t backfacecull; // low 6 bits tell which of 6 faces are exposed
|
||
|
uint32_t col[1/*zleng*/];// color data from top to bottom
|
||
|
};
|
||
|
|
||
|
struct FVoxel;
|
||
|
|
||
|
struct FVoxelMipLevel
|
||
|
{
|
||
|
FVoxelMipLevel();
|
||
|
~FVoxelMipLevel();
|
||
|
|
||
|
int SizeX;
|
||
|
int SizeY;
|
||
|
int SizeZ;
|
||
|
DVector3 Pivot;
|
||
|
int *OffsetX;
|
||
|
short *OffsetXY;
|
||
|
private:
|
||
|
uint8_t *SlabData;
|
||
|
TArray<uint8_t> SlabDataRemapped;
|
||
|
public:
|
||
|
TArray<uint32_t> SlabDataBgra;
|
||
|
|
||
|
uint8_t *GetSlabData(bool wantpaletted) const;
|
||
|
|
||
|
friend FVoxel *R_LoadKVX(int lumpnum);
|
||
|
friend struct FVoxel;
|
||
|
};
|
||
|
|
||
|
struct FVoxel
|
||
|
{
|
||
|
TArray<uint8_t> Palette;
|
||
|
int LumpNum;
|
||
|
int NumMips;
|
||
|
int VoxelIndex;
|
||
|
FVoxelMipLevel Mips[MAXVOXMIPS];
|
||
|
bool Remapped = false;
|
||
|
bool Bgramade = false;
|
||
|
|
||
|
void CreateBgraSlabData();
|
||
|
void Remap();
|
||
|
void RemovePalette();
|
||
|
};
|
||
|
|
||
|
struct FVoxelDef
|
||
|
{
|
||
|
FVoxel *Voxel;
|
||
|
int PlacedSpin; // degrees/sec to spin actors without MF_DROPPED set
|
||
|
int DroppedSpin; // degrees/sec to spin actors with MF_DROPPED set
|
||
|
int VoxeldefIndex; // Needed by GZDoom
|
||
|
double Scale;
|
||
|
DAngle AngleOffset;// added to actor's angle to compensate for wrong-facing voxels
|
||
|
};
|
||
|
|
||
|
extern TDeletingArray<FVoxel *> Voxels; // used only to auto-delete voxels on exit.
|
||
|
extern TDeletingArray<FVoxelDef *> VoxelDefs;
|
||
|
|
||
|
FVoxel* VOX_GetVoxel(int lumpnum);
|
||
|
|
||
|
FVoxel *R_LoadKVX(int lumpnum);
|
||
|
FVoxelDef *R_LoadVoxelDef(int lumpnum, int spin);
|
||
|
|
||
|
#endif
|