54#ifndef __LIBDRAGON_SURFACE_H
55#define __LIBDRAGON_SURFACE_H
69#define _RDP_FORMAT_CODE(rdp_fmt, rdp_size) (((rdp_fmt)<<2)|(rdp_size))
76#define TEX_FORMAT_BITDEPTH(fmt) (4 << ((fmt) & 0x3))
84#define TEX_FORMAT_PIX2BYTES(fmt, pixels) ((((pixels) << (((fmt) & 3) + 2)) + 7) >> 3)
91#define TEX_FORMAT_BYTES2PIX(fmt, bytes) (((bytes) << 1) >> ((fmt) & 3))
123#define SURFACE_FLAGS_TEXFORMAT 0x001F
124#define SURFACE_FLAGS_OWNEDBUFFER 0x0020
125#define SURFACE_FLAGS_TEXINDEX 0x0F00
139typedef struct surface_s
235 uint16_t x0, uint16_t y0, uint16_t width, uint16_t height);
297 .
flags = (uint16_t)(format | ((index & 0xF) << 8)),
336 return (surface->
flags >> 8) & 0xF;
tex_format_t
Pixel format enum.
Definition surface.h:105
@ FMT_RGBA32
Format RGBA 8888 (32-bit)
Definition surface.h:109
@ FMT_CI8
Format CI8: color index 8-bit (paletted, 1 index per byte)
Definition surface.h:112
@ FMT_YUV16
Format YUV2 4:2:2 (data interleaved as YUYV)
Definition surface.h:110
@ FMT_IA4
Format IA4: 3-bit intensity + 1-bit alpha (4-bit per pixel)
Definition surface.h:113
@ FMT_I8
Format I8: 8-bit intensity (8-bit per pixel)
Definition surface.h:117
@ FMT_IA16
Format IA16: 8-bit intensity + 8-bit alpha (16-bit per pixel)
Definition surface.h:115
@ FMT_NONE
Placeholder for no format defined.
Definition surface.h:106
@ FMT_RGBA16
Format RGBA 5551 (16-bit)
Definition surface.h:108
@ FMT_CI4
Format CI4: color index 4-bit (paletted, 2 indices per byte)
Definition surface.h:111
@ FMT_I4
Format I4: 4-bit intensity (4-bit per pixel)
Definition surface.h:116
@ FMT_IA8
Format IA8: 4-bit intensity + 4-bit alpha (8-bit per pixel)
Definition surface.h:114
bool surface_has_owned_buffer(const surface_t *surface)
Checks whether this surface owns the buffer that it contains.
Definition surface.h:268
uint16_t stride
Stride in bytes (length of a row)
Definition surface.h:144
#define SURFACE_FLAGS_OWNEDBUFFER
Set if the buffer must be freed.
Definition surface.h:124
surface_t surface_make_sub(surface_t *parent, uint16_t x0, uint16_t y0, uint16_t width, uint16_t height)
Initialize a surface_t structure, pointing to a rectangular portion of another surface.
Definition surface.c:58
void * buffer
Buffer pointer.
Definition surface.h:145
surface_t surface_make(void *buffer, tex_format_t format, uint16_t width, uint16_t height, uint16_t stride)
Initialize a surface_t structure with the provided buffer.
Definition surface.h:170
uint16_t width
Width in pixels.
Definition surface.h:142
int surface_get_placeholder_index(const surface_t *surface)
Returns the lookup index of a placeholder surface.
Definition surface.h:334
surface_t surface_alloc(tex_format_t format, uint16_t width, uint16_t height)
Allocate a new surface in memory.
Definition surface.c:33
surface_t surface_make_placeholder_linear(int index, tex_format_t format, uint16_t width, uint16_t height)
Create a linear placeholder surface, that can be used during rdpq block recording.
Definition surface.h:320
#define TEX_FORMAT_PIX2BYTES(fmt, pixels)
Convert the specified number of pixels to bytes.
Definition surface.h:84
uint16_t height
Height in pixels.
Definition surface.h:143
surface_t surface_make_linear(void *buffer, tex_format_t format, uint16_t width, uint16_t height)
Initialize a surface_t structure with the provided linear buffer.
Definition surface.h:197
void surface_free(surface_t *surface)
Free the buffer allocated in a surface.
Definition surface.c:50
surface_t surface_make_placeholder(int index, tex_format_t format, uint16_t width, uint16_t height, uint16_t stride)
Create a placeholder surface, that can be used during rdpq block recording.
Definition surface.h:295
const char * tex_format_name(tex_format_t fmt)
Return the name of the texture format as a string (for debugging purposes)
Definition surface.c:15
tex_format_t surface_get_format(const surface_t *surface)
Returns the pixel format of a surface.
Definition surface.h:257
#define SURFACE_FLAGS_TEXFORMAT
Pixel format of the surface.
Definition surface.h:123
uint16_t flags
Flags (including pixel format)
Definition surface.h:141
A surface buffer for graphics.
Definition surface.h:140