basilisk-engine 0.1.43__py3-none-any.whl → 0.1.44__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of basilisk-engine might be problematic. Click here for more details.

Files changed (98) hide show
  1. basilisk/__init__.py +26 -26
  2. basilisk/audio/sound.py +27 -27
  3. basilisk/bsk_assets/cube.obj +48 -48
  4. basilisk/collisions/broad/broad_aabb.py +102 -102
  5. basilisk/collisions/broad/broad_bvh.py +137 -137
  6. basilisk/collisions/collider.py +95 -95
  7. basilisk/collisions/collider_handler.py +225 -225
  8. basilisk/collisions/narrow/contact_manifold.py +95 -95
  9. basilisk/collisions/narrow/dataclasses.py +34 -34
  10. basilisk/collisions/narrow/deprecated.py +46 -46
  11. basilisk/collisions/narrow/epa.py +91 -91
  12. basilisk/collisions/narrow/gjk.py +66 -66
  13. basilisk/collisions/narrow/graham_scan.py +24 -24
  14. basilisk/collisions/narrow/helper.py +29 -29
  15. basilisk/collisions/narrow/line_intersections.py +106 -106
  16. basilisk/collisions/narrow/sutherland_hodgman.py +75 -75
  17. basilisk/config.py +53 -53
  18. basilisk/draw/draw.py +100 -100
  19. basilisk/draw/draw_handler.py +178 -178
  20. basilisk/draw/font_renderer.py +28 -28
  21. basilisk/engine.py +169 -169
  22. basilisk/generic/abstract_bvh.py +15 -15
  23. basilisk/generic/abstract_custom.py +133 -133
  24. basilisk/generic/collisions.py +70 -70
  25. basilisk/generic/input_validation.py +82 -82
  26. basilisk/generic/math.py +17 -17
  27. basilisk/generic/matrices.py +35 -35
  28. basilisk/generic/meshes.py +72 -72
  29. basilisk/generic/quat.py +142 -142
  30. basilisk/generic/quat_methods.py +7 -7
  31. basilisk/generic/raycast_result.py +26 -26
  32. basilisk/generic/vec3.py +143 -143
  33. basilisk/input/__init__.py +0 -0
  34. basilisk/input/mouse.py +62 -0
  35. basilisk/input/path.py +14 -0
  36. basilisk/input_output/IO_handler.py +91 -91
  37. basilisk/input_output/clock.py +49 -49
  38. basilisk/input_output/keys.py +43 -43
  39. basilisk/input_output/mouse.py +90 -90
  40. basilisk/input_output/path.py +14 -14
  41. basilisk/mesh/cube.py +33 -33
  42. basilisk/mesh/mesh.py +233 -233
  43. basilisk/mesh/mesh_from_data.py +150 -150
  44. basilisk/mesh/model.py +271 -271
  45. basilisk/mesh/narrow_aabb.py +89 -89
  46. basilisk/mesh/narrow_bvh.py +91 -91
  47. basilisk/mesh/narrow_primative.py +23 -23
  48. basilisk/nodes/helper.py +28 -28
  49. basilisk/nodes/node.py +709 -709
  50. basilisk/nodes/node_handler.py +97 -97
  51. basilisk/particles/particle_handler.py +64 -64
  52. basilisk/particles/particle_renderer.py +93 -93
  53. basilisk/physics/impulse.py +112 -112
  54. basilisk/physics/physics_body.py +43 -43
  55. basilisk/physics/physics_engine.py +35 -35
  56. basilisk/render/batch.py +103 -103
  57. basilisk/render/bloom.py +117 -117
  58. basilisk/render/camera.py +260 -260
  59. basilisk/render/chunk.py +113 -113
  60. basilisk/render/chunk_handler.py +167 -167
  61. basilisk/render/frame.py +130 -130
  62. basilisk/render/framebuffer.py +192 -192
  63. basilisk/render/image.py +120 -120
  64. basilisk/render/image_handler.py +120 -120
  65. basilisk/render/light.py +96 -96
  66. basilisk/render/light_handler.py +58 -58
  67. basilisk/render/material.py +232 -232
  68. basilisk/render/material_handler.py +133 -133
  69. basilisk/render/post_process.py +180 -180
  70. basilisk/render/shader.py +135 -135
  71. basilisk/render/shader_handler.py +109 -109
  72. basilisk/render/sky.py +119 -119
  73. basilisk/scene.py +287 -287
  74. basilisk/shaders/batch.frag +288 -293
  75. basilisk/shaders/batch.vert +117 -117
  76. basilisk/shaders/bloom_downsample.frag +23 -23
  77. basilisk/shaders/bloom_frame.frag +25 -0
  78. basilisk/shaders/bloom_upsample.frag +33 -33
  79. basilisk/shaders/crt.frag +34 -34
  80. basilisk/shaders/draw.frag +27 -27
  81. basilisk/shaders/draw.vert +25 -25
  82. basilisk/shaders/filter.frag +22 -22
  83. basilisk/shaders/frame.frag +13 -13
  84. basilisk/shaders/frame.vert +13 -13
  85. basilisk/shaders/frame_hdr.frag +27 -27
  86. basilisk/shaders/geometry.frag +10 -10
  87. basilisk/shaders/geometry.vert +41 -41
  88. basilisk/shaders/normal.frag +62 -62
  89. basilisk/shaders/normal.vert +96 -96
  90. basilisk/shaders/particle.frag +81 -81
  91. basilisk/shaders/particle.vert +86 -86
  92. basilisk/shaders/sky.frag +23 -23
  93. basilisk/shaders/sky.vert +13 -13
  94. {basilisk_engine-0.1.43.dist-info → basilisk_engine-0.1.44.dist-info}/METADATA +89 -89
  95. basilisk_engine-0.1.44.dist-info/RECORD +115 -0
  96. {basilisk_engine-0.1.43.dist-info → basilisk_engine-0.1.44.dist-info}/WHEEL +1 -1
  97. basilisk_engine-0.1.43.dist-info/RECORD +0 -111
  98. {basilisk_engine-0.1.43.dist-info → basilisk_engine-0.1.44.dist-info}/top_level.txt +0 -0
@@ -1,118 +1,118 @@
1
- #version 330 core
2
-
3
- layout (location = 0) in vec3 in_position;
4
- layout (location = 1) in vec2 in_uv;
5
- layout (location = 2) in vec3 in_normal;
6
- layout (location = 3) in vec3 in_tangent;
7
- layout (location = 4) in vec3 in_bitangent;
8
-
9
- layout (location = 5) in vec3 obj_position;
10
- layout (location = 6) in vec4 obj_rotation;
11
- layout (location = 7) in vec3 obj_scale;
12
- layout (location = 8) in float obj_material;
13
-
14
- // Variables passed on to the fragment shader
15
- out vec2 uv;
16
- out vec3 position;
17
- out mat3 TBN;
18
-
19
- // Material struct sent to fragment shader
20
- struct Material {
21
- vec3 color;
22
- vec3 emissiveColor;
23
- float roughness;
24
- float subsurface;
25
- float sheen;
26
- float sheenTint;
27
- float anisotropic;
28
- float specular;
29
- float metallicness;
30
- float specularTint;
31
- float clearcoat;
32
- float clearcoatGloss;
33
-
34
- int hasAlbedoMap;
35
- vec2 albedoMap;
36
- int hasNormalMap;
37
- vec2 normalMap;
38
- int hasRoughnessMap;
39
- vec2 roughnessMap;
40
- int hasAoMap;
41
- vec2 aoMap;
42
- };
43
- flat out Material mtl;
44
-
45
- // Uniforms
46
- uniform mat4 projectionMatrix;
47
- uniform mat4 viewMatrix;
48
- uniform sampler2D materialsTexture;
49
-
50
- // Function to get the model matrix from node position, rotation, and scale
51
- mat4 getModelMatrix(vec3 pos, vec4 rot, vec3 scl) {
52
- mat4 translation = mat4(
53
- 1 , 0 , 0 , 0,
54
- 0 , 1 , 0 , 0,
55
- 0 , 0 , 1 , 0,
56
- pos.x, pos.y, pos.z, 1
57
- );
58
- mat4 rotation = mat4(
59
- 1 - 2 * (rot.z * rot.z + rot.w * rot.w), 2 * (rot.y * rot.z - rot.w * rot.x), 2 * (rot.y * rot.w + rot.z * rot.x), 0,
60
- 2 * (rot.y * rot.z + rot.w * rot.x), 1 - 2 * (rot.y * rot.y + rot.w * rot.w), 2 * (rot.z * rot.w - rot.y * rot.x), 0,
61
- 2 * (rot.y * rot.w - rot.z * rot.x), 2 * (rot.z * rot.w + rot.y * rot.x), 1 - 2 * (rot.y * rot.y + rot.z * rot.z), 0,
62
- 0, 0, 0, 1
63
- );
64
- mat4 scale = mat4(
65
- scl.x, 0 , 0 , 0,
66
- 0 , scl.y, 0 , 0,
67
- 0 , 0 , scl.z, 0,
68
- 0 , 0 , 0 , 1
69
- );
70
- return translation * rotation * scale;
71
- }
72
-
73
- // Function to get the TBN matrix for normal mapping
74
- mat3 getTBN(mat4 modelMatrix, vec3 normal, vec3 tangent, vec3 bitangent){
75
- vec3 T = normalize(vec3(modelMatrix * vec4(tangent, 0.0)));
76
- vec3 B = normalize(vec3(modelMatrix * vec4(bitangent, 0.0)));
77
- vec3 N = normalize(vec3(modelMatrix * vec4(normal, 0.0)));
78
- return mat3(T, B, N);
79
- }
80
-
81
- void main() {
82
- // Set the model matrix
83
- mat4 modelMatrix = getModelMatrix(obj_position, obj_rotation, obj_scale);
84
-
85
- // Set out variables
86
- position = (modelMatrix * vec4(in_position, 1.0)).xyz;
87
- TBN = getTBN(modelMatrix, in_normal, in_tangent, in_bitangent);
88
- uv = in_uv;
89
-
90
- // Get the material
91
- int mtl_size = 28;
92
- int materialID = int(obj_material);
93
-
94
- mtl.color = vec3(texelFetch(materialsTexture, ivec2(0, 0 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 1 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 2 + materialID * mtl_size), 0).r);
95
- mtl.roughness = texelFetch(materialsTexture, ivec2(0, 3 + materialID * mtl_size), 0).r;
96
- mtl.subsurface = texelFetch(materialsTexture, ivec2(0, 4 + materialID * mtl_size), 0).r;
97
- mtl.sheen = texelFetch(materialsTexture, ivec2(0, 5 + materialID * mtl_size), 0).r;
98
- mtl.sheenTint = texelFetch(materialsTexture, ivec2(0, 6 + materialID * mtl_size), 0).r;
99
- mtl.anisotropic = texelFetch(materialsTexture, ivec2(0, 7 + materialID * mtl_size), 0).r;
100
- mtl.specular = texelFetch(materialsTexture, ivec2(0, 8 + materialID * mtl_size), 0).r;
101
- mtl.metallicness = texelFetch(materialsTexture, ivec2(0, 9 + materialID * mtl_size), 0).r;
102
- mtl.specularTint = texelFetch(materialsTexture, ivec2(0, 10 + materialID * mtl_size), 0).r;
103
- mtl.clearcoat = texelFetch(materialsTexture, ivec2(0, 11 + materialID * mtl_size), 0).r;
104
- mtl.clearcoatGloss = texelFetch(materialsTexture, ivec2(0, 12 + materialID * mtl_size), 0).r;
105
-
106
- mtl.hasAlbedoMap = int(texelFetch(materialsTexture, ivec2(0, 13 + materialID * mtl_size), 0).r);
107
- mtl.albedoMap = vec2(texelFetch(materialsTexture, ivec2(0, 14 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 15 + materialID * mtl_size), 0).r);
108
- mtl.hasNormalMap = int(texelFetch(materialsTexture, ivec2(0, 16 + materialID * mtl_size), 0).r);
109
- mtl.normalMap = vec2(texelFetch(materialsTexture, ivec2(0, 17 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 18 + materialID * mtl_size), 0).r);
110
- mtl.hasRoughnessMap = int(texelFetch(materialsTexture, ivec2(0, 19 + materialID * mtl_size), 0).r);
111
- mtl.roughnessMap = vec2(texelFetch(materialsTexture, ivec2(0, 20 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 21 + materialID * mtl_size), 0).r);
112
- mtl.hasAoMap = int(texelFetch(materialsTexture, ivec2(0, 22 + materialID * mtl_size), 0).r);
113
- mtl.aoMap = vec2(texelFetch(materialsTexture, ivec2(0, 23 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 24 + materialID * mtl_size), 0).r);
114
- mtl.emissiveColor = vec3(texelFetch(materialsTexture, ivec2(0, 25 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 26 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 27 + materialID * mtl_size), 0).r);
115
-
116
- // Set the fragment position
117
- gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_position, 1.0);
1
+ #version 330 core
2
+
3
+ layout (location = 0) in vec3 in_position;
4
+ layout (location = 1) in vec2 in_uv;
5
+ layout (location = 2) in vec3 in_normal;
6
+ layout (location = 3) in vec3 in_tangent;
7
+ layout (location = 4) in vec3 in_bitangent;
8
+
9
+ layout (location = 5) in vec3 obj_position;
10
+ layout (location = 6) in vec4 obj_rotation;
11
+ layout (location = 7) in vec3 obj_scale;
12
+ layout (location = 8) in float obj_material;
13
+
14
+ // Variables passed on to the fragment shader
15
+ out vec2 uv;
16
+ out vec3 position;
17
+ out mat3 TBN;
18
+
19
+ // Material struct sent to fragment shader
20
+ struct Material {
21
+ vec3 color;
22
+ vec3 emissiveColor;
23
+ float roughness;
24
+ float subsurface;
25
+ float sheen;
26
+ float sheenTint;
27
+ float anisotropic;
28
+ float specular;
29
+ float metallicness;
30
+ float specularTint;
31
+ float clearcoat;
32
+ float clearcoatGloss;
33
+
34
+ int hasAlbedoMap;
35
+ vec2 albedoMap;
36
+ int hasNormalMap;
37
+ vec2 normalMap;
38
+ int hasRoughnessMap;
39
+ vec2 roughnessMap;
40
+ int hasAoMap;
41
+ vec2 aoMap;
42
+ };
43
+ flat out Material mtl;
44
+
45
+ // Uniforms
46
+ uniform mat4 projectionMatrix;
47
+ uniform mat4 viewMatrix;
48
+ uniform sampler2D materialsTexture;
49
+
50
+ // Function to get the model matrix from node position, rotation, and scale
51
+ mat4 getModelMatrix(vec3 pos, vec4 rot, vec3 scl) {
52
+ mat4 translation = mat4(
53
+ 1 , 0 , 0 , 0,
54
+ 0 , 1 , 0 , 0,
55
+ 0 , 0 , 1 , 0,
56
+ pos.x, pos.y, pos.z, 1
57
+ );
58
+ mat4 rotation = mat4(
59
+ 1 - 2 * (rot.z * rot.z + rot.w * rot.w), 2 * (rot.y * rot.z - rot.w * rot.x), 2 * (rot.y * rot.w + rot.z * rot.x), 0,
60
+ 2 * (rot.y * rot.z + rot.w * rot.x), 1 - 2 * (rot.y * rot.y + rot.w * rot.w), 2 * (rot.z * rot.w - rot.y * rot.x), 0,
61
+ 2 * (rot.y * rot.w - rot.z * rot.x), 2 * (rot.z * rot.w + rot.y * rot.x), 1 - 2 * (rot.y * rot.y + rot.z * rot.z), 0,
62
+ 0, 0, 0, 1
63
+ );
64
+ mat4 scale = mat4(
65
+ scl.x, 0 , 0 , 0,
66
+ 0 , scl.y, 0 , 0,
67
+ 0 , 0 , scl.z, 0,
68
+ 0 , 0 , 0 , 1
69
+ );
70
+ return translation * rotation * scale;
71
+ }
72
+
73
+ // Function to get the TBN matrix for normal mapping
74
+ mat3 getTBN(mat4 modelMatrix, vec3 normal, vec3 tangent, vec3 bitangent){
75
+ vec3 T = normalize(vec3(modelMatrix * vec4(tangent, 0.0)));
76
+ vec3 B = normalize(vec3(modelMatrix * vec4(bitangent, 0.0)));
77
+ vec3 N = normalize(vec3(modelMatrix * vec4(normal, 0.0)));
78
+ return mat3(T, B, N);
79
+ }
80
+
81
+ void main() {
82
+ // Set the model matrix
83
+ mat4 modelMatrix = getModelMatrix(obj_position, obj_rotation, obj_scale);
84
+
85
+ // Set out variables
86
+ position = (modelMatrix * vec4(in_position, 1.0)).xyz;
87
+ TBN = getTBN(modelMatrix, in_normal, in_tangent, in_bitangent);
88
+ uv = in_uv;
89
+
90
+ // Get the material
91
+ int mtl_size = 28;
92
+ int materialID = int(obj_material);
93
+
94
+ mtl.color = vec3(texelFetch(materialsTexture, ivec2(0, 0 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 1 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 2 + materialID * mtl_size), 0).r);
95
+ mtl.roughness = texelFetch(materialsTexture, ivec2(0, 3 + materialID * mtl_size), 0).r;
96
+ mtl.subsurface = texelFetch(materialsTexture, ivec2(0, 4 + materialID * mtl_size), 0).r;
97
+ mtl.sheen = texelFetch(materialsTexture, ivec2(0, 5 + materialID * mtl_size), 0).r;
98
+ mtl.sheenTint = texelFetch(materialsTexture, ivec2(0, 6 + materialID * mtl_size), 0).r;
99
+ mtl.anisotropic = texelFetch(materialsTexture, ivec2(0, 7 + materialID * mtl_size), 0).r;
100
+ mtl.specular = texelFetch(materialsTexture, ivec2(0, 8 + materialID * mtl_size), 0).r;
101
+ mtl.metallicness = texelFetch(materialsTexture, ivec2(0, 9 + materialID * mtl_size), 0).r;
102
+ mtl.specularTint = texelFetch(materialsTexture, ivec2(0, 10 + materialID * mtl_size), 0).r;
103
+ mtl.clearcoat = texelFetch(materialsTexture, ivec2(0, 11 + materialID * mtl_size), 0).r;
104
+ mtl.clearcoatGloss = texelFetch(materialsTexture, ivec2(0, 12 + materialID * mtl_size), 0).r;
105
+
106
+ mtl.hasAlbedoMap = int(texelFetch(materialsTexture, ivec2(0, 13 + materialID * mtl_size), 0).r);
107
+ mtl.albedoMap = vec2(texelFetch(materialsTexture, ivec2(0, 14 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 15 + materialID * mtl_size), 0).r);
108
+ mtl.hasNormalMap = int(texelFetch(materialsTexture, ivec2(0, 16 + materialID * mtl_size), 0).r);
109
+ mtl.normalMap = vec2(texelFetch(materialsTexture, ivec2(0, 17 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 18 + materialID * mtl_size), 0).r);
110
+ mtl.hasRoughnessMap = int(texelFetch(materialsTexture, ivec2(0, 19 + materialID * mtl_size), 0).r);
111
+ mtl.roughnessMap = vec2(texelFetch(materialsTexture, ivec2(0, 20 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 21 + materialID * mtl_size), 0).r);
112
+ mtl.hasAoMap = int(texelFetch(materialsTexture, ivec2(0, 22 + materialID * mtl_size), 0).r);
113
+ mtl.aoMap = vec2(texelFetch(materialsTexture, ivec2(0, 23 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 24 + materialID * mtl_size), 0).r);
114
+ mtl.emissiveColor = vec3(texelFetch(materialsTexture, ivec2(0, 25 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 26 + materialID * mtl_size), 0).r, texelFetch(materialsTexture, ivec2(0, 27 + materialID * mtl_size), 0).r);
115
+
116
+ // Set the fragment position
117
+ gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(in_position, 1.0);
118
118
  }
@@ -1,24 +1,24 @@
1
- #version 330 core
2
-
3
- out vec4 fragColor;
4
-
5
- in vec2 uv;
6
-
7
- uniform sampler2D screenTexture;
8
- uniform ivec2 textureSize;
9
-
10
- void main()
11
- {
12
-
13
- vec2 texelSize = 1.0 / textureSize;
14
-
15
- vec4 color = vec4(0.0);
16
-
17
- // Basic 2x2 downsampling (averaging)
18
- color += texture(screenTexture, clamp(uv + vec2(-texelSize.x, -texelSize.y), 0.0, 0.9999));
19
- color += texture(screenTexture, clamp(uv + vec2( texelSize.x, -texelSize.y), 0.0, 0.9999));
20
- color += texture(screenTexture, clamp(uv + vec2(-texelSize.x, texelSize.y), 0.0, 0.9999));
21
- color += texture(screenTexture, clamp(uv + vec2( texelSize.x, texelSize.y), 0.0, 0.9999));
22
-
23
- fragColor = color / 4.0; // Average the four samples
1
+ #version 330 core
2
+
3
+ out vec4 fragColor;
4
+
5
+ in vec2 uv;
6
+
7
+ uniform sampler2D screenTexture;
8
+ uniform ivec2 textureSize;
9
+
10
+ void main()
11
+ {
12
+
13
+ vec2 texelSize = 1.0 / textureSize;
14
+
15
+ vec4 color = vec4(0.0);
16
+
17
+ // Basic 2x2 downsampling (averaging)
18
+ color += texture(screenTexture, clamp(uv + vec2(-texelSize.x, -texelSize.y), 0.0, 0.9999));
19
+ color += texture(screenTexture, clamp(uv + vec2( texelSize.x, -texelSize.y), 0.0, 0.9999));
20
+ color += texture(screenTexture, clamp(uv + vec2(-texelSize.x, texelSize.y), 0.0, 0.9999));
21
+ color += texture(screenTexture, clamp(uv + vec2( texelSize.x, texelSize.y), 0.0, 0.9999));
22
+
23
+ fragColor = color / 4.0; // Average the four samples
24
24
  }
@@ -0,0 +1,25 @@
1
+ #version 330 core
2
+
3
+ out vec4 fragColor;
4
+
5
+ in vec2 uv;
6
+
7
+ uniform sampler2D screenTexture;
8
+ uniform sampler2D bloomTexture;
9
+
10
+
11
+
12
+ void main()
13
+ {
14
+ const float gamma = 2.2;
15
+ const float exposure = 1.2;
16
+ vec3 hdrColor = texture(screenTexture, uv).rgb + texture(bloomTexture, uv).rgb / 2;
17
+
18
+ // exposure tone mapping
19
+ vec3 mapped = vec3(1.0) - exp(-hdrColor * exposure);
20
+ // gamma correction
21
+ mapped = pow(mapped, vec3(1.0 / gamma));
22
+
23
+ fragColor = vec4(mapped, 1.0);
24
+ //fragColor = texture(screenTexture, uv) + texture(bloomTexture, uv) / 20000.0;
25
+ }
@@ -1,34 +1,34 @@
1
- #version 330 core
2
-
3
- out vec4 fragColor;
4
-
5
- in vec2 uv;
6
-
7
- uniform sampler2D highTexture;
8
- uniform sampler2D lowTexture;
9
-
10
- uniform ivec2 textureSize;
11
-
12
- void main()
13
- {
14
-
15
- vec2 texelSize = 1.0 / textureSize;
16
-
17
- vec4 color = vec4(0.0);
18
-
19
- // Basic 2x2 upsample (averaging)
20
- color += texture(lowTexture, clamp(uv + vec2( 1, 1) * texelSize, 0.0, 0.9999));
21
- color += texture(lowTexture, clamp(uv + vec2( 1, 0) * texelSize, 0.0, 0.9999)) * 2.0;
22
- color += texture(lowTexture, clamp(uv + vec2( 1, -1) * texelSize, 0.0, 0.9999));
23
-
24
- color += texture(lowTexture, clamp(uv + vec2( 0, 1) * texelSize, 0.0, 0.9999)) * 2.0;
25
- color += texture(lowTexture, clamp(uv + vec2( 0, 0) * texelSize, 0.0, 0.9999)) * 4.0;
26
- color += texture(lowTexture, clamp(uv + vec2( 0, -1) * texelSize, 0.0, 0.9999)) * 2.0;
27
-
28
- color += texture(lowTexture, clamp(uv + vec2(-1, 1) * texelSize, 0.0, 0.9999));
29
- color += texture(lowTexture, clamp(uv + vec2(-1, 0) * texelSize, 0.0, 0.9999)) * 2.0;
30
- color += texture(lowTexture, clamp(uv + vec2(-1, -1) * texelSize, 0.0, 0.9999));
31
-
32
- fragColor = texture(highTexture, uv) + color / 16.0; // Average the four samples
33
-
1
+ #version 330 core
2
+
3
+ out vec4 fragColor;
4
+
5
+ in vec2 uv;
6
+
7
+ uniform sampler2D highTexture;
8
+ uniform sampler2D lowTexture;
9
+
10
+ uniform ivec2 textureSize;
11
+
12
+ void main()
13
+ {
14
+
15
+ vec2 texelSize = 1.0 / textureSize;
16
+
17
+ vec4 color = vec4(0.0);
18
+
19
+ // Basic 2x2 upsample (averaging)
20
+ color += texture(lowTexture, clamp(uv + vec2( 1, 1) * texelSize, 0.0, 0.9999));
21
+ color += texture(lowTexture, clamp(uv + vec2( 1, 0) * texelSize, 0.0, 0.9999)) * 2.0;
22
+ color += texture(lowTexture, clamp(uv + vec2( 1, -1) * texelSize, 0.0, 0.9999));
23
+
24
+ color += texture(lowTexture, clamp(uv + vec2( 0, 1) * texelSize, 0.0, 0.9999)) * 2.0;
25
+ color += texture(lowTexture, clamp(uv + vec2( 0, 0) * texelSize, 0.0, 0.9999)) * 4.0;
26
+ color += texture(lowTexture, clamp(uv + vec2( 0, -1) * texelSize, 0.0, 0.9999)) * 2.0;
27
+
28
+ color += texture(lowTexture, clamp(uv + vec2(-1, 1) * texelSize, 0.0, 0.9999));
29
+ color += texture(lowTexture, clamp(uv + vec2(-1, 0) * texelSize, 0.0, 0.9999)) * 2.0;
30
+ color += texture(lowTexture, clamp(uv + vec2(-1, -1) * texelSize, 0.0, 0.9999));
31
+
32
+ fragColor = texture(highTexture, uv) + color / 16.0; // Average the four samples
33
+
34
34
  }
basilisk/shaders/crt.frag CHANGED
@@ -1,35 +1,35 @@
1
- #version 330 core
2
-
3
- layout (location = 0) out vec4 fragColor;
4
- layout (location = 1) out vec4 bloomColor;
5
-
6
- in vec2 uv;
7
-
8
- uniform sampler2D screenTexture;
9
-
10
- float warp = 0.75; // simulate curvature of CRT monitor
11
- float scan = 0.75; // simulate darkness between scanlines
12
-
13
- void main(){
14
- // squared distance from center
15
- vec2 crt_uv = uv;
16
- vec2 dc = abs(0.5-uv);
17
- dc *= dc;
18
-
19
- // warp the fragment coordinates
20
- crt_uv.x -= 0.5; crt_uv.x *= 1.0+(dc.y*(0.3*warp)); crt_uv.x += 0.5;
21
- crt_uv.y -= 0.5; crt_uv.y *= 1.0+(dc.x*(0.4*warp)); crt_uv.y += 0.5;
22
-
23
- // sample inside boundaries, otherwise set to black
24
- if (crt_uv.y > 1.0 || crt_uv.x < 0.0 || crt_uv.x > 1.0 || crt_uv.y < 0.0) {
25
- fragColor = vec4(0.0, 0.0, 0.0, 1.0);
26
- }
27
- else {
28
- // determine if we are drawing in a scanline
29
- float apply = abs(sin(crt_uv.y * 300)*0.5*scan);
30
- //sample the texture
31
- fragColor = vec4(mix(texture(screenTexture, crt_uv).rgb,vec3(0.0), apply), 1.0);
32
- }
33
-
34
- bloomColor = vec4(0.0, 0.0, 0.0, 0.0);
1
+ #version 330 core
2
+
3
+ layout (location = 0) out vec4 fragColor;
4
+ layout (location = 1) out vec4 bloomColor;
5
+
6
+ in vec2 uv;
7
+
8
+ uniform sampler2D screenTexture;
9
+
10
+ float warp = 0.75; // simulate curvature of CRT monitor
11
+ float scan = 0.75; // simulate darkness between scanlines
12
+
13
+ void main(){
14
+ // squared distance from center
15
+ vec2 crt_uv = uv;
16
+ vec2 dc = abs(0.5-uv);
17
+ dc *= dc;
18
+
19
+ // warp the fragment coordinates
20
+ crt_uv.x -= 0.5; crt_uv.x *= 1.0+(dc.y*(0.3*warp)); crt_uv.x += 0.5;
21
+ crt_uv.y -= 0.5; crt_uv.y *= 1.0+(dc.x*(0.4*warp)); crt_uv.y += 0.5;
22
+
23
+ // sample inside boundaries, otherwise set to black
24
+ if (crt_uv.y > 1.0 || crt_uv.x < 0.0 || crt_uv.x > 1.0 || crt_uv.y < 0.0) {
25
+ fragColor = vec4(0.0, 0.0, 0.0, 1.0);
26
+ }
27
+ else {
28
+ // determine if we are drawing in a scanline
29
+ float apply = abs(sin(crt_uv.y * 300)*0.5*scan);
30
+ //sample the texture
31
+ fragColor = vec4(mix(texture(screenTexture, crt_uv).rgb,vec3(0.0), apply), 1.0);
32
+ }
33
+
34
+ bloomColor = vec4(0.0, 0.0, 0.0, 0.0);
35
35
  }
@@ -1,28 +1,28 @@
1
- #version 330 core
2
-
3
- layout (location = 0) out vec4 fragColor;
4
- layout (location = 1) out vec4 bloomColor;
5
- layout (location = 2) out vec4 normalTexture;
6
-
7
-
8
- in vec4 color;
9
- in vec2 imageIndex;
10
- in vec2 uv;
11
- in float alpha;
12
- flat in int usesImage;
13
-
14
- struct textArray {
15
- sampler2DArray array;
16
- };
17
- uniform textArray textureArrays[5];
18
-
19
- void main() {
20
- if (bool(usesImage)) {
21
- fragColor = texture(textureArrays[int(round(imageIndex.x))].array, vec3(uv, round(imageIndex.y))) * alpha;
22
- }
23
- else {
24
- fragColor = color;
25
- }
26
- normalTexture = vec4(0.0);
27
- bloomColor = vec4(0.0);
1
+ #version 330 core
2
+
3
+ layout (location = 0) out vec4 fragColor;
4
+ layout (location = 1) out vec4 bloomColor;
5
+ layout (location = 2) out vec4 normalTexture;
6
+
7
+
8
+ in vec4 color;
9
+ in vec2 imageIndex;
10
+ in vec2 uv;
11
+ in float alpha;
12
+ flat in int usesImage;
13
+
14
+ struct textArray {
15
+ sampler2DArray array;
16
+ };
17
+ uniform textArray textureArrays[5];
18
+
19
+ void main() {
20
+ if (bool(usesImage)) {
21
+ fragColor = texture(textureArrays[int(round(imageIndex.x))].array, vec3(uv, round(imageIndex.y))) * alpha;
22
+ }
23
+ else {
24
+ fragColor = color;
25
+ }
26
+ normalTexture = vec4(0.0);
27
+ bloomColor = vec4(0.0);
28
28
  }
@@ -1,26 +1,26 @@
1
- #version 330 core
2
-
3
- layout (location = 0) in vec2 in_position;
4
- layout (location = 1) in vec4 in_color;
5
- layout (location = 2) in int in_uses_image;
6
- layout (location = 3) in float in_alpha;
7
-
8
- out vec4 color;
9
- out vec2 imageIndex;
10
- out float alpha;
11
- out vec2 uv;
12
- flat out int usesImage;
13
-
14
- void main() {
15
- usesImage = in_uses_image;
16
- if (bool(in_uses_image)) {
17
- imageIndex = in_color.xy;
18
- uv = in_color.zw;
19
- alpha = in_alpha;
20
- }
21
- else{
22
- color = in_color;
23
- alpha = 1.0;
24
- }
25
- gl_Position = vec4(in_position.x, -in_position.y, 0.0, 1.0);
1
+ #version 330 core
2
+
3
+ layout (location = 0) in vec2 in_position;
4
+ layout (location = 1) in vec4 in_color;
5
+ layout (location = 2) in int in_uses_image;
6
+ layout (location = 3) in float in_alpha;
7
+
8
+ out vec4 color;
9
+ out vec2 imageIndex;
10
+ out float alpha;
11
+ out vec2 uv;
12
+ flat out int usesImage;
13
+
14
+ void main() {
15
+ usesImage = in_uses_image;
16
+ if (bool(in_uses_image)) {
17
+ imageIndex = in_color.xy;
18
+ uv = in_color.zw;
19
+ alpha = in_alpha;
20
+ }
21
+ else{
22
+ color = in_color;
23
+ alpha = 1.0;
24
+ }
25
+ gl_Position = vec4(in_position.x, -in_position.y, 0.0, 1.0);
26
26
  }
@@ -1,23 +1,23 @@
1
- #version 330 core
2
-
3
- out vec4 fragColor;
4
-
5
- in vec2 uv;
6
-
7
- uniform sampler2D screenTexture;
8
-
9
-
10
- void main()
11
- {
12
- vec2 direction = normalize(vec2(1.0, 1.0));
13
- float magnitude = 0.6;
14
- float redOffset = 0.009 * magnitude;
15
- float greenOffset = 0.006 * magnitude;
16
- float blueOffset = -0.006 * magnitude;
17
-
18
- float r = texture(screenTexture, uv + direction * redOffset).r;
19
- float g = texture(screenTexture, uv + direction * greenOffset).g;
20
- float b = texture(screenTexture, uv + direction * blueOffset).b;
21
-
22
- fragColor = vec4(r, g, b, 1.0);
1
+ #version 330 core
2
+
3
+ out vec4 fragColor;
4
+
5
+ in vec2 uv;
6
+
7
+ uniform sampler2D screenTexture;
8
+
9
+
10
+ void main()
11
+ {
12
+ vec2 direction = normalize(vec2(1.0, 1.0));
13
+ float magnitude = 0.6;
14
+ float redOffset = 0.009 * magnitude;
15
+ float greenOffset = 0.006 * magnitude;
16
+ float blueOffset = -0.006 * magnitude;
17
+
18
+ float r = texture(screenTexture, uv + direction * redOffset).r;
19
+ float g = texture(screenTexture, uv + direction * greenOffset).g;
20
+ float b = texture(screenTexture, uv + direction * blueOffset).b;
21
+
22
+ fragColor = vec4(r, g, b, 1.0);
23
23
  }
@@ -1,14 +1,14 @@
1
- #version 330 core
2
-
3
- layout (location = 0) out vec4 fragColor;
4
-
5
- in vec2 uv;
6
-
7
- uniform sampler2D screenTexture;
8
-
9
-
10
- void main()
11
- {
12
- vec4 color = texture(screenTexture, uv);
13
- fragColor = color;
1
+ #version 330 core
2
+
3
+ layout (location = 0) out vec4 fragColor;
4
+
5
+ in vec2 uv;
6
+
7
+ uniform sampler2D screenTexture;
8
+
9
+
10
+ void main()
11
+ {
12
+ vec4 color = texture(screenTexture, uv);
13
+ fragColor = color;
14
14
  }
@@ -1,14 +1,14 @@
1
- #version 330 core
2
-
3
-
4
- layout (location = 0) in vec3 in_position;
5
- layout (location = 1) in vec2 in_uv;
6
-
7
- out vec2 uv;
8
-
9
-
10
- void main()
11
- {
12
- gl_Position = vec4(in_position.x, in_position.y, 0.0, 1.0);
13
- uv = in_uv;
1
+ #version 330 core
2
+
3
+
4
+ layout (location = 0) in vec3 in_position;
5
+ layout (location = 1) in vec2 in_uv;
6
+
7
+ out vec2 uv;
8
+
9
+
10
+ void main()
11
+ {
12
+ gl_Position = vec4(in_position.x, in_position.y, 0.0, 1.0);
13
+ uv = in_uv;
14
14
  }