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:
parent
a177f44b88
commit
24bcbb8dfd
1 changed files with 48 additions and 14 deletions
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue