all repos — mgba @ 453939fc8d143c2eea846bab23c6f5d3d9cd72b8

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
 53union WindowRegion {
 54	struct {
 55		uint8_t end;
 56		uint8_t start;
 57	};
 58	uint16_t packed;
 59};
 60
 61union WindowControl {
 62	struct {
 63		unsigned bg0Enable : 1;
 64		unsigned bg1Enable : 1;
 65		unsigned bg2Enable : 1;
 66		unsigned bg3Enable : 1;
 67		unsigned objEnable : 1;
 68		unsigned blendEnable : 1;
 69		unsigned : 2;
 70	};
 71	uint8_t packed;
 72};
 73
 74#define MAX_WINDOW 5
 75
 76struct Window {
 77	uint8_t endX;
 78	union WindowControl control;
 79};
 80
 81struct GBAVideoSoftwareRenderer {
 82	struct GBAVideoRenderer d;
 83
 84	uint32_t* outputBuffer;
 85	unsigned outputBufferStride;
 86
 87	union GBARegisterDISPCNT dispcnt;
 88
 89	uint32_t spriteLayer[VIDEO_HORIZONTAL_PIXELS];
 90
 91	// BLDCNT
 92	unsigned target1Obj;
 93	unsigned target1Bd;
 94	unsigned target2Obj;
 95	unsigned target2Bd;
 96	enum BlendEffect blendEffect;
 97	uint32_t normalPalette[512];
 98	uint32_t variantPalette[512];
 99
100	uint16_t blda;
101	uint16_t bldb;
102	uint16_t bldy;
103
104	union WindowRegion win0H;
105	union WindowRegion win0V;
106	union WindowRegion win1H;
107	union WindowRegion win1V;
108
109	union WindowControl win0;
110	union WindowControl win1;
111	union WindowControl winout;
112	union WindowControl objwin;
113
114	union WindowControl currentWindow;
115
116	int nWindows;
117	struct Window windows[MAX_WINDOW];
118
119	struct GBAVideoSoftwareBackground bg[4];
120
121	uint32_t* row;
122	int start;
123	int end;
124
125	uint32_t enabledBitmap[4];
126
127	pthread_mutex_t mutex;
128	pthread_cond_t upCond;
129	pthread_cond_t downCond;
130};
131
132void GBAVideoSoftwareRendererCreate(struct GBAVideoSoftwareRenderer* renderer);
133
134#endif