Upscale 320x240 to 640x480 on the Wii U

For performance reasons, I'm going to switch to 320x240 for Wii U
builds.
This commit is contained in:
Clownacy 2020-04-17 14:15:59 +01:00
parent a177f44b88
commit 24bcbb8dfd

View file

@ -1,6 +1,7 @@
#include "../Window-Software.h" #include "../Window-Software.h"
#include <stdlib.h> #include <stdlib.h>
#include <string.h>
//#include <coreinit/cache.h> //#include <coreinit/cache.h>
#include <coreinit/screen.h> #include <coreinit/screen.h>
@ -66,22 +67,55 @@ void WindowBackend_Software_Display(void)
const unsigned char *in_pointer = fake_framebuffer; const unsigned char *in_pointer = fake_framebuffer;
for (size_t y = 0; y < framebuffer_height; ++y) if (framebuffer_width == 320 && framebuffer_height == 240)
{ {
unsigned char *out_pointer = &drc_framebuffer[line_size * y]; for (size_t y = 0; y < framebuffer_height; ++y)
if (!flipflop)
out_pointer += drc_buffer_size / 2;
out_pointer += ((854 - framebuffer_width) * 4) / 2;
out_pointer += ((480 - framebuffer_height) * line_size) / 2;
for (size_t x = 0; x < framebuffer_width; ++x)
{ {
*out_pointer++ = *in_pointer++; unsigned char *out_line = &drc_framebuffer[line_size * 2 * y];
*out_pointer++ = *in_pointer++;
*out_pointer++ = *in_pointer++; if (!flipflop)
*out_pointer++ = 0; out_line += drc_buffer_size / 2;
out_line += ((854 - (framebuffer_width * 2)) * 4) / 2;
unsigned char *out_pointer = out_line;
for (size_t x = 0; x < framebuffer_width; ++x)
{
*out_pointer++ = in_pointer[0];
*out_pointer++ = in_pointer[1];
*out_pointer++ = in_pointer[2];
*out_pointer++ = 0;
*out_pointer++ = in_pointer[0];
*out_pointer++ = in_pointer[1];
*out_pointer++ = in_pointer[2];
*out_pointer++ = 0;
in_pointer += 3;
}
memcpy(out_line + line_size, out_line, framebuffer_width * 4 * 2);
}
}
else
{
for (size_t y = 0; y < framebuffer_height; ++y)
{
unsigned char *out_pointer = &drc_framebuffer[line_size * y];
if (!flipflop)
out_pointer += drc_buffer_size / 2;
out_pointer += ((854 - framebuffer_width) * 4) / 2;
out_pointer += ((480 - framebuffer_height) * line_size) / 2;
for (size_t x = 0; x < framebuffer_width; ++x)
{
*out_pointer++ = *in_pointer++;
*out_pointer++ = *in_pointer++;
*out_pointer++ = *in_pointer++;
*out_pointer++ = 0;
}
} }
} }