citro3d  1.2.0
framebuffer.h
Go to the documentation of this file.
1 #pragma once
2 #include "texture.h"
3 
4 typedef struct
5 {
6  void* colorBuf;
7  void* depthBuf;
8  u16 width;
9  u16 height;
10  GPU_COLORBUF colorFmt;
11  GPU_DEPTHBUF depthFmt;
12  bool block32;
13  u8 colorMask : 4;
14  u8 depthMask : 4;
15 } C3D_FrameBuf;
16 
17 // Flags for C3D_FrameBufClear
18 typedef enum
19 {
20  C3D_CLEAR_COLOR = BIT(0),
21  C3D_CLEAR_DEPTH = BIT(1),
24 
25 u32 C3D_CalcColorBufSize(u32 width, u32 height, GPU_COLORBUF fmt);
26 u32 C3D_CalcDepthBufSize(u32 width, u32 height, GPU_DEPTHBUF fmt);
27 
30 void C3D_FrameBufTex(C3D_FrameBuf* fb, C3D_Tex* tex, GPU_TEXFACE face, int level);
31 void C3D_FrameBufClear(C3D_FrameBuf* fb, C3D_ClearBits clearBits, u32 clearColor, u32 clearDepth);
32 void C3D_FrameBufTransfer(C3D_FrameBuf* fb, gfxScreen_t screen, gfx3dSide_t side, u32 transferFlags);
33 
34 static inline void C3D_FrameBufAttrib(C3D_FrameBuf* fb, u16 width, u16 height, bool block32)
35 {
36  fb->width = width;
37  fb->height = height;
38  fb->block32 = block32;
39 }
40 
41 static inline void C3D_FrameBufColor(C3D_FrameBuf* fb, void* buf, GPU_COLORBUF fmt)
42 {
43  if (buf)
44  {
45  fb->colorBuf = buf;
46  fb->colorFmt = fmt;
47  fb->colorMask = 0xF;
48  } else
49  {
50  fb->colorBuf = NULL;
51  fb->colorFmt = GPU_RB_RGBA8;
52  fb->colorMask = 0;
53  }
54 }
55 
56 static inline void C3D_FrameBufDepth(C3D_FrameBuf* fb, void* buf, GPU_DEPTHBUF fmt)
57 {
58  if (buf)
59  {
60  fb->depthBuf = buf;
61  fb->depthFmt = fmt;
62  fb->depthMask = fmt == GPU_RB_DEPTH24_STENCIL8 ? 0x3 : 0x2;
63  } else
64  {
65  fb->depthBuf = NULL;
66  fb->depthFmt = GPU_RB_DEPTH24;
67  fb->depthMask = 0;
68  }
69 }
void C3D_FrameBufTex(C3D_FrameBuf *fb, C3D_Tex *tex, GPU_TEXFACE face, int level)
Definition: framebuffer.c:41
static void C3D_FrameBufColor(C3D_FrameBuf *fb, void *buf, GPU_COLORBUF fmt)
Definition: framebuffer.h:41
C3D_FrameBuf * C3D_GetFrameBuf(void)
Definition: framebuffer.c:18
u32 C3D_CalcColorBufSize(u32 width, u32 height, GPU_COLORBUF fmt)
Definition: framebuffer.c:6
u32 C3D_CalcDepthBufSize(u32 width, u32 height, GPU_DEPTHBUF fmt)
Definition: framebuffer.c:12
void C3D_SetFrameBuf(C3D_FrameBuf *fb)
Definition: framebuffer.c:29
static void C3D_FrameBufDepth(C3D_FrameBuf *fb, void *buf, GPU_DEPTHBUF fmt)
Definition: framebuffer.h:56
static void C3D_FrameBufAttrib(C3D_FrameBuf *fb, u16 width, u16 height, bool block32)
Definition: framebuffer.h:34
void C3D_FrameBufTransfer(C3D_FrameBuf *fb, gfxScreen_t screen, gfx3dSide_t side, u32 transferFlags)
Definition: framebuffer.c:95
void C3D_FrameBufClear(C3D_FrameBuf *fb, C3D_ClearBits clearBits, u32 clearColor, u32 clearDepth)
Definition: framebuffer.c:71
C3D_ClearBits
Definition: framebuffer.h:19
@ C3D_CLEAR_COLOR
Definition: framebuffer.h:20
@ C3D_CLEAR_DEPTH
Definition: framebuffer.h:21
@ C3D_CLEAR_ALL
Definition: framebuffer.h:22
Definition: framebuffer.h:5
u8 depthMask
Definition: framebuffer.h:14
void * depthBuf
Definition: framebuffer.h:7
u16 width
Definition: framebuffer.h:8
bool block32
Definition: framebuffer.h:12
u16 height
Definition: framebuffer.h:9
GPU_DEPTHBUF depthFmt
Definition: framebuffer.h:11
GPU_COLORBUF colorFmt
Definition: framebuffer.h:10
u8 colorMask
Definition: framebuffer.h:13
void * colorBuf
Definition: framebuffer.h:6
Definition: texture.h:10