all repos — mgba @ fb2ddd6c32a16d86535989fea8743aea01e30504

mGBA Game Boy Advance Emulator

src/gba/renderers/video-software.h (view raw)

 1#ifndef VIDEO_SOFTWARE_H
 2#define VIDEO_SOFTWARE_H
 3
 4#include "gba-video.h"
 5
 6#include <pthread.h>
 7
 8struct GBAVideoSoftwareBackground {
 9	int index;
10	int enabled;
11	int priority;
12	uint32_t charBase;
13	int mosaic;
14	int multipalette;
15	uint32_t screenBase;
16	int overflow;
17	int size;
18	int target1;
19	int target2;
20	uint16_t x;
21	uint16_t y;
22	int32_t refx;
23	int32_t refy;
24	int16_t dx;
25	int16_t dmx;
26	int16_t dy;
27	int16_t dmy;
28	int32_t sx;
29	int32_t sy;
30};
31
32enum BlendEffect {
33	BLEND_NONE = 0,
34	BLEND_ALPHA = 1,
35	BLEND_BRIGHTEN = 2,
36	BLEND_DARKEN = 3
37};
38
39enum {
40	GBA_COLOR_WHITE = 0x00F8F8F8,
41	OFFSET_PRIORITY = 29
42};
43
44enum PixelFlags {
45	FLAG_FINALIZED = 0x80000000,
46	FLAG_PRIORITY = 0x60000000,
47	FLAG_IS_BACKGROUND = 0x10000000,
48	FLAG_UNWRITTEN = 0x08000000,
49	FLAG_TARGET_1 = 0x04000000,
50	FLAG_TARGET_2 = 0x02000000
51};
52
53struct GBAVideoSoftwareRenderer {
54	struct GBAVideoRenderer d;
55
56	uint32_t* outputBuffer;
57	unsigned outputBufferStride;
58
59	union GBARegisterDISPCNT dispcnt;
60
61	uint32_t spriteLayer[VIDEO_HORIZONTAL_PIXELS];
62
63	// BLDCNT
64	unsigned target1Obj;
65	unsigned target1Bd;
66	unsigned target2Obj;
67	unsigned target2Bd;
68	enum BlendEffect blendEffect;
69	uint32_t normalPalette[512];
70	uint32_t variantPalette[512];
71
72	uint16_t blda;
73	uint16_t bldb;
74	uint16_t bldy;
75
76	struct GBAVideoSoftwareBackground bg[4];
77
78	uint32_t* row;
79	int start;
80	int end;
81
82	pthread_mutex_t mutex;
83	pthread_cond_t upCond;
84	pthread_cond_t downCond;
85};
86
87void GBAVideoSoftwareRendererCreate(struct GBAVideoSoftwareRenderer* renderer);
88
89#endif