(border) Add SGB, Gameboy-Player, and faux-SGBA border shaders

This commit is contained in:
Monroe88 2016-08-14 13:41:41 -05:00
parent 6a8527a94e
commit ea58e06f96
68 changed files with 210 additions and 0 deletions

View file

@ -0,0 +1,7 @@
These shader presets will allow you to apply a 608x448 Game Boy Player border around a 240x160 input image from a Game Boy Advance core, with the input being scaled 2x to fit the border.
Please note that RetroArch's integer scaling function will not automatically set a correct integer scale for the output image, as it will only take the Game Boy Advance core's reported resolution of 240x160 into account, and not the output image's 608x448 resolution. You will need to set a custom viewport size, either with the Custom Ratio menu option or defining custom_viewport_width and custom_viewport_height in the config file, setting Aspect Ratio Index to "Custom", and enabling Integer Scaling to center the image automatically.
An example border is included, you can swap it out with another 608x448 Game Boy Player border in png format with the center 240x160 transparent. The borders included with this shader were ripped from a Game Boy Player disc by a kind anonymous user and were edited to appear correct with a GBA image fully shown.
Using CRT-Royale with this border shader may result in flickering. This is due to it displaying the border shader as 480i, due to the output image being greater than 400px vertically. Disable interlacing detection in CRT Royale's user-settings.h if want 480p instead.

View file

@ -0,0 +1,20 @@
shaders = "2"
shader0 = "../../handheld/shaders/color/gba-color.slang"
shader1 = "../shaders/imgborder-gbp.slang"
scale_type0 = "source"
scale0 = "1.0000"
filter_linear0 = "false"
scale_type_x1 = "absolute"
scale_x1 = "608"
scale_type_y1 = "absolute"
scale_y1 = "448"
parameters = "box_scale;in_res_x;in_res_y"
box_scale = "2.000000"
in_res_x = "240.000000"
in_res_y = "160.000000"
textures = "BORDER"
BORDER = "gameboy-player.png"

Binary file not shown.

After

Width:  |  Height:  |  Size: 8 KiB

View file

@ -0,0 +1,15 @@
shaders = "1"
shader0 = "../shaders/imgborder-gbp.slang"
scale_type_x0 = "absolute"
scale_x0 = "608"
scale_type_y0 = "absolute"
scale_y0 = "448"
parameters = "box_scale;in_res_x;in_res_y"
box_scale = "2.000000"
in_res_x = "240.000000"
in_res_y = "160.000000"
textures = "BORDER"
BORDER = "gameboy-player.png"

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 274 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 140 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

5
border/sgb/README.txt Normal file
View file

@ -0,0 +1,5 @@
These shader presets will allow you to apply a 256x224 Super Game Boy border around a 160x144 input image from a Game Boy core.
Please note that RetroArch's integer scaling function will not automatically set a correct integer scale for the output image, as it will only take the Game Boy core's reported resolution of 160x144 into account, and not the output image's 256x224 resolution. You will need to set a custom viewport size, either with the Custom Ratio menu option or defining custom_viewport_width and custom_viewport_height in the config file, setting Aspect Ratio Index to "Custom", and enabling Integer Scaling to center the image automatically.
An example border is included, you can swap it out with another 256x224 Super Game Boy border in png format with the center 160x144 transparent. Borders derived from an emulator screenshot may be shifted up one pixel and off center, so you would need to shift it down one pixel to center it. The "Super Game Boy Color" borders were created by BLUEamnesiac.

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

BIN
border/sgb/sgb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

16
border/sgb/sgb.slangp Normal file
View file

@ -0,0 +1,16 @@
shaders = "1"
shader0 = "../shaders/imgborder-sgb.slang"
scale_type_x0 = "absolute"
scale_x0 = "256"
scale_type_y0 = "absolute"
scale_y0 = "224"
parameters = "box_scale;location;in_res_x;in_res_y"
box_scale = "1.000000"
location = "0.500000"
in_res_x = "160.000000"
in_res_y = "144.000000"
textures = "BORDER"
BORDER = "sgb.png"

5
border/sgba/README.txt Normal file
View file

@ -0,0 +1,5 @@
These shader presets will allow you to apply a 304x224 Super Game Boy Advance border around a 240x160 input image from a Game Boy Advance core.
Please note that RetroArch's integer scaling function will not automatically set a correct integer scale for the output image, as it will only take the Game Boy Advance core's reported resolution of 240x160 into account, and not the output image's 304x224 resolution. You will need to set a custom viewport size, either with the Custom Ratio menu option or defining custom_viewport_width and custom_viewport_height in the config file, setting Aspect Ratio Index to "Custom", and enabling Integer Scaling to center the image automatically.
An example border is included, you can swap it out with another 302x224 Super Game Boy Advance border in png format with the center 240x160 transparent. The borders included with this shader were created by BLUEamnesiac.

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View file

@ -0,0 +1,20 @@
shaders = "2"
shader0 = "../../handheld/shaders/color/gba-color.slang"
shader1 = "../shaders/imgborder-sgba.slang"
scale_type0 = "source"
scale0 = "1.0000"
filter_linear0 = "false"
scale_type_x1 = "absolute"
scale_x1 = "304"
scale_type_y1 = "absolute"
scale_y1 = "224"
parameters = "box_scale;in_res_x;in_res_y"
box_scale = "1.000000"
in_res_x = "240.000000"
in_res_y = "160.000000"
textures = "BORDER"
BORDER = "sgba.png"

BIN
border/sgba/sgba.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

15
border/sgba/sgba.slangp Normal file
View file

@ -0,0 +1,15 @@
shaders = "1"
shader0 = "../shaders/imgborder-sgba.slang"
scale_type_x0 = "absolute"
scale_x0 = "304"
scale_type_y0 = "absolute"
scale_y0 = "224"
parameters = "box_scale;in_res_x;in_res_y"
box_scale = "1.000000"
in_res_x = "240.000000"
in_res_y = "160.000000"
textures = "BORDER"
BORDER = "sgba.png"

View file

@ -0,0 +1,12 @@
#version 450
#pragma parameter box_scale "Image Scale" 2.0 1.0 10.0 1.0
#pragma parameter location_x "Viewport X Pos." 0.5 0.0 1.0 0.05
#pragma parameter location_y "Viewport Y Pos." 0.5 0.0 1.0 0.05
#pragma parameter in_res_x "Viewport Size X" 240.0 100.0 600.0 1.0
#pragma parameter in_res_y "Viewport Size Y" 160.0 64.0 512.0 1.0
#pragma parameter border_on_top "Show Viewport" 1.0 0.0 1.0 1.0
#pragma parameter border_zoom_x "Border Zoom X" 1.0 0.0 4.0 0.01
#pragma parameter border_zoom_y "Border Zoom Y" 1.0 0.0 4.0 0.01
#include "imgborder.inc"

View file

@ -0,0 +1,12 @@
#version 450
#pragma parameter box_scale "Image Scale" 1.0 1.0 10.0 1.0
#pragma parameter location_x "Viewport X Pos." 0.5 0.0 1.0 0.05
#pragma parameter location_y "Viewport Y Pos." 0.5 0.0 1.0 0.05
#pragma parameter in_res_x "Viewport Size X" 160.0 100.0 600.0 1.0
#pragma parameter in_res_y "Viewport Size Y" 144.0 64.0 512.0 1.0
#pragma parameter border_on_top "Show Viewport" 1.0 0.0 1.0 1.0
#pragma parameter border_zoom_x "Border Zoom X" 1.0 0.0 4.0 0.01
#pragma parameter border_zoom_y "Border Zoom Y" 1.0 0.0 4.0 0.01
#include "imgborder.inc"

View file

@ -0,0 +1,12 @@
#version 450
#pragma parameter box_scale "Image Scale" 1.0 1.0 10.0 1.0
#pragma parameter location_x "Viewport X Pos." 0.5 0.0 1.0 0.05
#pragma parameter location_y "Viewport Y Pos." 0.5 0.0 1.0 0.05
#pragma parameter in_res_x "Viewport Size X" 240.0 100.0 600.0 1.0
#pragma parameter in_res_y "Viewport Size Y" 160.0 64.0 512.0 1.0
#pragma parameter border_on_top "Show Viewport" 1.0 0.0 1.0 1.0
#pragma parameter border_zoom_x "Border Zoom X" 1.0 0.0 4.0 0.01
#pragma parameter border_zoom_y "Border Zoom Y" 1.0 0.0 4.0 0.01
#include "imgborder.inc"

View file

@ -0,0 +1,59 @@
// Created by inigo quilez - iq/2014
// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
// modified for slang border shader by hunterk
layout(push_constant) uniform Push
{
vec4 OutputSize;
vec4 OriginalSize;
vec4 SourceSize;
uint FrameCount;
float box_scale;
float location_x;
float location_y;
float in_res_x;
float in_res_y;
float border_on_top;
float border_zoom_x;
float border_zoom_y;
} params;
layout(std140, set = 0, binding = 0) uniform UBO
{
mat4 MVP;
} global;
#pragma stage vertex
layout(location = 0) in vec4 Position;
layout(location = 1) in vec2 TexCoord;
layout(location = 0) out vec2 vTexCoord;
layout(location = 1) out vec2 screen_coord;
void main()
{
gl_Position = global.MVP * Position;
vec2 corrected_size = vec2(params.in_res_x, params.in_res_y);
vec2 scale = (params.OutputSize.xy / corrected_size) / params.box_scale;
vec2 middle = vec2(params.location_x, params.location_y);
vec2 diff = TexCoord.xy - middle;
screen_coord = middle + diff * scale;
middle = vec2(0.4999, 0.4999);
vTexCoord = middle + diff * vec2(params.border_zoom_x, params.border_zoom_y);
}
#pragma stage fragment
layout(location = 0) in vec2 vTexCoord;
layout(location = 1) in vec2 screen_coord;
layout(location = 0) out vec4 FragColor;
layout(set = 0, binding = 2) uniform sampler2D Source;
layout(set = 0, binding = 3) uniform sampler2D Original;
layout(set = 0, binding = 4) uniform sampler2D BORDER;
void main()
{
vec4 screen = texture(Source, screen_coord); //the main video screen
vec4 background = vec4(texture(BORDER, vTexCoord)); //put your background function's output here
if ( screen_coord.x < 0.9999 && screen_coord.x > 0.0001 && screen_coord.y < 0.9999 && screen_coord.y > 0.0001 && params.border_on_top > 0.5 )
background.a *= 0.0;
FragColor = vec4(mix(screen, background, background.a));
}

View file

@ -0,0 +1,12 @@
#version 450
#pragma parameter box_scale "Image Scale" 4.0 1.0 10.0 1.0
#pragma parameter location_x "Viewport X Pos." 0.5 0.0 1.0 0.05
#pragma parameter location_y "Viewport Y Pos." 0.5 0.0 1.0 0.05
#pragma parameter in_res_x "Viewport Size X" 320.0 100.0 600.0 1.0
#pragma parameter in_res_y "Viewport Size Y" 240.0 64.0 512.0 1.0
#pragma parameter border_on_top "Show Viewport" 1.0 0.0 1.0 1.0
#pragma parameter border_zoom_x "Border Zoom X" 1.0 0.0 4.0 0.01
#pragma parameter border_zoom_y "Border Zoom Y" 1.0 0.0 4.0 0.01
#include "imgborder.inc"