gzdoom/src/r_renderer.h
Christoph Oelckers 65e1589543 - allow specifying actor classes whose graphics to precache through MAPINFO.
- some reorganization of texture precaching so that the renderer can decide what to do with actors.

Just marking the sprite textures loses too much info if more is needed than just loading the images into memory.
2016-05-01 22:47:36 +02:00

72 lines
2 KiB
C++

#ifndef __R_RENDERER_H
#define __R_RENDERER_H
#include <stdio.h>
struct FRenderer;
extern FRenderer *Renderer;
class FArchive;
class FTexture;
class AActor;
class player_t;
struct sector_t;
class FCanvasTexture;
struct FRenderer
{
FRenderer()
{
Renderer = this;
}
virtual ~FRenderer()
{
Renderer = NULL;
}
// Can be overridden so that the colormaps for sector color/fade won't be built.
virtual bool UsesColormap() const = 0;
// precache one texture
virtual void Precache(BYTE *texhitlist, TMap<PClassActor*, bool> &actorhitlist) = 0;
// render 3D view
virtual void RenderView(player_t *player) = 0;
// Remap voxel palette
virtual void RemapVoxels() {}
// renders view to a savegame picture
virtual void WriteSavePic (player_t *player, FILE *file, int width, int height) = 0;
// draws player sprites with hardware acceleration (only useful for software rendering)
virtual void DrawRemainingPlayerSprites() {}
// notifies the renderer that an actor has changed state.
virtual void StateChanged(AActor *actor) {}
// notify the renderer that serialization of the curent level is about to start/end
virtual void StartSerialize(FArchive &arc) {}
virtual void EndSerialize(FArchive &arc) {}
virtual int GetMaxViewPitch(bool down) = 0; // return value is in plain degrees
virtual void OnModeSet () {}
virtual void ErrorCleanup () {}
virtual void ClearBuffer(int color) = 0;
virtual void Init() = 0;
virtual void SetWindow (int windowSize, int fullWidth, int fullHeight, int stHeight, int trueratio) {}
virtual void SetupFrame(player_t *player) {}
virtual void CopyStackedViewParameters() {}
virtual void RenderTextureView (FCanvasTexture *tex, AActor *viewpoint, int fov) = 0;
virtual sector_t *FakeFlat(sector_t *sec, sector_t *tempsec, int *floorlightlevel, int *ceilinglightlevel, bool back) = 0;
virtual void SetFogParams(int _fogdensity, PalEntry _outsidefogcolor, int _outsidefogdensity, int _skyfog) {}
virtual void PreprocessLevel() {}
virtual void CleanLevelData() {}
virtual bool RequireGLNodes() { return false; }
};
#endif