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}