annotate shaders/xBRZ.f.glsl @ 2661:462e43f54abf

Properly emulate extra TH transitions due to direction changes for 6-button controllers. Breaks Golden Axe II input the same as hardware with a 6-button controller
author Michael Pavone <pavone@retrodev.com>
date Wed, 05 Mar 2025 22:20:20 -0800
parents 9a5e627c1b1f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 // xBRZ freescale
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2 // based on :
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 /*
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
5 Hyllian's xBR-vertex code and texel mapping
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 Copyright (C) 2011/2016 Hyllian - sergiogdb@gmail.com
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9 Permission is hereby granted, free of charge, to any person obtaining a copy
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
10 of this software and associated documentation files (the "Software"), to deal
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11 in the Software without restriction, including without limitation the rights
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13 copies of the Software, and to permit persons to whom the Software is
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14 furnished to do so, subject to the following conditions:
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16 The above copyright notice and this permission notice shall be included in
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17 all copies or substantial portions of the Software.
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
22 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
23 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
24 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
25 THE SOFTWARE.
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
26
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
27 */
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
28
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29 // This shader also uses code and/or concepts from xBRZ as it appears
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 // in the Desmume source code. The license for which is as follows:
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
31
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
32 // ****************************************************************************
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33 // * This file is part of the HqMAME project. It is distributed under *
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
34 // * GNU General Public License: http://www.gnu.org/licenses/gpl-3.0 *
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
35 // * Copyright (C) Zenju (zenju AT gmx DOT de) - All Rights Reserved *
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
36 // * *
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
37 // * Additionally and as a special exception, the author gives permission *
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
38 // * to link the code of this program with the MAME library (or with modified *
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
39 // * versions of MAME that use the same license as MAME), and distribute *
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
40 // * linked combinations including the two. You must obey the GNU General *
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
41 // * Public License in all respects for all of the code used other than MAME. *
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
42 // * If you modify this file, you may extend this exception to your version *
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
43 // * of the file, but you are not obligated to do so. If you do not wish to *
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
44 // * do so, delete this exception statement from your version. *
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
45 // ****************************************************************************
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
46 // ported to blastem shader format by hunterk
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
47
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
48 uniform sampler2D textures[2];
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
49 uniform mediump vec2 texsize;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
50 varying mediump vec2 texcoord;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
51
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
52 #define BLEND_NONE 0
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
53 #define BLEND_NORMAL 1
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
54 #define BLEND_DOMINANT 2
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55 #define LUMINANCE_WEIGHT 1.0
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56 #define EQUAL_COLOR_TOLERANCE 30.0/255.0
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 #define STEEP_DIRECTION_THRESHOLD 2.2
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
58 #define DOMINANT_DIRECTION_THRESHOLD 3.6
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
59
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
60 // this is usually handled automatically but blastem doesn't expose output size?
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
61 #define scale vec2(10.0, 10.0)
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
62
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
63 mediump float DistYCbCr(mediump vec3 pixA, mediump vec3 pixB)
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
64 {
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
65 const mediump vec3 w = vec3(0.2627, 0.6780, 0.0593);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
66 const mediump float scaleB = 0.5 / (1.0 - w.b);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
67 const mediump float scaleR = 0.5 / (1.0 - w.r);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
68 mediump vec3 diff = pixA - pixB;
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
69 mediump float Y = dot(diff.rgb, w);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
70 mediump float Cb = scaleB * (diff.b - Y);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
71 mediump float Cr = scaleR * (diff.r - Y);
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
72
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
73 return sqrt(((LUMINANCE_WEIGHT * Y) * (LUMINANCE_WEIGHT * Y)) + (Cb * Cb) + (Cr * Cr));
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
74 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
75
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
76 bool IsPixEqual(const mediump vec3 pixA, const mediump vec3 pixB)
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
77 {
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
78 return (DistYCbCr(pixA, pixB) < EQUAL_COLOR_TOLERANCE);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
79 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
80
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
81 mediump float get_left_ratio(mediump vec2 center, mediump vec2 origin, mediump vec2 direction, mediump vec2 scale_)
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
82 {
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
83 mediump vec2 P0 = center - origin;
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
84 mediump vec2 proj = direction * (dot(P0, direction) / dot(direction, direction));
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
85 mediump vec2 distv = P0 - proj;
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
86 mediump vec2 orth = vec2(-direction.y, direction.x);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
87 mediump float side = sign(dot(P0, orth));
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
88 mediump float v = side * length(distv * scale_);
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
89
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
90 // return step(0, v);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
91 return smoothstep(-sqrt(2.0)/2.0, sqrt(2.0)/2.0, v);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
92 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
93
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
94 #define eq(a,b) (a == b)
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
95 #define neq(a,b) (a != b)
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
96
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
97 #define P(x,y) texture2D(textures[0], coord + (1.0 / texsize) * vec2(x, y)).rgb
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
98
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
99 void main()
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
100 {
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
101 //---------------------------------------
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
102 // Input Pixel Mapping: -|x|x|x|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
103 // x|A|B|C|x
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
104 // x|D|E|F|x
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
105 // x|G|H|I|x
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
106 // -|x|x|x|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
107
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
108 mediump vec2 pos = fract(texcoord * texsize.xy) - vec2(0.5, 0.5);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
109 mediump vec2 coord = texcoord - pos * (1.0 / texsize.xy);
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
110
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
111 mediump vec3 A = P(-1,-1);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
112 mediump vec3 B = P( 0,-1);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
113 mediump vec3 C = P( 1,-1);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
114 mediump vec3 D = P(-1, 0);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
115 mediump vec3 E = P( 0, 0);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
116 mediump vec3 F = P( 1, 0);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
117 mediump vec3 G = P(-1, 1);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
118 mediump vec3 H = P( 0, 1);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
119 mediump vec3 I = P( 1, 1);
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
120
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
121 // blendResult Mapping: x|y|
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
122 // w|z|
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
123 ivec4 blendResult = ivec4(BLEND_NONE,BLEND_NONE,BLEND_NONE,BLEND_NONE);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
124
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
125 // Preprocess corners
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
126 // Pixel Tap Mapping: -|-|-|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
127 // -|-|B|C|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
128 // -|D|E|F|x
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
129 // -|G|H|I|x
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
130 // -|-|x|x|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
131 if (!((eq(E,F) && eq(H,I)) || (eq(E,H) && eq(F,I))))
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
132 {
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
133 mediump float dist_H_F = DistYCbCr(G, E) + DistYCbCr(E, C) + DistYCbCr(P(0,2), I) + DistYCbCr(I, P(2,0)) + (4.0 * DistYCbCr(H, F));
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
134 mediump float dist_E_I = DistYCbCr(D, H) + DistYCbCr(H, P(1,2)) + DistYCbCr(B, F) + DistYCbCr(F, P(2,1)) + (4.0 * DistYCbCr(E, I));
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
135 bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_H_F) < dist_E_I;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
136 blendResult.z = ((dist_H_F < dist_E_I) && neq(E,F) && neq(E,H)) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
137 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
138
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
139
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
140 // Pixel Tap Mapping: -|-|-|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
141 // -|A|B|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
142 // x|D|E|F|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
143 // x|G|H|I|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
144 // -|x|x|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
145 if (!((eq(D,E) && eq(G,H)) || (eq(D,G) && eq(E,H))))
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
146 {
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
147 mediump float dist_G_E = DistYCbCr(P(-2,1) , D) + DistYCbCr(D, B) + DistYCbCr(P(-1,2), H) + DistYCbCr(H, F) + (4.0 * DistYCbCr(G, E));
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
148 mediump float dist_D_H = DistYCbCr(P(-2,0) , G) + DistYCbCr(G, P(0,2)) + DistYCbCr(A, E) + DistYCbCr(E, I) + (4.0 * DistYCbCr(D, H));
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
149 bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_D_H) < dist_G_E;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
150 blendResult.w = ((dist_G_E > dist_D_H) && neq(E,D) && neq(E,H)) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
151 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
152
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
153 // Pixel Tap Mapping: -|-|x|x|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
154 // -|A|B|C|x
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
155 // -|D|E|F|x
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
156 // -|-|H|I|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
157 // -|-|-|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
158 if (!((eq(B,C) && eq(E,F)) || (eq(B,E) && eq(C,F))))
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
159 {
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
160 mediump float dist_E_C = DistYCbCr(D, B) + DistYCbCr(B, P(1,-2)) + DistYCbCr(H, F) + DistYCbCr(F, P(2,-1)) + (4.0 * DistYCbCr(E, C));
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
161 mediump float dist_B_F = DistYCbCr(A, E) + DistYCbCr(E, I) + DistYCbCr(P(0,-2), C) + DistYCbCr(C, P(2,0)) + (4.0 * DistYCbCr(B, F));
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
162 bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_B_F) < dist_E_C;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
163 blendResult.y = ((dist_E_C > dist_B_F) && neq(E,B) && neq(E,F)) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
164 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
165
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
166 // Pixel Tap Mapping: -|x|x|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
167 // x|A|B|C|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
168 // x|D|E|F|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
169 // -|G|H|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
170 // -|-|-|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
171 if (!((eq(A,B) && eq(D,E)) || (eq(A,D) && eq(B,E))))
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
172 {
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
173 mediump float dist_D_B = DistYCbCr(P(-2,0), A) + DistYCbCr(A, P(0,-2)) + DistYCbCr(G, E) + DistYCbCr(E, C) + (4.0 * DistYCbCr(D, B));
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
174 mediump float dist_A_E = DistYCbCr(P(-2,-1), D) + DistYCbCr(D, H) + DistYCbCr(P(-1,-2), B) + DistYCbCr(B, F) + (4.0 * DistYCbCr(A, E));
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
175 bool dominantGradient = (DOMINANT_DIRECTION_THRESHOLD * dist_D_B) < dist_A_E;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
176 blendResult.x = ((dist_D_B < dist_A_E) && neq(E,D) && neq(E,B)) ? ((dominantGradient) ? BLEND_DOMINANT : BLEND_NORMAL) : BLEND_NONE;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
177 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
178
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
179 mediump vec3 res = E;
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
180
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
181 // Pixel Tap Mapping: -|-|-|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
182 // -|-|B|C|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
183 // -|D|E|F|x
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
184 // -|G|H|I|x
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
185 // -|-|x|x|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
186 if(blendResult.z != BLEND_NONE)
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
187 {
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
188 mediump float dist_F_G = DistYCbCr(F, G);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
189 mediump float dist_H_C = DistYCbCr(H, C);
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
190 bool doLineBlend = (blendResult.z == BLEND_DOMINANT ||
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
191 !((blendResult.y != BLEND_NONE && !IsPixEqual(E, G)) || (blendResult.w != BLEND_NONE && !IsPixEqual(E, C)) ||
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
192 (IsPixEqual(G, H) && IsPixEqual(H, I) && IsPixEqual(I, F) && IsPixEqual(F, C) && !IsPixEqual(E, I))));
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
193
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
194 mediump vec2 origin = vec2(0.0, 1.0 / sqrt(2.0));
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
195 mediump vec2 direction = vec2(1.0, -1.0);
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
196 if(doLineBlend)
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
197 {
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
198 bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_F_G <= dist_H_C) && neq(E,G) && neq(D,G);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
199 bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_H_C <= dist_F_G) && neq(E,C) && neq(B,C);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
200 origin = haveShallowLine? vec2(0.0, 0.25) : vec2(0.0, 0.5);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
201 direction.x += haveShallowLine? 1.0: 0.0;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
202 direction.y -= haveSteepLine? 1.0: 0.0;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
203 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
204
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
205 mediump vec3 blendPix = mix(H,F, step(DistYCbCr(E, F), DistYCbCr(E, H)));
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
206 res = mix(res, blendPix, get_left_ratio(pos, origin, direction, scale));
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
207 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
208
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
209 // Pixel Tap Mapping: -|-|-|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
210 // -|A|B|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
211 // x|D|E|F|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
212 // x|G|H|I|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
213 // -|x|x|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
214 if(blendResult.w != BLEND_NONE)
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
215 {
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
216 mediump float dist_H_A = DistYCbCr(H, A);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
217 mediump float dist_D_I = DistYCbCr(D, I);
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
218 bool doLineBlend = (blendResult.w == BLEND_DOMINANT ||
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
219 !((blendResult.z != BLEND_NONE && !IsPixEqual(E, A)) || (blendResult.x != BLEND_NONE && !IsPixEqual(E, I)) ||
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
220 (IsPixEqual(A, D) && IsPixEqual(D, G) && IsPixEqual(G, H) && IsPixEqual(H, I) && !IsPixEqual(E, G))));
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
221
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
222 mediump vec2 origin = vec2(-1.0 / sqrt(2.0), 0.0);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
223 mediump vec2 direction = vec2(1.0, 1.0);
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
224 if(doLineBlend)
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
225 {
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
226 bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_H_A <= dist_D_I) && neq(E,A) && neq(B,A);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
227 bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_D_I <= dist_H_A) && neq(E,I) && neq(F,I);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
228 origin = haveShallowLine? vec2(-0.25, 0.0) : vec2(-0.5, 0.0);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
229 direction.y += haveShallowLine? 1.0: 0.0;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
230 direction.x += haveSteepLine? 1.0: 0.0;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
231 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
232 origin = origin;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
233 direction = direction;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
234
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
235 mediump vec3 blendPix = mix(H,D, step(DistYCbCr(E, D), DistYCbCr(E, H)));
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
236 res = mix(res, blendPix, get_left_ratio(pos, origin, direction, scale));
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
237 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
238
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
239 // Pixel Tap Mapping: -|-|x|x|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
240 // -|A|B|C|x
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
241 // -|D|E|F|x
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
242 // -|-|H|I|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
243 // -|-|-|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
244 if(blendResult.y != BLEND_NONE)
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
245 {
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
246 mediump float dist_B_I = DistYCbCr(B, I);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
247 mediump float dist_F_A = DistYCbCr(F, A);
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
248 bool doLineBlend = (blendResult.y == BLEND_DOMINANT ||
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
249 !((blendResult.x != BLEND_NONE && !IsPixEqual(E, I)) || (blendResult.z != BLEND_NONE && !IsPixEqual(E, A)) ||
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
250 (IsPixEqual(I, F) && IsPixEqual(F, C) && IsPixEqual(C, B) && IsPixEqual(B, A) && !IsPixEqual(E, C))));
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
251
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
252 mediump vec2 origin = vec2(1.0 / sqrt(2.0), 0.0);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
253 mediump vec2 direction = vec2(-1.0, -1.0);
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
254
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
255 if(doLineBlend)
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
256 {
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
257 bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_B_I <= dist_F_A) && neq(E,I) && neq(H,I);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
258 bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_F_A <= dist_B_I) && neq(E,A) && neq(D,A);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
259 origin = haveShallowLine? vec2(0.25, 0.0) : vec2(0.5, 0.0);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
260 direction.y -= haveShallowLine? 1.0: 0.0;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
261 direction.x -= haveSteepLine? 1.0: 0.0;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
262 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
263
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
264 mediump vec3 blendPix = mix(F,B, step(DistYCbCr(E, B), DistYCbCr(E, F)));
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
265 res = mix(res, blendPix, get_left_ratio(pos, origin, direction, scale));
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
266 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
267
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
268 // Pixel Tap Mapping: -|x|x|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
269 // x|A|B|C|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
270 // x|D|E|F|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
271 // -|G|H|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
272 // -|-|-|-|-
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
273 if(blendResult.x != BLEND_NONE)
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
274 {
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
275 mediump float dist_D_C = DistYCbCr(D, C);
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
276 mediump float dist_B_G = DistYCbCr(B, G);
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
277 bool doLineBlend = (blendResult.x == BLEND_DOMINANT ||
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
278 !((blendResult.w != BLEND_NONE && !IsPixEqual(E, C)) || (blendResult.y != BLEND_NONE && !IsPixEqual(E, G)) ||
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
279 (IsPixEqual(C, B) && IsPixEqual(B, A) && IsPixEqual(A, D) && IsPixEqual(D, G) && !IsPixEqual(E, A))));
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
280
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
281 mediump vec2 origin = vec2(0.0, -1.0 / sqrt(2.0));
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
282 mediump vec2 direction = vec2(-1.0, 1.0);
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
283 if(doLineBlend)
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
284 {
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
285 bool haveShallowLine = (STEEP_DIRECTION_THRESHOLD * dist_D_C <= dist_B_G) && neq(E,C) && neq(F,C);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
286 bool haveSteepLine = (STEEP_DIRECTION_THRESHOLD * dist_B_G <= dist_D_C) && neq(E,G) && neq(H,G);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
287 origin = haveShallowLine? vec2(0.0, -0.25) : vec2(0.0, -0.5);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
288 direction.x -= haveShallowLine? 1.0: 0.0;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
289 direction.y += haveSteepLine? 1.0: 0.0;
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
290 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
291
2660
9a5e627c1b1f Make xBRZ shader be WebGL compatible
Michael Pavone <pavone@retrodev.com>
parents: 2495
diff changeset
292 mediump vec3 blendPix = mix(D,B, step(DistYCbCr(E, B), DistYCbCr(E, D)));
2495
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
293 res = mix(res, blendPix, get_left_ratio(pos, origin, direction, scale));
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
294 }
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
295
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
296 gl_FragColor = vec4(res, 1.0);
d437b8e8ba62 Add xBRZ and bandlimit pixel footprint shaders ported by hunterk
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
297 }