all repos — mgba @ 5ad70925670fcc5069eb093c264d62f45c6b7131

mGBA Game Boy Advance Emulator

src/ds/renderers/software.c (view raw)

 1/* Copyright (c) 2013-2017 Jeffrey Pfau
 2 *
 3 * This Source Code Form is subject to the terms of the Mozilla Public
 4 * License, v. 2.0. If a copy of the MPL was not distributed with this
 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 6#include <mgba/internal/ds/renderers/software.h>
 7
 8static void DSVideoSoftwareRendererInit(struct DSVideoRenderer* renderer);
 9static void DSVideoSoftwareRendererDeinit(struct DSVideoRenderer* renderer);
10static void DSVideoSoftwareRendererReset(struct DSVideoRenderer* renderer);
11static uint16_t DSVideoSoftwareRendererWriteVideoRegister(struct DSVideoRenderer* renderer, uint32_t address, uint16_t value);
12static void DSVideoSoftwareRendererDrawScanline(struct DSVideoRenderer* renderer, int y);
13static void DSVideoSoftwareRendererFinishFrame(struct DSVideoRenderer* renderer);
14static void DSVideoSoftwareRendererGetPixels(struct DSVideoRenderer* renderer, size_t* stride, const void** pixels);
15static void DSVideoSoftwareRendererPutPixels(struct DSVideoRenderer* renderer, size_t stride, const void* pixels);
16
17void DSVideoSoftwareRendererCreate(struct DSVideoSoftwareRenderer* renderer) {
18	renderer->d.init = DSVideoSoftwareRendererInit;
19	renderer->d.reset = DSVideoSoftwareRendererReset;
20	renderer->d.deinit = DSVideoSoftwareRendererDeinit;
21	renderer->d.writeVideoRegister = DSVideoSoftwareRendererWriteVideoRegister;
22	renderer->d.drawScanline = DSVideoSoftwareRendererDrawScanline;
23	renderer->d.finishFrame = DSVideoSoftwareRendererFinishFrame;
24	renderer->d.getPixels = DSVideoSoftwareRendererGetPixels;
25	renderer->d.putPixels = DSVideoSoftwareRendererPutPixels;
26
27	renderer->engA.d.cache = NULL;
28	GBAVideoSoftwareRendererCreate(&renderer->engA);
29	renderer->engB.d.cache = NULL;
30	GBAVideoSoftwareRendererCreate(&renderer->engB);
31}
32
33static void DSVideoSoftwareRendererInit(struct DSVideoRenderer* renderer) {
34	struct DSVideoSoftwareRenderer* softwareRenderer = (struct DSVideoSoftwareRenderer*) renderer;
35	softwareRenderer->engA.d.palette = &renderer->palette[0];
36	softwareRenderer->engA.d.oam = &renderer->oam->oam[0];
37	// TODO: VRAM
38	softwareRenderer->engB.d.palette = &renderer->palette[512];
39	softwareRenderer->engB.d.oam = &renderer->oam->oam[1];
40	// TODO: VRAM
41
42	DSVideoSoftwareRendererReset(renderer);
43}
44
45static void DSVideoSoftwareRendererReset(struct DSVideoRenderer* renderer) {
46	struct DSVideoSoftwareRenderer* softwareRenderer = (struct DSVideoSoftwareRenderer*) renderer;
47	softwareRenderer->engA.d.reset(&softwareRenderer->engA.d);
48	softwareRenderer->engB.d.reset(&softwareRenderer->engB.d);
49}
50
51static void DSVideoSoftwareRendererDeinit(struct DSVideoRenderer* renderer) {
52	struct DSVideoSoftwareRenderer* softwareRenderer = (struct DSVideoSoftwareRenderer*) renderer;
53	softwareRenderer->engA.d.deinit(&softwareRenderer->engA.d);
54	softwareRenderer->engB.d.deinit(&softwareRenderer->engB.d);
55}
56
57static uint16_t DSVideoSoftwareRendererWriteVideoRegister(struct DSVideoRenderer* renderer, uint32_t address, uint16_t value) {
58	mLOG(DS_VIDEO, STUB, "Stub video register write: %04X:%04X", address, value);
59	return value;
60}
61
62static void DSVideoSoftwareRendererDrawScanline(struct DSVideoRenderer* renderer, int y) {
63}
64
65static void DSVideoSoftwareRendererFinishFrame(struct DSVideoRenderer* renderer) {
66}
67
68static void DSVideoSoftwareRendererGetPixels(struct DSVideoRenderer* renderer, size_t* stride, const void** pixels) {
69}
70
71static void DSVideoSoftwareRendererPutPixels(struct DSVideoRenderer* renderer, size_t stride, const void* pixels) {
72}