libultraship
Reimplementations of libultra (N64 SDK) functions for modern hardware
Loading...
Searching...
No Matches
gfx_rendering_api.h
Go to the documentation of this file.
1#pragma once
2
3#include <stdint.h>
4
5#include <unordered_map>
6#include <set>
7#include "imconfig.h"
8
9namespace Fast {
10struct ShaderProgram;
11
16
18
19// A hash function used to hash a: pair<float, float>
21 size_t operator()(const std::pair<float, float>& p) const {
22 const auto hash1 = std::hash<float>{}(p.first);
23 const auto hash2 = std::hash<float>{}(p.second);
24
25 // If hash1 == hash2, their XOR is zero.
26 return (hash1 != hash2) ? hash1 ^ hash2 : hash1;
27 }
28};
29
31 public:
32 virtual ~GfxRenderingAPI() = default;
33 virtual const char* GetName() = 0;
34 virtual int GetMaxTextureSize() = 0;
36 virtual void UnloadShader(ShaderProgram* oldPrg) = 0;
37 virtual void LoadShader(ShaderProgram* newPrg) = 0;
38 virtual void ClearShaderCache() = 0;
39 virtual ShaderProgram* CreateAndLoadNewShader(uint64_t shaderId0, uint64_t shaderId1) = 0;
40 virtual ShaderProgram* LookupShader(uint64_t shaderId0, uint64_t shaderId1) = 0;
41 virtual void ShaderGetInfo(ShaderProgram* prg, uint8_t* numInputs, bool usedTextures[2]) = 0;
42 virtual uint32_t NewTexture() = 0;
43 virtual void SelectTexture(int tile, uint32_t textureId) = 0;
44 virtual void UploadTexture(const uint8_t* rgba32Buf, uint32_t width, uint32_t height) = 0;
45 virtual void SetSamplerParameters(int sampler, bool linear_filter, uint32_t cms, uint32_t cmt) = 0;
46 virtual void SetDepthTestAndMask(bool depth_test, bool z_upd) = 0;
47 virtual void SetZmodeDecal(bool decal) = 0;
48 virtual void SetViewport(int x, int y, int width, int height) = 0;
49 virtual void SetScissor(int x, int y, int width, int height) = 0;
50 virtual void SetUseAlpha(bool useAlpha) = 0;
51 virtual void DrawTriangles(float buf_vbo[], size_t buf_vbo_len, size_t buf_vbo_num_tris) = 0;
52 virtual void Init() = 0;
53 virtual void OnResize() = 0;
54 virtual void StartFrame() = 0;
55 virtual void EndFrame() = 0;
56 virtual void FinishRender() = 0;
57 virtual int CreateFramebuffer() = 0;
58 virtual void UpdateFramebufferParameters(int fb_id, uint32_t width, uint32_t height, uint32_t msaa_level,
59 bool opengl_invertY, bool render_target, bool has_depth_buffer,
60 bool can_extract_depth) = 0;
61 virtual void StartDrawToFramebuffer(int fbId, float noiseScale) = 0;
62 virtual void CopyFramebuffer(int fbDstId, int fbSrcId, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0,
63 int dstY0, int dstX1, int dstY1) = 0;
64 virtual void ClearFramebuffer(bool color, bool depth) = 0;
65 virtual void ClearDepthRegion(int x, int y, int w, int h) {
66 // Default: full depth clear. Backends that support scissored depth clears
67 // (e.g. OpenGL) should override for a more precise partial clear.
68 ClearFramebuffer(false, true);
69 }
70 virtual void ReadFramebufferToCPU(int fbId, uint32_t width, uint32_t height, uint16_t* rgba16Buf) = 0;
71 virtual void ResolveMSAAColorBuffer(int fbIdTarger, int fbIdSrc) = 0;
72 virtual std::unordered_map<std::pair<float, float>, uint16_t, hash_pair_ff>
73 GetPixelDepth(int fb_id, const std::set<std::pair<float, float>>& coordinates) = 0;
74 virtual void* GetFramebufferTextureId(int fbId) = 0;
75 virtual void SelectTextureFb(int fbId) = 0;
76 virtual void DeleteTexture(uint32_t texId) = 0;
77 virtual void SetTextureFilter(FilteringMode mode) = 0;
79 virtual void SetSrgbMode() = 0;
80 virtual ImTextureID GetTextureById(int id) = 0;
81 virtual void SetCurrentPrimDepth(float depth) = 0;
82
83 protected:
87 int8_t mLastDepthTest = -1;
88 int8_t mLastDepthMask = -1;
89 int8_t mLastZmodeDecal = -1;
90 bool mSrgbMode = false;
91 float mCurrentPrimDepth = 0.0f;
92 bool mPrimDepthDirty = true;
93};
94} // namespace Fast
Definition gfx_rendering_api.h:30
virtual int CreateFramebuffer()=0
virtual void SetViewport(int x, int y, int width, int height)=0
virtual void SelectTexture(int tile, uint32_t textureId)=0
virtual void ShaderGetInfo(ShaderProgram *prg, uint8_t *numInputs, bool usedTextures[2])=0
virtual int GetMaxTextureSize()=0
virtual void SetDepthTestAndMask(bool depth_test, bool z_upd)=0
virtual void CopyFramebuffer(int fbDstId, int fbSrcId, int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1)=0
virtual ShaderProgram * LookupShader(uint64_t shaderId0, uint64_t shaderId1)=0
virtual void SetZmodeDecal(bool decal)=0
virtual void Init()=0
int8_t mLastZmodeDecal
Definition gfx_rendering_api.h:89
virtual void StartDrawToFramebuffer(int fbId, float noiseScale)=0
virtual ~GfxRenderingAPI()=default
virtual void OnResize()=0
virtual ImTextureID GetTextureById(int id)=0
virtual void EndFrame()=0
virtual void DrawTriangles(float buf_vbo[], size_t buf_vbo_len, size_t buf_vbo_num_tris)=0
virtual void UnloadShader(ShaderProgram *oldPrg)=0
virtual void ResolveMSAAColorBuffer(int fbIdTarger, int fbIdSrc)=0
bool mPrimDepthDirty
Definition gfx_rendering_api.h:92
virtual void ClearFramebuffer(bool color, bool depth)=0
bool mSrgbMode
Definition gfx_rendering_api.h:90
virtual void LoadShader(ShaderProgram *newPrg)=0
virtual FilteringMode GetTextureFilter()=0
virtual void SetTextureFilter(FilteringMode mode)=0
virtual void ClearDepthRegion(int x, int y, int w, int h)
Definition gfx_rendering_api.h:65
virtual GfxClipParameters GetClipParameters()=0
virtual void DeleteTexture(uint32_t texId)=0
virtual void StartFrame()=0
virtual void UploadTexture(const uint8_t *rgba32Buf, uint32_t width, uint32_t height)=0
virtual const char * GetName()=0
int8_t mCurrentDepthMask
Definition gfx_rendering_api.h:85
int8_t mCurrentDepthTest
Definition gfx_rendering_api.h:84
int8_t mLastDepthTest
Definition gfx_rendering_api.h:87
int8_t mCurrentZmodeDecal
Definition gfx_rendering_api.h:86
virtual void ReadFramebufferToCPU(int fbId, uint32_t width, uint32_t height, uint16_t *rgba16Buf)=0
virtual std::unordered_map< std::pair< float, float >, uint16_t, hash_pair_ff > GetPixelDepth(int fb_id, const std::set< std::pair< float, float > > &coordinates)=0
virtual uint32_t NewTexture()=0
virtual void * GetFramebufferTextureId(int fbId)=0
virtual void UpdateFramebufferParameters(int fb_id, uint32_t width, uint32_t height, uint32_t msaa_level, bool opengl_invertY, bool render_target, bool has_depth_buffer, bool can_extract_depth)=0
virtual void SetSamplerParameters(int sampler, bool linear_filter, uint32_t cms, uint32_t cmt)=0
int8_t mLastDepthMask
Definition gfx_rendering_api.h:88
float mCurrentPrimDepth
Definition gfx_rendering_api.h:91
virtual void SetSrgbMode()=0
virtual void FinishRender()=0
virtual void SetScissor(int x, int y, int width, int height)=0
virtual void SetUseAlpha(bool useAlpha)=0
virtual void SelectTextureFb(int fbId)=0
virtual void SetCurrentPrimDepth(float depth)=0
virtual void ClearShaderCache()=0
virtual ShaderProgram * CreateAndLoadNewShader(uint64_t shaderId0, uint64_t shaderId1)=0
Definition gfx_direct3d_common.h:19
FilteringMode
Definition gfx_rendering_api.h:17
@ FILTER_LINEAR
Definition gfx_rendering_api.h:17
@ FILTER_NONE
Definition gfx_rendering_api.h:17
@ FILTER_THREE_POINT
Definition gfx_rendering_api.h:17
Definition gfx_rendering_api.h:12
bool z_is_from_0_to_1
Definition gfx_rendering_api.h:13
bool invertY
Definition gfx_rendering_api.h:14
OpenGL shader program metadata cached by the Fast3D renderer.
Definition gfx_opengl.h:37
Definition gfx_rendering_api.h:20
size_t operator()(const std::pair< float, float > &p) const
Definition gfx_rendering_api.h:21