all repos — mgba @ 7291fcfe9e61e65501eef8ec6c223bd951bba98d

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 Window {
 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
 74struct GBAVideoSoftwareRenderer {
 75	struct GBAVideoRenderer d;
 76
 77	uint32_t* outputBuffer;
 78	unsigned outputBufferStride;
 79
 80	union GBARegisterDISPCNT dispcnt;
 81
 82	uint32_t spriteLayer[VIDEO_HORIZONTAL_PIXELS];
 83
 84	// BLDCNT
 85	unsigned target1Obj;
 86	unsigned target1Bd;
 87	unsigned target2Obj;
 88	unsigned target2Bd;
 89	enum BlendEffect blendEffect;
 90	uint32_t normalPalette[512];
 91	uint32_t variantPalette[512];
 92
 93	uint16_t blda;
 94	uint16_t bldb;
 95	uint16_t bldy;
 96
 97	union Window win0H;
 98	union Window win0V;
 99	union Window win1H;
100	union Window win1V;
101
102	union WindowControl win0;
103	union WindowControl win1;
104	union WindowControl winout;
105	union WindowControl objwin;
106
107	union WindowControl currentWindow;
108
109	struct GBAVideoSoftwareBackground bg[4];
110
111	uint32_t* row;
112	int start;
113	int end;
114
115	uint32_t enabledBitmap[4];
116
117	pthread_mutex_t mutex;
118	pthread_cond_t upCond;
119	pthread_cond_t downCond;
120};
121
122void GBAVideoSoftwareRendererCreate(struct GBAVideoSoftwareRenderer* renderer);
123
124#endif