summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd
diff options
context:
space:
mode:
author therealmogminer@gmail.com <therealmogminer@gmail.com>2016-04-19 16:29:30 +0200
committer therealmogminer@gmail.com <therealmogminer@gmail.com>2016-04-19 16:29:30 +0200
commitf8034ac81238c8637c149dc40efdc4c42dda9545 (patch)
tree9c34c76d9067ce8e3803764896b10c4cfa401df9 /src/osd
parentc64b88bc78a4810ce0c75eb4d6651e5a26cc2bad (diff)
bgfx: Added SuperEagle shader. [Ryan Holtz]
Diffstat (limited to 'src/osd')
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_blit.sc14
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_eagle.sc165
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/supereagle/varying.def.sc14
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_blit.sc14
-rw-r--r--src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_eagle.sc43
5 files changed, 250 insertions, 0 deletions
diff --git a/src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_blit.sc
new file mode 100644
index 00000000000..874846cce0d
--- /dev/null
+++ b/src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_blit.sc
@@ -0,0 +1,14 @@
+$input v_color0, texCoord
+
+// license:BSD-3-Clause
+// copyright-holders:Dario Manesku
+
+#include "common.sh"
+
+// Samplers
+SAMPLER2D(s_tex, 0);
+
+void main()
+{
+ gl_FragColor = texture2D(s_tex, texCoord) * v_color0;
+}
diff --git a/src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_eagle.sc b/src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_eagle.sc
new file mode 100644
index 00000000000..a07a848ffbd
--- /dev/null
+++ b/src/osd/modules/render/bgfx/shaders/chains/supereagle/fs_eagle.sc
@@ -0,0 +1,165 @@
+$input v_color0, texCoord, t1, t2, t3, t4, t5, t6, t7, t8
+
+// license:GPL-2.0+
+// copyright-holders:The DOSBox Team
+
+/* SuperEagle code */
+/* Copied from the Dosbox source code */
+/* Copyright (C) 2002-2007 The DOSBox Team */
+/* License: GNU-GPL */
+/* Adapted by guest(r) on 16.4.2007 */
+
+#include "common.sh"
+
+// Autos
+uniform vec4 u_tex_size0;
+
+// Samplers
+SAMPLER2D(decal, 0);
+
+float reduce(vec3 color)
+{
+ return dot(color, vec3(65536.0, 255.0, 1.0));
+}
+
+/* GET_RESULT function */
+/* Copyright (c) 1999-2001 by Derek Liauw Kie Fa */
+/* License: GNU-GPL */
+float GET_RESULT(float A, float B, float C, float D)
+{
+ float x = 0.0;
+ float y = 0.0;
+ float r = 0.0;
+ if (A == C) x += 1.0; else if (B == C) y += 1.0;
+ if (A == D) x += 1.0; else if (B == D) y += 1.0;
+ if (x <= 1.0) r += 1.0;
+ if (y <= 1.0) r -= 1.0;
+ return r;
+}
+
+void main()
+{
+ vec2 fp = fract(texCoord * u_tex_size0.xy);
+
+ // Reading the texels
+
+ vec3 C0 = texture2D(decal, t1.xy).xyz;
+ vec3 C1 = texture2D(decal, t1.zw).xyz;
+ vec3 C2 = texture2D(decal, t2.xy).xyz;
+ vec3 D3 = texture2D(decal, t2.zw).xyz;
+ vec3 C3 = texture2D(decal, t3.xy).xyz;
+ vec3 C4 = texture2D(decal, texCoord).xyz;
+ vec3 C5 = texture2D(decal, t3.zw).xyz;
+ vec3 D4 = texture2D(decal, t4.xy).xyz;
+ vec3 C6 = texture2D(decal, t4.zw).xyz;
+ vec3 C7 = texture2D(decal, t5.xy).xyz;
+ vec3 C8 = texture2D(decal, t5.zw).xyz;
+ vec3 D5 = texture2D(decal, t6.xy).xyz;
+ vec3 D0 = texture2D(decal, t6.zw).xyz;
+ vec3 D1 = texture2D(decal, t7.xy).xyz;
+ vec3 D2 = texture2D(decal, t7.zw).xyz;
+ vec3 D6 = texture2D(decal, t8.xy).xyz;
+
+ vec3 p00,p10,p01,p11;
+
+ // reducing float3 to float
+ float c0 = reduce(C0); float c1 = reduce(C1);
+ float c2 = reduce(C2); float c3 = reduce(C3);
+ float c4 = reduce(C4); float c5 = reduce(C5);
+ float c6 = reduce(C6); float c7 = reduce(C7);
+ float c8 = reduce(C8); float d0 = reduce(D0);
+ float d1 = reduce(D1); float d2 = reduce(D2);
+ float d3 = reduce(D3); float d4 = reduce(D4);
+ float d5 = reduce(D5); float d6 = reduce(D6);
+
+ /* SuperEagle code */
+ /* Copied from the Dosbox source code */
+ /* Copyright (C) 2002-2007 The DOSBox Team */
+ /* License: GNU-GPL */
+ /* Adapted by guest(r) on 16.4.2007 */
+ if (c4 != c8)
+ {
+ if (c7 == c5)
+ {
+ p01 = p10 = C7;
+ if ((c6 == c7) || (c5 == c2))
+ {
+ p00 = 0.25 * (3.0 * C7 + C4);
+ }
+ else
+ {
+ p00 = 0.5 * (C4 + C5);
+ }
+
+ if ((c5 == d4) || (c7 == d1))
+ {
+ p11 = 0.25 * (3.0 * C7 + C8);
+ }
+ else
+ {
+ p11 = 0.5 * (C7 + C8);
+ }
+ }
+ else
+ {
+ p11 = 0.125 * (6.0 * C8 + C7 + C5);
+ p00 = 0.125 * (6.0 * C4 + C7 + C5);
+
+ p10 = 0.125 * (6.0 * C7 + C4 + C8);
+ p01 = 0.125 * (6.0 * C5 + C4 + C8);
+ }
+ }
+ else
+ {
+ if (c7 != c5)
+ {
+ p11 = p00 = C4;
+
+ if ((c1 == c4) || (c8 == d5))
+ {
+ p01 = 0.25 * (3.0 * C4 + C5);
+ }
+ else
+ {
+ p01 = 0.5 * (C4 + C5);
+ }
+
+ if ((c8 == d2) || (c3 == c4))
+ {
+ p10 = 0.25 * (3.0 * C4 + C7);
+ }
+ else
+ {
+ p10 = 0.5 * (C7 + C8);
+ }
+ }
+ else
+ {
+ float r = 0.0;
+ r += GET_RESULT(c5, c4, c6, d1);
+ r += GET_RESULT(c5, c4, c3, c1);
+ r += GET_RESULT(c5, c4, d2, d5);
+ r += GET_RESULT(c5, c4, c2, d4);
+
+ if (r > 0.0)
+ {
+ p01 = p10 = C7;
+ p00 = p11 = 0.5 * (C4 + C5);
+ }
+ else if (r < 0.0)
+ {
+ p11 = p00 = C4;
+ p01 = p10 = 0.5 * (C4 + C5);
+ }
+ else
+ {
+ p11 = p00 = C4;
+ p01 = p10 = C7;
+ }
+ }
+ }
+
+ p10 = (fp.x < 0.50) ? (fp.y < 0.50 ? p00 : p10) : (fp.y < 0.50 ? p01: p11);
+
+ gl_FragColor = vec4(p10.rgb, 1.0);
+}
diff --git a/src/osd/modules/render/bgfx/shaders/chains/supereagle/varying.def.sc b/src/osd/modules/render/bgfx/shaders/chains/supereagle/varying.def.sc
new file mode 100644
index 00000000000..7adabc462e5
--- /dev/null
+++ b/src/osd/modules/render/bgfx/shaders/chains/supereagle/varying.def.sc
@@ -0,0 +1,14 @@
+vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0);
+vec2 texCoord : TEXCOORD0 = vec2(0.0, 0.0);
+vec4 t1 : TEXCOORD1 = vec4(0.0, 0.0, 0.0, 0.0);
+vec4 t2 : TEXCOORD2 = vec4(0.0, 0.0, 0.0, 0.0);
+vec4 t3 : TEXCOORD3 = vec4(0.0, 0.0, 0.0, 0.0);
+vec4 t4 : TEXCOORD4 = vec4(0.0, 0.0, 0.0, 0.0);
+vec4 t5 : TEXCOORD5 = vec4(0.0, 0.0, 0.0, 0.0);
+vec4 t6 : TEXCOORD6 = vec4(0.0, 0.0, 0.0, 0.0);
+vec4 t7 : TEXCOORD7 = vec4(0.0, 0.0, 0.0, 0.0);
+vec4 t8 : TEXCOORD8 = vec4(0.0, 0.0, 0.0, 0.0);
+
+vec3 a_position : POSITION;
+vec4 a_color0 : COLOR0;
+vec2 a_texcoord0 : TEXCOORD0;
diff --git a/src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_blit.sc b/src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_blit.sc
new file mode 100644
index 00000000000..7d857008291
--- /dev/null
+++ b/src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_blit.sc
@@ -0,0 +1,14 @@
+$input a_position, a_texcoord0, a_color0
+$output texCoord, v_color0
+
+// license:BSD-3-Clause
+// copyright-holders:Dario Manesku
+
+#include "common.sh"
+
+void main()
+{
+ gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0));
+ texCoord = a_texcoord0.xy;
+ v_color0 = a_color0;
+}
diff --git a/src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_eagle.sc b/src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_eagle.sc
new file mode 100644
index 00000000000..d233629a036
--- /dev/null
+++ b/src/osd/modules/render/bgfx/shaders/chains/supereagle/vs_eagle.sc
@@ -0,0 +1,43 @@
+$input a_position, a_texcoord0, a_color0
+$output v_color0, texCoord, t1, t2, t3, t4, t5, t6, t7, t8
+
+// license:GPL-2.0+
+// copyright-holders:The DOSBox Team
+
+/* SuperEagle code */
+/* Copied from the Dosbox source code */
+/* Copyright (C) 2002-2007 The DOSBox Team */
+/* License: GNU-GPL */
+/* Adapted by guest(r) on 16.4.2007 */
+
+#include "common.sh"
+
+// Autos
+uniform vec4 u_tex_size0;
+
+void main()
+{
+ gl_Position = mul(u_viewProj, vec4(a_position.xy, 0.0, 1.0));
+ v_color0 = a_color0;
+
+ vec2 ps = vec2(1.0, 1.0) / u_tex_size0.xy;
+ float dx = ps.x;
+ float dy = ps.y;
+
+ texCoord = a_texcoord0.xy;
+ t1.xy = texCoord + vec2(-dx,-dy);
+ t1.zw = texCoord + vec2(-dx, 0);
+ t2.xy = texCoord + vec2(+dx,-dy);
+ t2.zw = texCoord + vec2(+dx+dx,-dy);
+ t3.xy = texCoord + vec2(-dx, 0);
+ t3.zw = texCoord + vec2(+dx, 0);
+ t4.xy = texCoord + vec2(+dx+dx, 0);
+ t4.zw = texCoord + vec2(-dx,+dy);
+ t5.xy = texCoord + vec2( 0,+dy);
+ t5.zw = texCoord + vec2(+dx,+dy);
+ t6.xy = texCoord + vec2(+dx+dx,+dy);
+ t6.zw = texCoord + vec2(-dx,+dy+dy);
+ t7.xy = texCoord + vec2( 0,+dy+dy);
+ t7.zw = texCoord + vec2(+dx,+dy+dy);
+ t8.xy = texCoord + vec2(+dx+dx,+dy+dy);
+}