From 40b06463de85c2e7027a3da727ff6ce621922428 Mon Sep 17 00:00:00 2001 From: otya128 Date: Tue, 25 Aug 2015 19:37:22 +0900 Subject: [PATCH] =?UTF-8?q?XSCREEN=204=E5=AE=9F=E8=A3=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SMILEBASIC/petitcomputer.d | 94 +++++++++++++++++++++++++++++++++----- SMILEBASIC/sprite.d | 7 +++ 2 files changed, 90 insertions(+), 11 deletions(-) diff --git a/SMILEBASIC/petitcomputer.d b/SMILEBASIC/petitcomputer.d index 5966bc6..9a422bc 100644 --- a/SMILEBASIC/petitcomputer.d +++ b/SMILEBASIC/petitcomputer.d @@ -588,7 +588,7 @@ class PetitComputer } if(mode == 4) { - SDL_SetWindowSize(window, 320, 240); + SDL_SetWindowSize(window, 320, 240 * 2); } xscreenmode = mode2; } @@ -684,6 +684,10 @@ class PetitComputer { glViewport(0, 240, 400, 240); } + if(xscreenmode == 2) + { + glViewport(0, 0, 320, 480); + } //描画の順位 //sprite>GRP>console>BG glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); @@ -698,13 +702,24 @@ class PetitComputer { glViewport(0, 240, 400, 240); } - renderGraphicPage(0, 400, 240); + if(xscreenmode == 2) + { + renderGraphicPage(0, 320, 480); + } + else + { + renderGraphicPage(0, 400, 240); + } if(xscreenmode == 1) { glViewport(40, 0, 320, 240); renderGraphicPage(1, 320, 240); glViewport(0, 240, 400, 240); } + if(xscreenmode == 2) + { + glViewport(0, 0, 320, 480); + } renderConsoleGL(); if(xscreenmode == 1) { @@ -713,18 +728,28 @@ class PetitComputer version(test) glLoadIdentity(); version(test) glRotatef(45f, 1f, 0f, 0.5f); glBindTexture(GL_TEXTURE_2D, GRP[bgpage].glTexture); - for(int i = 0; i < bgmax; i++) + if(xscreenmode == 2) { - bg[i].render(400f, 240f); - } - if(xscreenmode == 1) - { - glViewport(40, 0, 320, 240); - for(int i = bgmax; i < bg.length; i++) + for(int i = 0; i < bgmax; i++) { - bg[i].render(320f, 240f); + bg[i].render(320f, 480f); + } + } + else + { + for(int i = 0; i < bgmax; i++) + { + bg[i].render(400f, 240f); + } + if(xscreenmode == 1) + { + glViewport(40, 0, 320, 240); + for(int i = bgmax; i < bg.length; i++) + { + bg[i].render(320f, 240f); + } + glViewport(0, 240, 400, 240); } - glViewport(0, 240, 400, 240); } version(test) glLoadIdentity(); version(test) glRotatef(45f, 1f, 0f, 0.5f); @@ -1153,6 +1178,53 @@ class PetitComputer } void renderConsoleGL() { + if(xscreenmode == 2) + { + glBindTexture(GL_TEXTURE_2D, GRPF.glTexture); + glDisable(GL_TEXTURE_2D); + glBegin(GL_QUADS); + for(int y = 0; y < consoleHeight; y++) + for(int x = 0; x < consoleWidth; x++) + { + auto back = consoleColorGL[console[y][x].backColor]; + glColor4ubv(cast(ubyte*)&back); + glVertex3f((x * 8) / 160f - 1, 1 - (y * 8 + 8) / 240f, 0.9f); + glVertex3f((x * 8) / 160f - 1, 1 - (y * 8) / 240f, 0.9f); + glVertex3f((x * 8 + 8) / 160f - 1, 1 - (y * 8) / 240f, 0.9f); + glVertex3f((x * 8 + 8) / 160f - 1, 1 - (y * 8 + 8) / 240f, 0.9f); + } + if(showCursor && animationCursor) + { + glColor4ubv(cast(ubyte*)&consoleColorGL[15]); + glVertex3f((CSRX * 8) / 160f - 1, 1 - (CSRY * 8 + 8) / 240f, -0.9f); + glVertex3f((CSRX * 8) / 160f - 1, 1 - (CSRY * 8) / 240f, -0.9f); + glVertex3f((CSRX * 8 + 2) / 160f - 1, 1 - (CSRY * 8) / 240f, -0.9f); + glVertex3f((CSRX * 8 + 2) / 160f - 1, 1 - (CSRY * 8 + 8) / 240f, -0.9f); + } + glEnd(); + glEnable(GL_TEXTURE_2D); + + //glAlphaFunc(GL_GEQUAL, 0.5); + //glEnable(GL_ALPHA_TEST); + glBegin(GL_QUADS); + for(int y = 0; y < consoleHeight; y++) + for(int x = 0; x < consoleWidth; x++) + { + auto fore = consoleColorGL[console[y][x].foreColor]; + auto rect = &fontTable[console[y][x].character]; + glColor4ubv(cast(ubyte*)&fore); + glTexCoord2f((rect.x) / 512f - 1 , (rect.y + 8) / 512f - 1); + glVertex3f((x * 8) / 160f - 1, 1 - (y * 8 + 8) / 240f, 0); + glTexCoord2f((rect.x) / 512f - 1, (rect.y) / 512f - 1); + glVertex3f((x * 8) / 160f - 1, 1 - (y * 8) / 240f, 0); + glTexCoord2f((rect.x + 8) / 512f - 1, (rect.y) / 512f - 1); + glVertex3f((x * 8 + 8) / 160f - 1, 1 - (y * 8) / 240f, 0); + glTexCoord2f((rect.x + 8) / 512f - 1, (rect.y +8) / 512f - 1); + glVertex3f((x * 8 + 8) / 160f - 1, 1 - (y * 8 + 8) / 240f, 0); + } + glEnd(); + return; + } //consolem.lock(); //scope(exit) consolem.unlock(); glBindTexture(GL_TEXTURE_2D, GRPF.glTexture); diff --git a/SMILEBASIC/sprite.d b/SMILEBASIC/sprite.d index 0de3788..27ce63d 100644 --- a/SMILEBASIC/sprite.d +++ b/SMILEBASIC/sprite.d @@ -391,6 +391,13 @@ class Sprite void render() { float disw = 200f, dish = 120f, disw2 = 400f, dish2 = 240f; + if(petitcom.xscreenmode == 2) + { + disw = 160f; + disw2 = 320f; + dish = 240f; + dish2 = 480f; + } auto texture = petitcom.GRP[petitcom.sppage].glTexture; float aspect = disw2 / dish2; float z = -0.01f;