mirror of https://github.com/mgba-emu/mgba.git
DS Video: Layer toggling
This commit is contained in:
parent
154dd2e8e7
commit
a5f664ca72
|
@ -112,6 +112,12 @@ struct DSVideoRenderer {
|
|||
uint16_t* vramBOBJ[32];
|
||||
uint16_t* vramBBGExtPal[4];
|
||||
uint16_t* vramBOBJExtPal;
|
||||
|
||||
bool disableABG[4];
|
||||
bool disableAOBJ;
|
||||
bool disableBBG[4];
|
||||
bool disableBOBJ;
|
||||
|
||||
union DSOAM* oam;
|
||||
struct DSGX* gx;
|
||||
};
|
||||
|
|
|
@ -24,11 +24,11 @@ const static struct mCoreChannelInfo _DSVideoLayers[] = {
|
|||
{ 2, "abg2", "A BG2", NULL },
|
||||
{ 3, "abg3", "A BG3", NULL },
|
||||
{ 4, "aobj", "A OBJ", NULL },
|
||||
{ 5, "bbg0", "B BG0", "2D/3D" },
|
||||
{ 6, "bbg1", "B BG1", NULL },
|
||||
{ 7, "bbg2", "B BG2", NULL },
|
||||
{ 8, "bbg3", "B BG3", NULL },
|
||||
{ 9, "bobj", "B OBJ", NULL },
|
||||
{ 10, "bbg0", "B BG0", "2D/3D" },
|
||||
{ 11, "bbg1", "B BG1", NULL },
|
||||
{ 12, "bbg2", "B BG2", NULL },
|
||||
{ 13, "bbg3", "B BG3", NULL },
|
||||
{ 14, "bobj", "B OBJ", NULL },
|
||||
};
|
||||
|
||||
const static struct mCoreChannelInfo _DSAudioChannels[] = {
|
||||
|
@ -564,7 +564,28 @@ static size_t _DSCoreListAudioChannels(const struct mCore* core, const struct mC
|
|||
|
||||
static void _DSCoreEnableVideoLayer(struct mCore* core, size_t id, bool enable) {
|
||||
struct DS* ds = core->board;
|
||||
// TODO
|
||||
switch (id) {
|
||||
case 0:
|
||||
case 1:
|
||||
case 2:
|
||||
case 3:
|
||||
ds->video.renderer->disableABG[id] = !enable;
|
||||
break;
|
||||
case 4:
|
||||
ds->video.renderer->disableAOBJ = !enable;
|
||||
break;
|
||||
case 10:
|
||||
case 11:
|
||||
case 12:
|
||||
case 13:
|
||||
ds->video.renderer->disableBBG[id - 10] = !enable;
|
||||
break;
|
||||
case 14:
|
||||
ds->video.renderer->disableBOBJ = !enable;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void _DSCoreEnableAudioChannel(struct mCore* core, size_t id, bool enable) {
|
||||
|
|
|
@ -146,6 +146,18 @@ void DSVideoSoftwareRendererCreate(struct DSVideoSoftwareRenderer* renderer) {
|
|||
renderer->d.getPixels = DSVideoSoftwareRendererGetPixels;
|
||||
renderer->d.putPixels = DSVideoSoftwareRendererPutPixels;
|
||||
|
||||
renderer->d.disableABG[0] = false;
|
||||
renderer->d.disableABG[1] = false;
|
||||
renderer->d.disableABG[2] = false;
|
||||
renderer->d.disableABG[3] = false;
|
||||
renderer->d.disableAOBJ = false;
|
||||
|
||||
renderer->d.disableBBG[0] = false;
|
||||
renderer->d.disableBBG[1] = false;
|
||||
renderer->d.disableBBG[2] = false;
|
||||
renderer->d.disableBBG[3] = false;
|
||||
renderer->d.disableBOBJ = false;
|
||||
|
||||
renderer->engA.d.cache = NULL;
|
||||
GBAVideoSoftwareRendererCreate(&renderer->engA);
|
||||
renderer->engA.combinedObjSort = true;
|
||||
|
@ -611,6 +623,18 @@ static void DSVideoSoftwareRendererDrawScanline(struct DSVideoRenderer* renderer
|
|||
softwareRenderer->engB.outputBuffer = &softwareRenderer->outputBuffer[softwareRenderer->outputBufferStride * DS_VIDEO_VERTICAL_PIXELS];
|
||||
}
|
||||
|
||||
softwareRenderer->engA.d.disableBG[0] = softwareRenderer->d.disableABG[0];
|
||||
softwareRenderer->engA.d.disableBG[1] = softwareRenderer->d.disableABG[1];
|
||||
softwareRenderer->engA.d.disableBG[2] = softwareRenderer->d.disableABG[2];
|
||||
softwareRenderer->engA.d.disableBG[3] = softwareRenderer->d.disableABG[3];
|
||||
softwareRenderer->engA.d.disableOBJ = softwareRenderer->d.disableAOBJ;
|
||||
|
||||
softwareRenderer->engB.d.disableBG[0] = softwareRenderer->d.disableBBG[0];
|
||||
softwareRenderer->engB.d.disableBG[1] = softwareRenderer->d.disableBBG[1];
|
||||
softwareRenderer->engB.d.disableBG[2] = softwareRenderer->d.disableBBG[2];
|
||||
softwareRenderer->engB.d.disableBG[3] = softwareRenderer->d.disableBBG[3];
|
||||
softwareRenderer->engB.d.disableOBJ = softwareRenderer->d.disableBOBJ;
|
||||
|
||||
_drawScanlineA(softwareRenderer, y);
|
||||
_drawScanlineB(softwareRenderer, y);
|
||||
}
|
||||
|
|
|
@ -902,7 +902,7 @@ void GameController::startAudio() {
|
|||
}
|
||||
|
||||
void GameController::setVideoLayerEnabled(int layer, bool enable) {
|
||||
if (layer > 4 || layer < 0) {
|
||||
if (layer > 32 || layer < 0) {
|
||||
return;
|
||||
}
|
||||
m_videoLayers.reserve(layer + 1);
|
||||
|
|
Loading…
Reference in New Issue