4jcraft/targets/platform/renderer/IPlatformRenderer.h

209 lines
8.8 KiB
C++

#pragma once
#include <cstdint>
#include "PlatformTypes.h"
class IPlatformRenderer {
public:
enum eVertexType {
VERTEX_TYPE_PF3_TF2_CB4_NB4_XW1,
VERTEX_TYPE_COMPRESSED,
VERTEX_TYPE_PF3_TF2_CB4_NB4_XW1_LIT,
VERTEX_TYPE_PF3_TF2_CB4_NB4_XW1_TEXGEN,
VERTEX_TYPE_COUNT
};
enum ePixelShaderType {
PIXEL_SHADER_TYPE_STANDARD,
PIXEL_SHADER_TYPE_PROJECTION,
PIXEL_SHADER_TYPE_FORCELOD,
PIXEL_SHADER_COUNT
};
enum eViewportType {
VIEWPORT_TYPE_FULLSCREEN,
VIEWPORT_TYPE_SPLIT_TOP,
VIEWPORT_TYPE_SPLIT_BOTTOM,
VIEWPORT_TYPE_SPLIT_LEFT,
VIEWPORT_TYPE_SPLIT_RIGHT,
VIEWPORT_TYPE_QUADRANT_TOP_LEFT,
VIEWPORT_TYPE_QUADRANT_TOP_RIGHT,
VIEWPORT_TYPE_QUADRANT_BOTTOM_LEFT,
VIEWPORT_TYPE_QUADRANT_BOTTOM_RIGHT,
};
enum ePrimitiveType {
PRIMITIVE_TYPE_TRIANGLE_LIST,
PRIMITIVE_TYPE_TRIANGLE_STRIP,
PRIMITIVE_TYPE_TRIANGLE_FAN,
PRIMITIVE_TYPE_QUAD_LIST,
PRIMITIVE_TYPE_LINE_LIST,
PRIMITIVE_TYPE_LINE_STRIP,
PRIMITIVE_TYPE_COUNT
};
enum eTextureFormat { TEXTURE_FORMAT_RxGyBzAw, MAX_TEXTURE_FORMATS };
virtual ~IPlatformRenderer() = default;
// Lifecycle
virtual void Initialise() = 0;
virtual void InitialiseContext() = 0;
virtual void Tick() = 0;
virtual void StartFrame() = 0;
virtual void Present() = 0;
virtual void Clear(int flags) = 0;
virtual void SetClearColour(const float colourRGBA[4]) = 0;
virtual void Shutdown() = 0;
virtual void Suspend() = 0;
[[nodiscard]] virtual bool Suspended() = 0;
virtual void Resume() = 0;
// Window
virtual void SetWindowSize(int w, int h) = 0;
virtual void SetFullscreen(bool fs) = 0;
[[nodiscard]] virtual bool IsWidescreen() = 0;
[[nodiscard]] virtual bool IsHiDef() = 0;
virtual void GetFramebufferSize(int& width, int& height) = 0;
[[nodiscard]] virtual bool ShouldClose() = 0;
virtual void Close() = 0;
virtual void UpdateGamma(unsigned short usGamma) = 0;
// Matrix stack
virtual void MatrixMode(int type) = 0;
virtual void MatrixSetIdentity() = 0;
virtual void MatrixTranslate(float x, float y, float z) = 0;
virtual void MatrixRotate(float angle, float x, float y, float z) = 0;
virtual void MatrixScale(float x, float y, float z) = 0;
virtual void MatrixPerspective(float fovy, float aspect, float zNear,
float zFar) = 0;
virtual void MatrixOrthogonal(float left, float right, float bottom,
float top, float zNear, float zFar) = 0;
virtual void MatrixPop() = 0;
virtual void MatrixPush() = 0;
virtual void MatrixMult(float* mat) = 0;
[[nodiscard]] virtual const float* MatrixGet(int type) = 0;
virtual void Set_matrixDirty() = 0;
// Draw calls
virtual void DrawVertices(ePrimitiveType PrimitiveType, int count,
void* dataIn, eVertexType vType,
ePixelShaderType psType) = 0;
// Command buffers
virtual void CBuffLockStaticCreations() = 0;
[[nodiscard]] virtual int CBuffCreate(int count) = 0;
virtual void CBuffDelete(int first, int count) = 0;
virtual void CBuffDeleteAll() = 0;
virtual void CBuffStart(int index, bool full = false) = 0;
virtual void CBuffClear(int index) = 0;
[[nodiscard]] virtual int CBuffSize(int index) = 0;
virtual void CBuffEnd() = 0;
[[nodiscard]] virtual bool CBuffCall(int index, bool full = true) = 0;
virtual void CBuffTick() = 0;
virtual void CBuffDeferredModeStart() = 0;
virtual void CBuffDeferredModeEnd() = 0;
// Textures
[[nodiscard]] virtual int TextureCreate() = 0;
virtual void TextureFree(int idx) = 0;
virtual void TextureBind(int idx) = 0;
virtual void TextureBindVertex(int idx, bool scaleLight = false) = 0;
virtual void TextureSetTextureLevels(int levels) = 0;
[[nodiscard]] virtual int TextureGetTextureLevels() = 0;
virtual void TextureData(
int width, int height, void* data, int level,
eTextureFormat format = TEXTURE_FORMAT_RxGyBzAw) = 0;
virtual void TextureDataUpdate(int xoffset, int yoffset, int width,
int height, void* data, int level) = 0;
virtual void TextureSetParam(int param, int value) = 0;
virtual void TextureDynamicUpdateStart() = 0;
virtual void TextureDynamicUpdateEnd() = 0;
[[nodiscard]] virtual int LoadTextureData(const char* szFilename,
D3DXIMAGE_INFO* pSrcInfo,
int** ppDataOut) = 0;
[[nodiscard]] virtual int LoadTextureData(std::uint8_t* pbData,
std::uint32_t byteCount,
D3DXIMAGE_INFO* pSrcInfo,
int** ppDataOut) = 0;
[[nodiscard]] virtual int SaveTextureData(const char* szFilename,
D3DXIMAGE_INFO* pSrcInfo,
int* ppDataOut) = 0;
[[nodiscard]] virtual int SaveTextureDataToMemory(void* pOutput,
int outputCapacity,
int* outputLength,
int width, int height,
int* ppDataIn) = 0;
virtual void ReadPixels(int x, int y, int w, int h, void* buf) = 0;
virtual void TextureGetStats() = 0;
[[nodiscard]] virtual void* TextureGetTexture(int idx) = 0;
// Render state
virtual void StateSetColour(float r, float g, float b, float a) = 0;
virtual void StateSetDepthMask(bool enable) = 0;
virtual void StateSetBlendEnable(bool enable) = 0;
virtual void StateSetBlendFunc(int src, int dst) = 0;
virtual void StateSetBlendFactor(unsigned int colour) = 0;
virtual void StateSetAlphaFunc(int func, float param) = 0;
virtual void StateSetDepthFunc(int func) = 0;
virtual void StateSetFaceCull(bool enable) = 0;
virtual void StateSetFaceCullCW(bool enable) = 0;
virtual void StateSetLineWidth(float width) = 0;
virtual void StateSetWriteEnable(bool red, bool green, bool blue,
bool alpha) = 0;
virtual void StateSetDepthTestEnable(bool enable) = 0;
virtual void StateSetAlphaTestEnable(bool enable) = 0;
virtual void StateSetDepthSlopeAndBias(float slope, float bias) = 0;
// Fog
virtual void StateSetFogEnable(bool enable) = 0;
virtual void StateSetFogMode(int mode) = 0;
virtual void StateSetFogNearDistance(float dist) = 0;
virtual void StateSetFogFarDistance(float dist) = 0;
virtual void StateSetFogDensity(float density) = 0;
virtual void StateSetFogColour(float red, float green, float blue) = 0;
// Lighting
virtual void StateSetLightingEnable(bool enable) = 0;
virtual void StateSetVertexTextureUV(float u, float v) = 0;
virtual void StateSetLightColour(int light, float red, float green,
float blue) = 0;
virtual void StateSetLightAmbientColour(float red, float green,
float blue) = 0;
virtual void StateSetLightDirection(int light, float x, float y,
float z) = 0;
virtual void StateSetLightEnable(int light, bool enable) = 0;
// Viewport & clipping
virtual void StateSetViewport(eViewportType viewportType) = 0;
virtual void StateSetEnableViewportClipPlanes(bool enable) = 0;
virtual void StateSetTexGenCol(int col, float x, float y, float z, float w,
bool eyeSpace) = 0;
virtual void StateSetStencil(int Function, std::uint8_t stencil_ref,
std::uint8_t stencil_func_mask,
std::uint8_t stencil_write_mask) = 0;
virtual void StateSetForceLOD(int LOD) = 0;
virtual void StateSetTextureEnable(bool enable) = 0;
virtual void StateSetActiveTexture(int tex) = 0;
// Chunks
virtual void SetChunkOffset(float x, float y, float z) = 0;
// Occlusion
virtual void BeginConditionalSurvey(int identifier) = 0;
virtual void EndConditionalSurvey() = 0;
virtual void BeginConditionalRendering(int identifier) = 0;
virtual void EndConditionalRendering() = 0;
// Screenshots
virtual void DoScreenGrabOnNextPresent() = 0;
virtual void CaptureThumbnail(ImageFileBuffer* pngOut) = 0;
virtual void CaptureScreen(ImageFileBuffer* jpgOut,
XSOCIAL_PREVIEWIMAGE* previewOut) = 0;
// Events
virtual void BeginEvent(const char* eventName) = 0;
virtual void EndEvent() = 0;
};