[Scummvm-git-logs] scummvm-shaders master -> a062405434b8718802ebc411d6bef784804de561
lotharsm
noreply at scummvm.org
Sat Jan 7 23:36:09 UTC 2023
This automated email contains information about 1 new commit which have been
pushed to the 'scummvm-shaders' repo located at https://github.com/scummvm/scummvm-shaders .
Summary:
a062405434 SHADERS: Add eagle shader
Commit: a062405434b8718802ebc411d6bef784804de561
https://github.com/scummvm/scummvm-shaders/commit/a062405434b8718802ebc411d6bef784804de561
Author: Lothar Serra Mari (mail at serra.me)
Date: 2023-01-08T00:36:03+01:00
Commit Message:
SHADERS: Add eagle shader
Changed paths:
A base/eagle/shaders/supereagle.glsl
A base/eagle/super-eagle.glslp
diff --git a/base/eagle/shaders/supereagle.glsl b/base/eagle/shaders/supereagle.glsl
new file mode 100644
index 0000000..7e3565c
--- /dev/null
+++ b/base/eagle/shaders/supereagle.glsl
@@ -0,0 +1,248 @@
+/* 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 */
+
+/* GET_RESULT function */
+/* Copyright (c) 1999-2001 by Derek Liauw Kie Fa */
+/* License: GNU-GPL */
+
+#if defined(VERTEX)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING out
+#define COMPAT_ATTRIBUTE in
+#define COMPAT_TEXTURE texture
+#else
+#define COMPAT_VARYING varying
+#define COMPAT_ATTRIBUTE attribute
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+
+COMPAT_ATTRIBUTE vec4 VertexCoord;
+COMPAT_ATTRIBUTE vec4 COLOR;
+COMPAT_ATTRIBUTE vec4 TexCoord;
+COMPAT_VARYING vec4 COL0;
+COMPAT_VARYING vec4 TEX0;
+
+uniform mat4 MVPMatrix;
+uniform COMPAT_PRECISION int FrameDirection;
+uniform COMPAT_PRECISION int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+COMPAT_VARYING vec4 t1;
+COMPAT_VARYING vec4 t2;
+COMPAT_VARYING vec4 t3;
+COMPAT_VARYING vec4 t4;
+COMPAT_VARYING vec4 t5;
+COMPAT_VARYING vec4 t6;
+COMPAT_VARYING vec4 t7;
+COMPAT_VARYING vec4 t8;
+
+#define vTexCoord TEX0.xy
+#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
+#define OutputSize vec4(OutputSize, 1.0 / OutputSize)
+
+void main()
+{
+ gl_Position = MVPMatrix * VertexCoord;
+ COL0 = COLOR;
+ TEX0.xy = TexCoord.xy;
+ float dx = SourceSize.z;
+ float dy = SourceSize.w;
+ t1.xy = vTexCoord + vec2(-dx,-dy);
+ t1.zw = vTexCoord + vec2(-dx, 0);
+ t2.xy = vTexCoord + vec2(+dx,-dy);
+ t2.zw = vTexCoord + vec2(+dx+dx,-dy);
+ t3.xy = vTexCoord + vec2(-dx, 0);
+ t3.zw = vTexCoord + vec2(+dx, 0);
+ t4.xy = vTexCoord + vec2(+dx+dx, 0);
+ t4.zw = vTexCoord + vec2(-dx,+dy);
+ t5.xy = vTexCoord + vec2( 0,+dy);
+ t5.zw = vTexCoord + vec2(+dx,+dy);
+ t6.xy = vTexCoord + vec2(+dx+dx,+dy);
+ t6.zw = vTexCoord + vec2(-dx,+dy+dy);
+ t7.xy = vTexCoord + vec2( 0,+dy+dy);
+ t7.zw = vTexCoord + vec2(+dx,+dy+dy);
+ t8.xy = vTexCoord + vec2(+dx+dx,+dy+dy);
+}
+
+#elif defined(FRAGMENT)
+
+#if __VERSION__ >= 130
+#define COMPAT_VARYING in
+#define COMPAT_TEXTURE texture
+out vec4 FragColor;
+#else
+#define COMPAT_VARYING varying
+#define FragColor gl_FragColor
+#define COMPAT_TEXTURE texture2D
+#endif
+
+#ifdef GL_ES
+#ifdef GL_FRAGMENT_PRECISION_HIGH
+precision highp float;
+#else
+precision mediump float;
+precision mediump int;
+#endif
+#define COMPAT_PRECISION mediump
+#else
+#define COMPAT_PRECISION
+#endif
+
+uniform COMPAT_PRECISION int FrameDirection;
+uniform COMPAT_PRECISION int FrameCount;
+uniform COMPAT_PRECISION vec2 OutputSize;
+uniform COMPAT_PRECISION vec2 TextureSize;
+uniform COMPAT_PRECISION vec2 InputSize;
+uniform sampler2D Texture;
+COMPAT_VARYING vec4 TEX0;
+COMPAT_VARYING vec4 t1;
+COMPAT_VARYING vec4 t2;
+COMPAT_VARYING vec4 t3;
+COMPAT_VARYING vec4 t4;
+COMPAT_VARYING vec4 t5;
+COMPAT_VARYING vec4 t6;
+COMPAT_VARYING vec4 t7;
+COMPAT_VARYING vec4 t8;
+
+// compatibility #defines
+#define Source Texture
+#define vTexCoord TEX0.xy
+
+#define SourceSize vec4(TextureSize, 1.0 / TextureSize) //either TextureSize or InputSize
+#define OutputSize vec4(OutputSize, 1.0 / OutputSize)
+
+vec3 dtt = vec3(65536.0,255.0,1.0);
+
+COMPAT_PRECISION float reduce(vec3 color)
+{
+ return dot(color, dtt);
+}
+
+/* GET_RESULT function */
+/* Copyright (c) 1999-2001 by Derek Liauw Kie Fa */
+/* License: GNU-GPL */
+
+int GET_RESULT(float A, float B, float C, float D)
+{
+ int x = 0; int y = 0; int r = 0;
+ if (A == C) x+=1; else if (B == C) y+=1;
+ if (A == D) x+=1; else if (B == D) y+=1;
+ if (x <= 1) r+=1;
+ if (y <= 1) r-=1;
+ return r;
+}
+
+void main()
+{
+ vec2 fp = fract(vTexCoord * SourceSize.xy);
+
+ // Reading the texels
+
+ vec3 C0 = COMPAT_TEXTURE(Source, t1.xy).xyz;
+ vec3 C1 = COMPAT_TEXTURE(Source, t1.zw).xyz;
+ vec3 C2 = COMPAT_TEXTURE(Source, t2.xy).xyz;
+ vec3 D3 = COMPAT_TEXTURE(Source, t2.zw).xyz;
+ vec3 C3 = COMPAT_TEXTURE(Source, t3.xy).xyz;
+ vec3 C4 = COMPAT_TEXTURE(Source, vTexCoord).xyz;
+ vec3 C5 = COMPAT_TEXTURE(Source, t3.zw).xyz;
+ vec3 D4 = COMPAT_TEXTURE(Source, t4.xy).xyz;
+ vec3 C6 = COMPAT_TEXTURE(Source, t4.zw).xyz;
+ vec3 C7 = COMPAT_TEXTURE(Source, t5.xy).xyz;
+ vec3 C8 = COMPAT_TEXTURE(Source, t5.zw).xyz;
+ vec3 D5 = COMPAT_TEXTURE(Source, t6.xy).xyz;
+ vec3 D0 = COMPAT_TEXTURE(Source, t6.zw).xyz;
+ vec3 D1 = COMPAT_TEXTURE(Source, t7.xy).xyz;
+ vec3 D2 = COMPAT_TEXTURE(Source, t7.zw).xyz;
+ vec3 D6 = COMPAT_TEXTURE(Source, t8.xy).xyz;
+
+ vec3 p00,p10,p01,p11;
+
+ // reducing vec3 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 {
+ int r = 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) {
+ p01 = p10 = C7;
+ p00 = p11 = 0.5*(C4+C5);
+ } else if (r < 0) {
+ p11 = p00 = C4;
+ p01 = p10 = 0.5*(C4+C5);
+ } else {
+ p11 = p00 = C4;
+ p01 = p10 = C7;
+ }
+ }
+ }
+
+// Distributing the four products
+ p10 = (fp.x < 0.50) ? (fp.y < 0.50 ? p00 : p10) : (fp.y < 0.50 ? p01: p11);
+
+ FragColor = vec4(p10, 1.0);
+}
+#endif
diff --git a/base/eagle/super-eagle.glslp b/base/eagle/super-eagle.glslp
new file mode 100644
index 0000000..f1de8b4
--- /dev/null
+++ b/base/eagle/super-eagle.glslp
@@ -0,0 +1,10 @@
+shaders = 2
+
+shader0 = shaders/supereagle.glsl
+filter_linear0 = false
+scale_type0 = source
+scale_x0 = 2.0
+scale_y0 = 2.0
+
+shader1 = ../stock.glsl
+filter_linear1 = true
More information about the Scummvm-git-logs
mailing list