shaderflow 0.4.0.dev1__py2.py3-none-any.whl → 0.5.0.dev0__py2.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.
- ShaderFlow/Modules/Audio.py +2 -2
- ShaderFlow/Resources/Shaders/Include/Camera.glsl +2 -6
- ShaderFlow/Scene.py +17 -30
- ShaderFlow/Shader.py +1 -1
- ShaderFlow/Texture.py +9 -7
- ShaderFlow/__main__.py +1 -1
- {shaderflow-0.4.0.dev1.dist-info → shaderflow-0.5.0.dev0.dist-info}/METADATA +28 -18
- {shaderflow-0.4.0.dev1.dist-info → shaderflow-0.5.0.dev0.dist-info}/RECORD +10 -10
- {shaderflow-0.4.0.dev1.dist-info → shaderflow-0.5.0.dev0.dist-info}/WHEEL +0 -0
- {shaderflow-0.4.0.dev1.dist-info → shaderflow-0.5.0.dev0.dist-info}/entry_points.txt +0 -0
ShaderFlow/Modules/Audio.py
CHANGED
|
@@ -107,8 +107,8 @@ class BrokenAudio:
|
|
|
107
107
|
def get_data_between_seconds(self, start: Seconds, end: Seconds) -> numpy.ndarray:
|
|
108
108
|
return self.get_data_between_samples(start*self.samplerate, end*self.samplerate)
|
|
109
109
|
|
|
110
|
-
def get_last_n_samples(self, n: Samples) -> numpy.ndarray:
|
|
111
|
-
return self.data[:, -int(n):]
|
|
110
|
+
def get_last_n_samples(self, n: Samples, *, offset: Samples=0) -> numpy.ndarray:
|
|
111
|
+
return self.data[:, (-1)*(int(n+offset) + 1) : (-1)*(int(offset) + 1)]
|
|
112
112
|
|
|
113
113
|
def get_last_n_seconds(self, n: Seconds) -> numpy.ndarray:
|
|
114
114
|
return self.get_last_n_samples(n*self.samplerate)
|
|
@@ -77,17 +77,12 @@
|
|
|
77
77
|
Camera CameraRay2D(Camera camera) {
|
|
78
78
|
|
|
79
79
|
// Calculate the interstion with the plane define by a point and norm
|
|
80
|
+
// Note: (t < 0) the intersection is behind the camera
|
|
80
81
|
// https://en.wikipedia.org/wiki/Line%E2%80%93plane_intersection
|
|
81
82
|
float num = dot(camera.plane_point - camera.origin, camera.plane_normal);
|
|
82
83
|
float den = dot(camera.ray, camera.plane_normal);
|
|
83
84
|
float t = num/den;
|
|
84
85
|
|
|
85
|
-
// The ray intersects the plane behind the camera
|
|
86
|
-
if (t < 0) {
|
|
87
|
-
camera.out_of_bounds = true;
|
|
88
|
-
return camera;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
86
|
// Calculate the intersection point
|
|
92
87
|
camera.gluv = (camera.origin + (t*camera.ray)).xy;
|
|
93
88
|
camera.stuv = gluv2stuv(camera.gluv);
|
|
@@ -95,6 +90,7 @@
|
|
|
95
90
|
camera.astuv = gluv2stuv(camera.agluv);
|
|
96
91
|
camera.stxy = (iResolution * camera.astuv);
|
|
97
92
|
camera.glxy = (camera.stxy - iResolution/2.0);
|
|
93
|
+
camera.out_of_bounds = (t < 0) || (abs(gluv.x) > iWantAspect);
|
|
98
94
|
return camera;
|
|
99
95
|
}
|
|
100
96
|
|
ShaderFlow/Scene.py
CHANGED
|
@@ -25,6 +25,7 @@ import imgui
|
|
|
25
25
|
import moderngl
|
|
26
26
|
import PIL
|
|
27
27
|
import tqdm
|
|
28
|
+
import turbopipe
|
|
28
29
|
from attr import Factory, define, field
|
|
29
30
|
from dotmap import DotMap
|
|
30
31
|
from moderngl_window.context.base import BaseWindow as ModernglWindow
|
|
@@ -109,7 +110,7 @@ class ShaderScene(ShaderModule):
|
|
|
109
110
|
|
|
110
111
|
def __post__(self):
|
|
111
112
|
self.typer.description = (self.typer.description or self.__class__.__doc__)
|
|
112
|
-
self.typer._panel = "🔥 Scene
|
|
113
|
+
self.typer._panel = "🔥 Scene commands"
|
|
113
114
|
self.typer.command(self.main, context=True)
|
|
114
115
|
self.build()
|
|
115
116
|
|
|
@@ -118,13 +119,8 @@ class ShaderScene(ShaderModule):
|
|
|
118
119
|
the `main` method. Must not start with `sys.executable`, so send `sys.argv[1:]` or direct"""
|
|
119
120
|
self.typer(flatten(args))
|
|
120
121
|
|
|
121
|
-
|
|
122
|
-
|
|
122
|
+
@OnceTracker.decorator
|
|
123
123
|
def build(self):
|
|
124
|
-
if self.__built__():
|
|
125
|
-
return
|
|
126
|
-
|
|
127
|
-
# Init Imgui
|
|
128
124
|
imgui.create_context()
|
|
129
125
|
self.imguio = imgui.get_io()
|
|
130
126
|
self.imguio.font_global_scale = 1
|
|
@@ -302,7 +298,7 @@ class ShaderScene(ShaderModule):
|
|
|
302
298
|
|
|
303
299
|
# # Video modes and monitor
|
|
304
300
|
|
|
305
|
-
monitor: int = os.
|
|
301
|
+
monitor: int = os.getenv("MONITOR", 0)
|
|
306
302
|
|
|
307
303
|
@property
|
|
308
304
|
def glfw_monitor(self) -> Optional[glfw._GLFWmonitor]:
|
|
@@ -487,7 +483,7 @@ class ShaderScene(ShaderModule):
|
|
|
487
483
|
# ---------------------------------------------------------------------------------------------|
|
|
488
484
|
# Window, OpenGL, Backend
|
|
489
485
|
|
|
490
|
-
backend: WindowBackend = WindowBackend.get(os.
|
|
486
|
+
backend: WindowBackend = WindowBackend.get(os.getenv("WINDOW_BACKEND", WindowBackend.GLFW))
|
|
491
487
|
"""The ModernGL Window Backend. **Cannot be changed after creation**. Can also be set with the
|
|
492
488
|
environment variable `WINDOW_BACKEND=<backend>`, where `backend = {glfw, headless}`"""
|
|
493
489
|
|
|
@@ -510,8 +506,9 @@ class ShaderScene(ShaderModule):
|
|
|
510
506
|
raise RuntimeError("Window backend cannot be changed after creation")
|
|
511
507
|
|
|
512
508
|
# Use EGL for creating a OpenGL context, allows true headless with GPU acceleration
|
|
513
|
-
# https://forums.developer.nvidia.com/t/81412
|
|
514
|
-
|
|
509
|
+
# Comments 2 and 6: (https://forums.developer.nvidia.com/t/81412)
|
|
510
|
+
# Note: For the cloud, see (https://brokensrc.dev/get/docker/)
|
|
511
|
+
backend = "egl" if (os.getenv("WINDOW_EGL", "1") == "1") else None
|
|
515
512
|
|
|
516
513
|
# Dynamically import the ModernGL Window Backend and instantiate it. Vsync is on our side 😉
|
|
517
514
|
module = f"moderngl_window.context.{denum(self.backend).lower()}"
|
|
@@ -549,7 +546,7 @@ class ShaderScene(ShaderModule):
|
|
|
549
546
|
ShaderKeyboard.Keys.LEFT_CTRL = glfw.KEY_LEFT_CONTROL
|
|
550
547
|
ShaderKeyboard.Keys.LEFT_ALT = glfw.KEY_LEFT_ALT
|
|
551
548
|
|
|
552
|
-
log.
|
|
549
|
+
log.info(f"OpenGL Renderer: {self.opengl.info['GL_RENDERER']}")
|
|
553
550
|
|
|
554
551
|
def read_screen(self) -> bytes:
|
|
555
552
|
"""Take a screenshot of the screen and return raw bytes. Length `width*height*components`"""
|
|
@@ -706,10 +703,10 @@ class ShaderScene(ShaderModule):
|
|
|
706
703
|
self.headless = (self.rendering)
|
|
707
704
|
self.fps = (fps or self.monitor_framerate)
|
|
708
705
|
self.title = f"ShaderFlow | {self.__name__}"
|
|
709
|
-
self.fullscreen = fullscreen
|
|
710
706
|
self.quality = quality or self.quality
|
|
711
707
|
self.repeat = repeat or self.repeat
|
|
712
708
|
self.ssaa = ssaa or self.ssaa
|
|
709
|
+
self.fullscreen = fullscreen
|
|
713
710
|
self.time = 0
|
|
714
711
|
self.tempo.set(tempo or self.tempo.value)
|
|
715
712
|
|
|
@@ -729,11 +726,9 @@ class ShaderScene(ShaderModule):
|
|
|
729
726
|
|
|
730
727
|
# Configure FFmpeg and Popen it
|
|
731
728
|
if (self.rendering):
|
|
732
|
-
|
|
733
|
-
# Get video output path - if not absolute, save to data directory
|
|
734
729
|
export = Path(output or f"({export_started}) {self.__name__}")
|
|
735
730
|
export = export if export.is_absolute() else (self.export_base/export)
|
|
736
|
-
export = export.with_suffix(
|
|
731
|
+
export = export.with_suffix("." + (self.export_format or export.suffix).replace(".", ""))
|
|
737
732
|
export = self.export_name(export)
|
|
738
733
|
|
|
739
734
|
self.ffmpeg = (BrokenFFmpeg(time=self.runtime).quiet()
|
|
@@ -753,7 +748,7 @@ class ShaderScene(ShaderModule):
|
|
|
753
748
|
|
|
754
749
|
if self.exporting:
|
|
755
750
|
buffer = self.opengl.buffer(reserve=self._final.texture.size_t)
|
|
756
|
-
self.ffmpeg = self.ffmpeg.popen(stdin=PIPE
|
|
751
|
+
self.ffmpeg = self.ffmpeg.popen(stdin=PIPE)
|
|
757
752
|
|
|
758
753
|
# Status tracker
|
|
759
754
|
status = DotMap(
|
|
@@ -798,17 +793,8 @@ class ShaderScene(ShaderModule):
|
|
|
798
793
|
|
|
799
794
|
# Write a new frame to FFmpeg
|
|
800
795
|
if self.exporting:
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
self.ffmpeg.stdin.write(frame)
|
|
804
|
-
elif (_BUFFER_PROXY := True):
|
|
805
|
-
self._final.texture.fbo().read_into(buffer)
|
|
806
|
-
self.ffmpeg.stdin.write(buffer.read())
|
|
807
|
-
elif (_MGL_FORK_METHOD := False):
|
|
808
|
-
self._final.texture.fbo().read_into(buffer)
|
|
809
|
-
buffer.read_into(self.ffmpeg.stdin)
|
|
810
|
-
else:
|
|
811
|
-
raise RuntimeError("No read method selected")
|
|
796
|
+
self._final.texture.fbo().read_into(buffer)
|
|
797
|
+
turbopipe.pipe(buffer, self.ffmpeg.stdin.fileno())
|
|
812
798
|
|
|
813
799
|
# Finish exporting condition
|
|
814
800
|
if (status.bar.n < self.total_frames):
|
|
@@ -816,7 +802,8 @@ class ShaderScene(ShaderModule):
|
|
|
816
802
|
status.bar.close()
|
|
817
803
|
|
|
818
804
|
if self.exporting:
|
|
819
|
-
log.info("Waiting for FFmpeg process to finish (
|
|
805
|
+
log.info("Waiting for FFmpeg process to finish (Queued writes, codecs lookahead, buffers, etc)")
|
|
806
|
+
turbopipe.close()
|
|
820
807
|
self.ffmpeg.stdin.close()
|
|
821
808
|
outputs.append(export)
|
|
822
809
|
|
|
@@ -897,6 +884,7 @@ class ShaderScene(ShaderModule):
|
|
|
897
884
|
yield ShaderVariable("uniform", "float", "iDuration", self.duration)
|
|
898
885
|
yield ShaderVariable("uniform", "float", "iDeltaTime", self.dt)
|
|
899
886
|
yield ShaderVariable("uniform", "vec2", "iResolution", self.resolution)
|
|
887
|
+
yield ShaderVariable("uniform", "float", "iWantAspect", self.aspect_ratio)
|
|
900
888
|
yield ShaderVariable("uniform", "float", "iQuality", self.quality/100)
|
|
901
889
|
yield ShaderVariable("uniform", "float", "iSSAA", self.ssaa)
|
|
902
890
|
yield ShaderVariable("uniform", "float", "iFrameRate", self.fps)
|
|
@@ -919,7 +907,6 @@ class ShaderScene(ShaderModule):
|
|
|
919
907
|
self.imgui.resize(width, height)
|
|
920
908
|
self._width, self._height = width, height
|
|
921
909
|
self.relay(ShaderMessage.Shader.RecreateTextures)
|
|
922
|
-
self.relay(ShaderMessage.Shader.Render)
|
|
923
910
|
|
|
924
911
|
def __window_close__(self) -> None:
|
|
925
912
|
self.relay(ShaderMessage.Window.Close())
|
ShaderFlow/Shader.py
CHANGED
|
@@ -327,7 +327,7 @@ class ShaderObject(ShaderModule):
|
|
|
327
327
|
self.compile()
|
|
328
328
|
self.render()
|
|
329
329
|
|
|
330
|
-
SKIP_GPU: bool = (os.
|
|
330
|
+
SKIP_GPU: bool = (os.getenv("SKIP_GPU", "0") == "1")
|
|
331
331
|
"""Do not render shaders, useful for benchmarking raw Python performance"""
|
|
332
332
|
|
|
333
333
|
def render_fbo(self, fbo: moderngl.Framebuffer, clear: bool=True) -> None:
|
ShaderFlow/Texture.py
CHANGED
|
@@ -343,10 +343,11 @@ class ShaderTexture(ShaderModule):
|
|
|
343
343
|
list.append(fill())
|
|
344
344
|
return list
|
|
345
345
|
|
|
346
|
-
def _populate(self) ->
|
|
346
|
+
def _populate(self) -> Iterable[Tuple[int, int, TextureBox]]:
|
|
347
347
|
self._pop_fill(self.matrix, deque, self.temporal)
|
|
348
348
|
for row in self.matrix:
|
|
349
349
|
self._pop_fill(row, TextureBox, self.layers)
|
|
350
|
+
return self.boxes
|
|
350
351
|
|
|
351
352
|
@property
|
|
352
353
|
def boxes(self) -> Iterable[Tuple[int, int, TextureBox]]:
|
|
@@ -358,12 +359,13 @@ class ShaderTexture(ShaderModule):
|
|
|
358
359
|
yield from self.matrix[n]
|
|
359
360
|
|
|
360
361
|
def make(self) -> Self:
|
|
361
|
-
if (max(self.size) >
|
|
362
|
-
raise Exception(f"Texture size
|
|
362
|
+
if (max(self.size) > (limit := self.scene.opengl.info['GL_MAX_VIEWPORT_DIMS'][0])):
|
|
363
|
+
raise Exception(f"Texture size too large for this OpenGL context: {self.size} > {limit}")
|
|
363
364
|
|
|
364
|
-
|
|
365
|
+
# Recreate texture boxes to match new length
|
|
365
366
|
for (_, _, box) in self.boxes:
|
|
366
367
|
box.release()
|
|
368
|
+
for (_, _, box) in self._populate():
|
|
367
369
|
box.texture = self.scene.opengl.texture(
|
|
368
370
|
components=self.components,
|
|
369
371
|
dtype=self.dtype.name,
|
|
@@ -457,15 +459,15 @@ class ShaderTexture(ShaderModule):
|
|
|
457
459
|
# ------------------------------------------|
|
|
458
460
|
|
|
459
461
|
@property
|
|
460
|
-
def
|
|
462
|
+
def bytes_per_pixel(self) -> int:
|
|
461
463
|
return self.dtype.value().nbytes * self.components
|
|
462
464
|
|
|
463
465
|
def sample_xy(self, x: float, y: float, temporal: int=0, layer: int=-1) -> numpy.ndarray:
|
|
464
466
|
"""Get the Pixel at a XY coordinate: Origin at Top Right (0, 0); Bottom Left (width, height)"""
|
|
465
467
|
box = self.box(temporal=temporal, layer=layer)
|
|
466
468
|
data = (box.data or box.texture.read())
|
|
467
|
-
start = int((y*self.width + x) * self.
|
|
468
|
-
return numpy.frombuffer(data, dtype=self.dtype.value)[start:start + self.
|
|
469
|
+
start = int((y*self.width + x) * self.bytes_per_pixel)
|
|
470
|
+
return numpy.frombuffer(data, dtype=self.dtype.value)[start:start + self.bytes_per_pixel]
|
|
469
471
|
|
|
470
472
|
def sample_stxy(self, x: float, y: float, temporal: int=0, layer: int=-1) -> numpy.ndarray:
|
|
471
473
|
"""Get the Pixel at a XY coordinate: Origin at Bottom left (0, 0); Top right (width, height)"""
|
ShaderFlow/__main__.py
CHANGED
|
@@ -2,7 +2,7 @@ from Broken import BrokenApp
|
|
|
2
2
|
from ShaderFlow import SHADERFLOW
|
|
3
3
|
|
|
4
4
|
SHADERFLOW_ABOUT = """
|
|
5
|
-
|
|
5
|
+
🔥 Imagine ShaderToy, on a Manim-like architecture. That's ShaderFlow.\n
|
|
6
6
|
• Tip: run "shaderflow (scene) --help" for More Options ✨
|
|
7
7
|
• Warn: Make sure you trust the file you are running
|
|
8
8
|
|
|
@@ -1,15 +1,26 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: shaderflow
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Imagine ShaderToy, on a Manim-like architecture. That's ShaderFlow.
|
|
3
|
+
Version: 0.5.0.dev0
|
|
4
|
+
Summary: 🔥 Imagine ShaderToy, on a Manim-like architecture. That's ShaderFlow.
|
|
5
|
+
Project-URL: Changelog, https://brokensrc.dev/news/category/releases
|
|
6
|
+
Project-URL: GitHub, https://github.com/BrokenSource/ShaderFlow
|
|
7
|
+
Project-URL: Funding, https://brokensrc.dev/about/sponsors
|
|
8
|
+
Project-URL: Contact, https://brokensrc.dev/about/contact
|
|
9
|
+
Project-URL: Credits, https://brokensrc.dev/about/credits
|
|
10
|
+
Project-URL: License, https://brokensrc.dev/about/license
|
|
11
|
+
Project-URL: Download, https://brokensrc.dev/get/releases
|
|
12
|
+
Project-URL: Docs, https://brokensrc.dev/shaderflow
|
|
13
|
+
Project-URL: Homepage, https://brokensrc.dev
|
|
5
14
|
Author-email: Tremeschin <29046864+Tremeschin@users.noreply.github.com>
|
|
6
15
|
License-Expression: AGPL-3.0
|
|
7
|
-
Requires-Dist: broken-source[shaderflow]==0.
|
|
16
|
+
Requires-Dist: broken-source[shaderflow]==0.5.0.dev0
|
|
8
17
|
Description-Content-Type: text/markdown
|
|
9
18
|
|
|
10
|
-
|
|
19
|
+
> [!IMPORTANT]
|
|
20
|
+
> <sub>This repository is part of a [**monorepo**](https://github.com/BrokenSource/BrokenSource) and [**shouldn't be cloned alone**](https://brokensrc.dev/get/source)</sub>
|
|
21
|
+
|
|
11
22
|
<div align="center">
|
|
12
|
-
<a href="https://brokensrc.dev/shaderflow"><img src="
|
|
23
|
+
<a href="https://brokensrc.dev/shaderflow"><img src="https://raw.githubusercontent.com/BrokenSource/ShaderFlow/main/ShaderFlow/Resources/Images/ShaderFlow.png" width="200"></a>
|
|
13
24
|
<h1>ShaderFlow</h1>
|
|
14
25
|
<br>
|
|
15
26
|
Imagine <a href="https://www.shadertoy.com"><b>ShaderToy</b></a>, on a <a href="https://github.com/3b1b/manim"><b>Manim</b></a>-like Architecture. That's <a href="https://brokensrc.dev/shaderflow/"><b>ShaderFlow</b></a>
|
|
@@ -23,22 +34,21 @@ Description-Content-Type: text/markdown
|
|
|
23
34
|
|
|
24
35
|
A **Framework** for Creating, Exporting **Real Time** and **Audio Reactive** Shaders
|
|
25
36
|
|
|
26
|
-
- **🛡️ Open Source**,
|
|
27
|
-
- **🧸 80% ShaderToy**
|
|
28
|
-
- **📔 Video Codecs**:
|
|
29
|
-
- **🚀 Physics-like**
|
|
30
|
-
- **🔱 High Quality**,
|
|
31
|
-
- **🎵 Audio Reactive**,
|
|
32
|
-
- **🌊 Audio Waveforms** and
|
|
33
|
-
- **🎥 Video as Texture**:
|
|
34
|
-
- **♻️ Live Reload**
|
|
35
|
-
- **🎨 No Watermarks**,
|
|
36
|
-
- **⏳ Perfect Frametimes**,
|
|
37
|
-
- **🌵 Fastest**
|
|
37
|
+
- **🛡️ Open Source**, trust and transparency, cross platform, configurable
|
|
38
|
+
- **🧸 80% ShaderToy** compatible, easily transfer your knowledge
|
|
39
|
+
- **📔 Video Codecs**: easily export to H264, HEVC, AV1, (+NVENC)
|
|
40
|
+
- **🚀 Physics-like** animations with control systems dynamics
|
|
41
|
+
- **🔱 High Quality**, any resolution, framerate, bitrate, SSAA
|
|
42
|
+
- **🎵 Audio Reactive**, live music, professional video
|
|
43
|
+
- **🌊 Audio Waveforms** and oscilloscope support
|
|
44
|
+
- **🎥 Video as Texture**: real time 4k processing
|
|
45
|
+
- **♻️ Live Reload** shaders, instant feedback
|
|
46
|
+
- **🎨 No Watermarks**, user first experience
|
|
47
|
+
- **⏳ Perfect Frametimes**, no jitter, no lag
|
|
48
|
+
- **🌵 Fastest** rendering times in the west
|
|
38
49
|
- **👁 Built-in Camera** 2D, 3D, 360°, VR
|
|
39
50
|
- **🎹 Piano Roll** scene, the smoothest
|
|
40
51
|
|
|
41
|
-
<br>
|
|
42
52
|
<br>
|
|
43
53
|
|
|
44
54
|
# 📸 Showcase
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
ShaderFlow/Message.py,sha256=AC1aJmEQ1fitlatsCFRabVBUbDU4kXlcXkNXCU5g7uc,2574
|
|
2
2
|
ShaderFlow/Module.py,sha256=P14eJuSr5I4cCmczFS1k6HDE6nVKVw_RJO9ZNFrT7Qk,6200
|
|
3
|
-
ShaderFlow/Scene.py,sha256=
|
|
4
|
-
ShaderFlow/Shader.py,sha256=
|
|
5
|
-
ShaderFlow/Texture.py,sha256=
|
|
3
|
+
ShaderFlow/Scene.py,sha256=ZgvWRX0fQ7rJ09WcRiSDf_QvVyYeYpZEMmewnKwSDIc,47019
|
|
4
|
+
ShaderFlow/Shader.py,sha256=_4Fnwlzy_fZwznEYVvvfP0atvuAjA_gDP9_HAc9uWj8,13868
|
|
5
|
+
ShaderFlow/Texture.py,sha256=1W8y-sle6dIupwM7Z91AZHdXqMELfoYrHEKaO9LoFaI,16163
|
|
6
6
|
ShaderFlow/Variable.py,sha256=7faHZYBxw2vyIVk9vpDu2SOfxniUiAdSZ1tGKED8In8,4167
|
|
7
7
|
ShaderFlow/__init__.py,sha256=jd0CrCN355xoJqNuojUwNEvtPG5-En5Udk_lvAp_i18,304
|
|
8
|
-
ShaderFlow/__main__.py,sha256=
|
|
8
|
+
ShaderFlow/__main__.py,sha256=FC9TxumaTjq0A3mUJt2BmQUQWpsMg0JaLyFHNcTiecY,586
|
|
9
9
|
ShaderFlow/Common/Imgui.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
10
10
|
ShaderFlow/Common/Notes.py,sha256=wFm9qJbQDfnp_HwJo_-ntk9O4WeADCF6b36MTl7tNqQ,3855
|
|
11
11
|
ShaderFlow/Common/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
-
ShaderFlow/Modules/Audio.py,sha256=
|
|
12
|
+
ShaderFlow/Modules/Audio.py,sha256=p9nDL7ErAFLCDnBFAOSt2T0dEA4OgAS2DnIVMyCs7sg,14840
|
|
13
13
|
ShaderFlow/Modules/Bouncing.py,sha256=-2Zmq2xaGWuPtp8QaoYRWoLcrlkbnzqMLDTRenthuw0,3144
|
|
14
14
|
ShaderFlow/Modules/Camera.py,sha256=zipKr9ZLIFv9edSxJSaJVqPY2ot5n1GekInihtxRK_4,17918
|
|
15
15
|
ShaderFlow/Modules/Depth.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -41,11 +41,11 @@ ShaderFlow/Resources/Shaders/Fragment/Default.glsl,sha256=syBoZdAkdvRF2_3GkEb3iw
|
|
|
41
41
|
ShaderFlow/Resources/Shaders/Fragment/Final.glsl,sha256=J37od3zzSmO6XbRZ-1ZUiyU8rcaA-6gdCMPp4C9Fk48,155
|
|
42
42
|
ShaderFlow/Resources/Shaders/Fragment/Loading.frag,sha256=gIGMnh611vEJsOpB-DmjBI9EW6_4clkghbZVqB1czDA,895
|
|
43
43
|
ShaderFlow/Resources/Shaders/Fragment/Missing.glsl,sha256=NEiuErlE1z0CE2r6WGS_rn6k7Wd4q9qnCoq7E1wBGfs,574
|
|
44
|
-
ShaderFlow/Resources/Shaders/Include/Camera.glsl,sha256=
|
|
44
|
+
ShaderFlow/Resources/Shaders/Include/Camera.glsl,sha256=8ne-rE9Gp4wwDlqAyjNpujyyNJxHts3Gy_FmCSPhLLE,5372
|
|
45
45
|
ShaderFlow/Resources/Shaders/Include/Complex.glsl,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
46
|
ShaderFlow/Resources/Shaders/Include/ShaderFlow.glsl,sha256=b5gb_cnF49lPJHBVFz2orJdaIO-eRInjgTViO45gKgU,13268
|
|
47
47
|
ShaderFlow/Resources/Shaders/Vertex/Default.glsl,sha256=mptLPRKopeWq7ybJL5kV4xT_yL3hMeUAxe2LsJYX4gA,538
|
|
48
|
-
shaderflow-0.
|
|
49
|
-
shaderflow-0.
|
|
50
|
-
shaderflow-0.
|
|
51
|
-
shaderflow-0.
|
|
48
|
+
shaderflow-0.5.0.dev0.dist-info/METADATA,sha256=eP3fXV8iR463U3QQY4ojQ0HVj4OkujdlXQDp2KWitb0,4320
|
|
49
|
+
shaderflow-0.5.0.dev0.dist-info/WHEEL,sha256=fl6v0VwpzfGBVsGtkAkhILUlJxROXbA3HvRL6Fe3140,105
|
|
50
|
+
shaderflow-0.5.0.dev0.dist-info/entry_points.txt,sha256=Jft0cKd9FhDHp9byhoIlpXjxb_DFSa2W6vVAtl1-Kr4,56
|
|
51
|
+
shaderflow-0.5.0.dev0.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|