citro3d  1.2.0
renderqueue.h
Go to the documentation of this file.
1 #pragma once
2 #include "framebuffer.h"
3 
4 typedef struct C3D_RenderTarget_tag C3D_RenderTarget;
5 
7 {
8  C3D_RenderTarget *next, *prev;
10 
11  bool used;
13 
14  bool linked;
15  gfxScreen_t screen;
16  gfx3dSide_t side;
18 };
19 
20 // Flags for C3D_FrameBegin
21 enum
22 {
23  C3D_FRAME_SYNCDRAW = BIT(0), // Perform C3D_FrameSync before checking the GPU status
24  C3D_FRAME_NONBLOCK = BIT(1), // Return false instead of waiting if the GPU is busy
25 };
26 
27 float C3D_FrameRate(float fps);
28 void C3D_FrameSync(void);
29 u32 C3D_FrameCounter(int id);
30 
31 bool C3D_FrameBegin(u8 flags);
32 bool C3D_FrameDrawOn(C3D_RenderTarget* target);
33 void C3D_FrameSplit(u8 flags);
34 void C3D_FrameEnd(u8 flags);
35 
36 void C3D_FrameEndHook(void (* hook)(void*), void* param);
37 
38 float C3D_GetDrawingTime(void);
39 float C3D_GetProcessingTime(void);
40 
41 #if defined(__GNUC__) && !defined(__cplusplus)
42 typedef union __attribute__((__transparent_union__))
43 {
44  int __i;
45  GPU_DEPTHBUF __e;
47 #else
49 {
50 private:
51  int __i;
52  GPU_DEPTHBUF __e;
53 public:
54  C3D_DEPTHTYPE(GPU_DEPTHBUF e) : __e(e) {}
55  C3D_DEPTHTYPE(int i) : __i(-1) { (void)i; }
56 };
57 #endif
58 
59 #define C3D_DEPTHTYPE_OK(_x) ((_x).__i >= 0)
60 #define C3D_DEPTHTYPE_VAL(_x) ((_x).__e)
61 
62 C3D_RenderTarget* C3D_RenderTargetCreate(int width, int height, GPU_COLORBUF colorFmt, C3D_DEPTHTYPE depthFmt);
63 C3D_RenderTarget* C3D_RenderTargetCreateFromTex(C3D_Tex* tex, GPU_TEXFACE face, int level, C3D_DEPTHTYPE depthFmt);
64 void C3D_RenderTargetDelete(C3D_RenderTarget* target);
65 void C3D_RenderTargetSetOutput(C3D_RenderTarget* target, gfxScreen_t screen, gfx3dSide_t side, u32 transferFlags);
66 
67 static inline void C3D_RenderTargetDetachOutput(C3D_RenderTarget* target)
68 {
69  C3D_RenderTargetSetOutput(NULL, target->screen, target->side, 0);
70 }
71 
72 static inline void C3D_RenderTargetClear(C3D_RenderTarget* target, C3D_ClearBits clearBits, u32 clearColor, u32 clearDepth)
73 {
74  C3D_FrameBufClear(&target->frameBuf, clearBits, clearColor, clearDepth);
75 }
76 
77 void C3D_SyncDisplayTransfer(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 flags);
78 void C3D_SyncTextureCopy(u32* inadr, u32 indim, u32* outadr, u32 outdim, u32 size, u32 flags);
79 void C3D_SyncMemoryFill(u32* buf0a, u32 buf0v, u32* buf0e, u16 control0, u32* buf1a, u32 buf1v, u32* buf1e, u16 control1);
__attribute__((weak))
Definition: base.c:11
void C3D_FrameBufClear(C3D_FrameBuf *fb, C3D_ClearBits clearBits, u32 clearColor, u32 clearDepth)
Definition: framebuffer.c:71
C3D_ClearBits
Definition: framebuffer.h:19
void C3D_FrameEndHook(void(*hook)(void *), void *param)
Definition: renderqueue.c:243
static void C3D_RenderTargetDetachOutput(C3D_RenderTarget *target)
Definition: renderqueue.h:67
bool C3D_FrameDrawOn(C3D_RenderTarget *target)
Definition: renderqueue.c:179
C3D_RenderTarget * C3D_RenderTargetCreateFromTex(C3D_Tex *tex, GPU_TEXFACE face, int level, C3D_DEPTHTYPE depthFmt)
Definition: renderqueue.c:314
void C3D_FrameSplit(u8 flags)
Definition: renderqueue.c:189
void C3D_SyncTextureCopy(u32 *inadr, u32 indim, u32 *outadr, u32 outdim, u32 size, u32 flags)
Definition: renderqueue.c:423
void C3D_FrameSync(void)
Definition: renderqueue.c:75
float C3D_GetProcessingTime(void)
Definition: renderqueue.c:254
float C3D_GetDrawingTime(void)
Definition: renderqueue.c:249
u32 C3D_FrameCounter(int id)
Definition: renderqueue.c:87
static void C3D_RenderTargetClear(C3D_RenderTarget *target, C3D_ClearBits clearBits, u32 clearColor, u32 clearDepth)
Definition: renderqueue.h:72
bool C3D_FrameBegin(u8 flags)
Definition: renderqueue.c:163
void C3D_SyncMemoryFill(u32 *buf0a, u32 buf0v, u32 *buf0e, u16 control0, u32 *buf1a, u32 buf1v, u32 *buf1e, u16 control1)
Definition: renderqueue.c:436
C3D_RenderTarget * C3D_RenderTargetCreate(int width, int height, GPU_COLORBUF colorFmt, C3D_DEPTHTYPE depthFmt)
Definition: renderqueue.c:278
float C3D_FrameRate(float fps)
Definition: renderqueue.c:151
void C3D_RenderTargetSetOutput(C3D_RenderTarget *target, gfxScreen_t screen, gfx3dSide_t side, u32 transferFlags)
Definition: renderqueue.c:365
@ C3D_FRAME_SYNCDRAW
Definition: renderqueue.h:23
@ C3D_FRAME_NONBLOCK
Definition: renderqueue.h:24
void C3D_SyncDisplayTransfer(u32 *inadr, u32 indim, u32 *outadr, u32 outdim, u32 flags)
Definition: renderqueue.c:410
void C3D_RenderTargetDelete(C3D_RenderTarget *target)
Definition: renderqueue.c:354
void C3D_FrameEnd(u8 flags)
Definition: renderqueue.c:197
Definition: framebuffer.h:5
Definition: renderqueue.h:7
gfxScreen_t screen
Definition: renderqueue.h:15
bool ownsDepth
Definition: renderqueue.h:12
bool ownsColor
Definition: renderqueue.h:12
bool used
Definition: renderqueue.h:11
u32 transferFlags
Definition: renderqueue.h:17
gfx3dSide_t side
Definition: renderqueue.h:16
C3D_RenderTarget * prev
Definition: renderqueue.h:8
C3D_RenderTarget * next
Definition: renderqueue.h:8
bool linked
Definition: renderqueue.h:14
C3D_FrameBuf frameBuf
Definition: renderqueue.h:9
Definition: texture.h:10
Definition: renderqueue.h:49
C3D_DEPTHTYPE(GPU_DEPTHBUF e)
Definition: renderqueue.h:54
C3D_DEPTHTYPE(int i)
Definition: renderqueue.h:55