Polyphase Game Engine
Loading...
Searching...
No Matches
Graphics.h
Go to the documentation of this file.
1#pragma once
2
3#include "GraphicsTypes.h"
4#include "Vertex.h"
5#include "Line.h"
6
7#include <vector>
8
9class World;
10class Node;
11class Texture;
12class Material;
13class StaticMesh;
14class SkeletalMesh;
15class StaticMesh3D;
16class SkeletalMesh3D;
17class ShadowMesh3D;
18class InstancedMesh3D;
19class TextMesh3D;
20class Particle3D;
21class Camera3D;
22class Node3D;
23class Quad;
24class Text;
25class Poly;
26
27struct FogSettings;
28
31
34void GFX_BeginScreen(uint32_t screenIndex);
35void GFX_BeginView(uint32_t viewIndex);
36
38
42
43void GFX_SetViewport(int32_t x, int32_t y, int32_t width, int32_t height, bool handlePrerotation = true);
44void GFX_SetScissor(int32_t x, int32_t y, int32_t width, int32_t height, bool handlePrerotation = true);
45glm::mat4 GFX_MakePerspectiveMatrix(float fovyDegrees, float aspectRatio, float zNear, float zFar);
46glm::mat4 GFX_MakeOrthographicMatrix(float left, float right, float bottom, float top, float zNear, float zFar);
47
48void GFX_SetFog(const FogSettings& fogSettings);
49
50void GFX_DrawLines(const std::vector<Line>& lines);
52
53// Camera-facing translucent splat quads. Used by the Gaussian Splatting addon
54// and any other addon that wants to render point-cloud-like data in shipped
55// builds. The backend handles CPU-side billboard expansion using the camera
56// basis supplied by the caller (typically right = camera.right vector,
57// up = camera.up vector), so the addon only ships per-splat data.
58//
59// `radius` is the half-extent of the world-space quad. RGBA color is applied
60// uniformly across the quad; alpha is honored via the standard translucent
61// blend state, so back-to-front sorting is the caller's responsibility.
62//
63// GX / C3D backends are no-ops in v0.2.
65{
66 glm::vec3 mPosition;
67 float mRadius;
68 glm::vec4 mColor;
69};
70void GFX_DrawSplats(const GaussianSplatInstance* instances, uint32_t count,
71 const glm::vec3& cameraRight, const glm::vec3& cameraUp);
72
74void GFX_Reset();
75Node3D* GFX_ProcessHitCheck(World* world, int32_t x, int32_t y, uint32_t* outInstance = nullptr);
76uint32_t GFX_GetNumViews();
77
78void GFX_SetFrameRate(int32_t frameRate);
79
81
87
88void GFX_EnableMaterials(bool enable);
89
90void GFX_BeginGpuTimestamp(const char* name);
91void GFX_EndGpuTimestamp(const char* name);
92
93// Texture
94void GFX_CreateTextureResource(Texture* texture, std::vector<uint8_t>& data);
96
97// Streaming-RGBA8-texture upload. Currently implemented only for C3D (3DS);
98// Vulkan uses Texture::UpdatePixels' direct path via mResource.mImage->Update.
99// Other backends (GX) are no-ops. Typically called once per video frame.
100void GFX_UpdateTextureResourcePixels(Texture* texture, const uint8_t* src,
101 uint32_t srcWidth, uint32_t srcHeight);
102
103// Material
106
107// StaticMesh
108void GFX_CreateStaticMeshResource(StaticMesh* staticMesh, bool hasColor, uint32_t numVertices, void* vertices, uint32_t numIndices, IndexType* indices);
110
111// SkeletalMesh
112void GFX_CreateSkeletalMeshResource(SkeletalMesh* skeletalMesh, uint32_t numVertices, VertexSkinned* vertices, uint32_t numIndices, IndexType* indices);
114
115// StaticMeshComp
119void GFX_DrawStaticMeshComp(StaticMesh3D* staticMeshComp, StaticMesh* meshOverride = nullptr);
120
121// SkeletalMeshComp
124void GFX_ReallocateSkeletalMeshCompVertexBuffer(SkeletalMesh3D* skeletalMeshComp, uint32_t numVertices);
125void GFX_UpdateSkeletalMeshCompVertexBuffer(SkeletalMesh3D* skeletalMeshComp, const std::vector<Vertex>& skinnedVertices);
128
129// ShadowMeshComp
130// ShadowMesh3D uses StaticMeshCompResource for now.
132
133// InstancedMeshComp
135
136// TextMeshComp
139void GFX_UpdateTextMeshCompVertexBuffer(TextMesh3D* textMeshComp, const std::vector<Vertex>& vertices);
141
142// Voxel3D
143class Voxel3D;
146void GFX_UpdateVoxel3DResource(Voxel3D* voxel, const std::vector<VertexColor>& vertices, const std::vector<IndexType>& indices);
148
149// Terrain3D
150class Terrain3D;
153void GFX_UpdateTerrain3DResource(Terrain3D* terrain, const std::vector<VertexColor>& vertices, const std::vector<IndexType>& indices);
155
156// TileMap2D
157class TileMap2D;
160void GFX_UpdateTileMap2DResource(TileMap2D* tileMap, const std::vector<VertexColor>& vertices, const std::vector<IndexType>& indices);
162
163// ParticleComp
166void GFX_UpdateParticleCompVertexBuffer(Particle3D* particleComp, const std::vector<VertexParticle>& vertices);
168
169// Quad
173void GFX_DrawQuad(Quad* quad);
174
175// Quad Border
180
181// Text
185void GFX_DrawText(Text* text);
186
187// Polygon
191void GFX_DrawPoly(Poly* poly);
192
193// Arbitrary mesh draw (for debug drawing)
194void GFX_DrawStaticMesh(StaticMesh* mesh, Material* material, const glm::mat4& transform, glm::vec4 color);
195
196// PostProcess
uint16_t IndexType
Definition GraphicsTypes.h:122
RenderPassId
Definition GraphicsTypes.h:90
PipelineConfig
Definition GraphicsTypes.h:66
void GFX_CreateTerrain3DResource(Terrain3D *terrain)
void GFX_DestroyStaticMeshCompResource(StaticMesh3D *staticMeshComp)
void GFX_CreateQuadBorderResource(Quad *quad)
void GFX_EndRenderPass()
void GFX_Initialize()
void GFX_DestroyPolyResource(Poly *poly)
void GFX_DestroyParticleCompResource(Particle3D *particleComp)
void GFX_DrawStaticMesh(StaticMesh *mesh, Material *material, const glm::mat4 &transform, glm::vec4 color)
void GFX_DestroyQuadBorderResource(Quad *quad)
void GFX_DestroyVoxel3DResource(Voxel3D *voxel)
void GFX_DrawSkeletalMeshComp(SkeletalMesh3D *skeletalMeshComp)
void GFX_UpdateSkeletalMeshCompVertexBuffer(SkeletalMesh3D *skeletalMeshComp, const std::vector< Vertex > &skinnedVertices)
void GFX_EnableMaterials(bool enable)
Node3D * GFX_ProcessHitCheck(World *world, int32_t x, int32_t y, uint32_t *outInstance=nullptr)
void GFX_CreateStaticMeshResource(StaticMesh *staticMesh, bool hasColor, uint32_t numVertices, void *vertices, uint32_t numIndices, IndexType *indices)
bool GFX_IsCpuSkinningRequired(SkeletalMesh3D *skeletalMeshComp)
void GFX_SetViewport(int32_t x, int32_t y, int32_t width, int32_t height, bool handlePrerotation=true)
void GFX_BeginGpuTimestamp(const char *name)
void GFX_DestroySkeletalMeshResource(SkeletalMesh *skeletalMesh)
void GFX_RenderPostProcessPasses()
void GFX_UpdateTextureResourcePixels(Texture *texture, const uint8_t *src, uint32_t srcWidth, uint32_t srcHeight)
void GFX_ResizeWindow()
void GFX_CreateTextureResource(Texture *texture, std::vector< uint8_t > &data)
void GFX_BeginFrame()
glm::mat4 GFX_MakeOrthographicMatrix(float left, float right, float bottom, float top, float zNear, float zFar)
void GFX_UpdateStaticMeshCompResourceColors(StaticMesh3D *staticMeshComp)
void GFX_UpdateParticleCompVertexBuffer(Particle3D *particleComp, const std::vector< VertexParticle > &vertices)
void GFX_DrawQuadBorder(Quad *quad)
void GFX_UpdateQuadBorderResourceVertexData(Quad *quad)
void GFX_DestroyStaticMeshResource(StaticMesh *staticMesh)
void GFX_DrawPoly(Poly *poly)
float GFX_GetLightBakeProgress()
void GFX_CreateMaterialResource(Material *material)
void GFX_BeginRenderPass(RenderPassId renderPassId)
bool GFX_ShouldCullLights()
void GFX_PathTrace()
void GFX_UpdateTileMap2DResource(TileMap2D *tileMap, const std::vector< VertexColor > &vertices, const std::vector< IndexType > &indices)
void GFX_BeginScreen(uint32_t screenIndex)
void GFX_BeginLightBake()
void GFX_DestroyTextResource(Text *text)
bool GFX_IsLightBakeInProgress()
void GFX_DrawInstancedMeshComp(InstancedMesh3D *instancedMeshComp)
void GFX_DestroyTerrain3DResource(Terrain3D *terrain)
void GFX_EndFrame()
void GFX_UpdateTextMeshCompVertexBuffer(TextMesh3D *textMeshComp, const std::vector< Vertex > &vertices)
glm::mat4 GFX_MakePerspectiveMatrix(float fovyDegrees, float aspectRatio, float zNear, float zFar)
void GFX_UpdateTerrain3DResource(Terrain3D *terrain, const std::vector< VertexColor > &vertices, const std::vector< IndexType > &indices)
void GFX_UpdateVoxel3DResource(Voxel3D *voxel, const std::vector< VertexColor > &vertices, const std::vector< IndexType > &indices)
void GFX_DestroyTileMap2DResource(TileMap2D *tileMap)
void GFX_BeginView(uint32_t viewIndex)
void GFX_DestroyQuadResource(Quad *quad)
void GFX_EndLightBake()
void GFX_DrawTerrain3D(Terrain3D *terrain)
void GFX_CreateTextResource(Text *text)
void GFX_CreateTextMeshCompResource(TextMesh3D *textMeshComp)
void GFX_DrawQuad(Quad *quad)
void GFX_DrawTextMeshComp(TextMesh3D *textMeshComp)
void GFX_DrawStaticMeshComp(StaticMesh3D *staticMeshComp, StaticMesh *meshOverride=nullptr)
void GFX_DrawVoxel3D(Voxel3D *voxel)
void GFX_SetFog(const FogSettings &fogSettings)
void GFX_SetPipelineState(PipelineConfig config)
void GFX_CreateTileMap2DResource(TileMap2D *tileMap)
void GFX_CreateQuadResource(Quad *quad)
void GFX_DestroyMaterialResource(Material *material)
void GFX_CreatePolyResource(Poly *poly)
void GFX_EndGpuTimestamp(const char *name)
void GFX_DrawText(Text *text)
void GFX_DrawTileMap2D(TileMap2D *tileMap)
void GFX_CreateSkeletalMeshResource(SkeletalMesh *skeletalMesh, uint32_t numVertices, VertexSkinned *vertices, uint32_t numIndices, IndexType *indices)
void GFX_DestroySkeletalMeshCompResource(SkeletalMesh3D *skeletalMeshComp)
uint32_t GFX_GetNumViews()
void GFX_UpdateLightBake()
void GFX_DrawLines(const std::vector< Line > &lines)
void GFX_SetFrameRate(int32_t frameRate)
void GFX_DrawSplats(const GaussianSplatInstance *instances, uint32_t count, const glm::vec3 &cameraRight, const glm::vec3 &cameraUp)
void GFX_UpdatePolyResourceVertexData(Poly *poly)
void GFX_DestroyTextureResource(Texture *texture)
void GFX_CreateStaticMeshCompResource(StaticMesh3D *staticMeshComp)
void GFX_Reset()
void GFX_CreateParticleCompResource(Particle3D *particleComp)
void GFX_DrawShadowMeshComp(ShadowMesh3D *shadowMeshComp)
void GFX_ReallocateSkeletalMeshCompVertexBuffer(SkeletalMesh3D *skeletalMeshComp, uint32_t numVertices)
void GFX_DestroyTextMeshCompResource(TextMesh3D *textMeshComp)
void GFX_CreateVoxel3DResource(Voxel3D *voxel)
void GFX_DrawParticleComp(Particle3D *particleComp)
void GFX_SetScissor(int32_t x, int32_t y, int32_t width, int32_t height, bool handlePrerotation=true)
void GFX_Shutdown()
void GFX_UpdateTextResourceVertexData(Text *text)
void GFX_UpdateQuadResourceVertexData(Quad *quad)
void GFX_DrawFullscreen()
void GFX_CreateSkeletalMeshCompResource(SkeletalMesh3D *skeletalMeshComp)
Definition Camera3d.h:12
Definition InstancedMesh3d.h:13
Definition Material.h:48
Definition Node3d.h:14
Definition Node.h:67
Definition Particle3d.h:34
Definition Poly.h:10
Definition Quad.h:20
Definition ShadowMesh3d.h:6
Definition SkeletalMesh3d.h:85
Definition SkeletalMesh.h:99
Definition StaticMesh3d.h:12
Definition StaticMesh.h:18
Definition Terrain3d.h:13
Definition TextMesh3d.h:10
Definition Text.h:24
Definition Texture.h:10
Definition TileMap2d.h:23
Definition Voxel3d.h:61
Definition World.h:24
Definition EngineTypes.h:462
Definition Graphics.h:65
float mRadius
Definition Graphics.h:67
glm::vec4 mColor
Definition Graphics.h:68
glm::vec3 mPosition
Definition Graphics.h:66
Definition Vertex.h:50