ProjectArcade

Форк
0
74 строки · 2.1 Кб
1
// 4xGLSL HqFilter shader, Modified to use in PPSSPP. Grabbed from:
2
// http://forums.ngemu.com/showthread.php?t=76098
3

4
// by guest(r) (guest.r@gmail.com)
5
// License: GNU-GPL
6

7
// Shader notes: looks better with sprite games
8

9
#ifdef GL_ES
10
precision mediump float;
11
precision mediump int;
12
#endif
13

14
uniform sampler2D sampler0;
15

16
varying vec4 v_texcoord0;
17
varying vec4 v_texcoord1;
18
varying vec4 v_texcoord2;
19
varying vec4 v_texcoord3;
20
varying vec4 v_texcoord4;
21
varying vec4 v_texcoord5;
22
varying vec4 v_texcoord6;
23

24
const float mx = 0.325;    // start smoothing factor
25
const float k = -0.250;    // smoothing decrease factor
26
const float max_w = 0.25;  // max. smoothing weigth
27
const float min_w =-0.05;  // min smoothing/sharpening weigth
28

29
void main()
30
{
31
  vec3 c  = texture2D(sampler0, v_texcoord0.xy).xyz;
32
  vec3 i1 = texture2D(sampler0, v_texcoord1.xy).xyz; 
33
  vec3 i2 = texture2D(sampler0, v_texcoord2.xy).xyz; 
34
  vec3 i3 = texture2D(sampler0, v_texcoord3.xy).xyz; 
35
  vec3 i4 = texture2D(sampler0, v_texcoord4.xy).xyz; 
36
  vec3 o1 = texture2D(sampler0, v_texcoord5.xy).xyz; 
37
  vec3 o3 = texture2D(sampler0, v_texcoord6.xy).xyz; 
38
  vec3 o2 = texture2D(sampler0, v_texcoord5.zw).xyz;
39
  vec3 o4 = texture2D(sampler0, v_texcoord6.zw).xyz; 
40

41
  vec3 dt = vec3(1.0,1.0,1.0);
42

43
  float ko1=dot(abs(o1-c),dt);
44
  float ko2=dot(abs(o2-c),dt);
45
  float ko3=dot(abs(o3-c),dt);
46
  float ko4=dot(abs(o4-c),dt);
47

48
  float sd1 = dot(abs(i1-i3),dt);
49
  float sd2 = dot(abs(i2-i4),dt);
50

51
  float w1 = step(ko1,ko3)*sd2;
52
  float w2 = step(ko2,ko4)*sd1;
53
  float w3 = step(ko3,ko1)*sd2;
54
  float w4 = step(ko4,ko2)*sd1;
55

56
  c = (w1*o1+w2*o2+w3*o3+w4*o4+0.1*c)/(w1+w2+w3+w4+0.1);
57

58
  float lc = c.r+c.g+c.b+0.2;
59

60
  w1 = (i1.r+i1.g+i1.b+lc)*0.2; 
61
  w1 = clamp(k*dot(abs(c-i1),dt)/w1+mx,min_w,max_w);
62

63
  w2 = (i2.r+i2.g+i2.b+lc)*0.2; 
64
  w2 = clamp(k*dot(abs(c-i2),dt)/w2+mx,min_w,max_w);
65

66
  w3 = (i3.r+i3.g+i3.b+lc)*0.2;
67
  w3 = clamp(k*dot(abs(c-i3),dt)/w3+mx,min_w,max_w);
68

69
  w4 = (i4.r+i4.g+i4.b+lc)*0.2; 
70
  w4 = clamp(k*dot(abs(c-i4),dt)/w4+mx,min_w,max_w);
71

72
  gl_FragColor.rgb = w1*i1 + w2*i2 + w3*i3 + w4*i4 + (1.0-w1-w2-w3-w4)*c;
73
  gl_FragColor.a = 1.0;
74
}
75

76

77

78

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.