|
|
@@ -0,0 +1,83 @@
|
|
|
+from panda3d.core import Shader, VirtualFileSystem, Filename
|
|
|
+import time
|
|
|
+import pytest
|
|
|
+
|
|
|
+
|
|
|
[email protected](scope="session")
|
|
|
+def vfs():
|
|
|
+ return VirtualFileSystem.get_global_ptr()
|
|
|
+
|
|
|
+
|
|
|
[email protected]
|
|
|
+def ramdir():
|
|
|
+ """Fixture yielding a fresh ramdisk directory."""
|
|
|
+ from panda3d.core import VirtualFileMountRamdisk, Filename
|
|
|
+
|
|
|
+ vfs = VirtualFileSystem.get_global_ptr()
|
|
|
+ mount = VirtualFileMountRamdisk()
|
|
|
+ dir = Filename.temporary("/virtual", "ram.")
|
|
|
+ assert vfs.mount(mount, dir, 0)
|
|
|
+
|
|
|
+ yield dir
|
|
|
+ vfs.unmount(mount)
|
|
|
+
|
|
|
+
|
|
|
+def test_shader_load_multi(vfs, ramdir):
|
|
|
+ # Try non-existent first.
|
|
|
+ shad0 = Shader.load(Shader.SL_GLSL,
|
|
|
+ vertex="/nonexistent.glsl",
|
|
|
+ fragment="/nonexistent.glsl")
|
|
|
+ assert shad0 is None
|
|
|
+
|
|
|
+ vert_file = Filename(ramdir, "shader.glsl")
|
|
|
+ frag_file = Filename(ramdir, "shader.glsl")
|
|
|
+
|
|
|
+ # Now write some actual content to the shader files.
|
|
|
+ vfs.write_file(vert_file, b"#version 100\nvoid main() {}\n", False)
|
|
|
+
|
|
|
+ shad1 = Shader.load(Shader.SL_GLSL, vertex=vert_file, fragment=frag_file)
|
|
|
+ assert shad1 is not None
|
|
|
+ assert shad1.this
|
|
|
+
|
|
|
+ # Load the same shader, it should return the cached result.
|
|
|
+ shad2 = Shader.load(Shader.SL_GLSL, vertex=vert_file, fragment=frag_file)
|
|
|
+ assert shad2 is not None
|
|
|
+ assert shad1.this == shad2.this
|
|
|
+
|
|
|
+ # After waiting a second to make the timestamp different, modify the
|
|
|
+ # shader and load again, it should result in a different object now
|
|
|
+ time.sleep(1.0)
|
|
|
+ vfs.write_file(vert_file, b"#version 110\nvoid main() {}\n", False)
|
|
|
+
|
|
|
+ shad2 = Shader.load(Shader.SL_GLSL, vertex=vert_file, fragment=frag_file)
|
|
|
+
|
|
|
+ assert shad2.this != shad1.this
|
|
|
+
|
|
|
+
|
|
|
+def test_shader_load_compute(vfs, ramdir):
|
|
|
+ # Try non-existent first.
|
|
|
+ shad0 = Shader.load_compute(Shader.SL_GLSL, "/nonexistent.glsl")
|
|
|
+ assert shad0 is None
|
|
|
+
|
|
|
+ comp_file = Filename(ramdir, "shader.glsl")
|
|
|
+
|
|
|
+ # Now write some actual content to the shader file.
|
|
|
+ vfs.write_file(comp_file, b"#version 100\nvoid main() {}\n", False)
|
|
|
+
|
|
|
+ shad1 = Shader.load_compute(Shader.SL_GLSL, comp_file)
|
|
|
+ assert shad1 is not None
|
|
|
+ assert shad1.this
|
|
|
+
|
|
|
+ # Load the same shader, it should return the cached result.
|
|
|
+ shad2 = Shader.load_compute(Shader.SL_GLSL, comp_file)
|
|
|
+ assert shad2 is not None
|
|
|
+ assert shad1.this == shad2.this
|
|
|
+
|
|
|
+ # After waiting a second to make the timestamp different, modify the
|
|
|
+ # shader and load again, it should result in a different object now
|
|
|
+ time.sleep(1.0)
|
|
|
+ vfs.write_file(comp_file, b"#version 110\nvoid main() {}\n", False)
|
|
|
+
|
|
|
+ shad2 = Shader.load_compute(Shader.SL_GLSL, comp_file)
|
|
|
+
|
|
|
+ assert shad2.this != shad1.this
|