Skip to content

Commit 6d5a44b

Browse files
committed
Shaders are now referenced as "programs"
1 parent 7f41b51 commit 6d5a44b

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

72 files changed

+439
-356
lines changed

.vscode/launch.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
"program": "${workspaceFolder}/manage.py",
1313
"args": [
1414
"runeffect",
15-
"examples.warpspeed",
15+
"examples.minecraft",
1616
],
1717
},
1818
{

demosys/conf/__init__.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
class Settings:
1616
SETTINGS_MODULE = None
1717

18-
SHADER_DIRS = []
18+
PROGRAM_DIRS = []
1919
TEXTURE_DIRS = []
2020
DATA_DIRS = []
2121
SCENE_DIRS = []
@@ -61,11 +61,11 @@ def __repr__(self):
6161
settings_module=self.SETTINGS_MODULE,
6262
)
6363

64-
def add_shader_dir(self, directory):
65-
"""Hack in shader directory"""
66-
dirs = list(self.SHADER_DIRS)
64+
def add_program_dir(self, directory):
65+
"""Hack in program directory"""
66+
dirs = list(self.PROGRAM_DIRS)
6767
dirs.append(directory)
68-
self.SHADER_DIRS = dirs
68+
self.PROGRAM_DIRS = dirs
6969

7070
def add_texture_dir(self, directory):
7171
"""Hack in texture directory"""

demosys/conf/default.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@
4343
# Otherwise just print the errors to terminal
4444
SHADER_STRICT_VALIDATION = False
4545

46-
SHADER_DIRS = (
46+
PROGRAM_DIRS = (
4747

4848
)
4949

50-
SHADER_FINDERS = (
51-
"demosys.finders.shaders.FileSystemFinder",
52-
"demosys.finders.shaders.EffectDirectoriesFinder",
50+
PROGRAM_FINDERS = (
51+
"demosys.finders.program.FileSystemFinder",
52+
"demosys.finders.program.EffectDirectoriesFinder",
5353
)
5454

5555
TEXTURE_DIRS = (

demosys/deferred/__init__.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
from demosys.conf import settings
44

5-
settings.add_shader_dir(
6-
os.path.join(os.path.dirname(os.path.abspath(__file__)), 'shaders')
5+
settings.add_program_dir(
6+
os.path.join(os.path.dirname(os.path.abspath(__file__)), 'programs')
77
)
88

99
from .renderer import DeferredRenderer # noqa

demosys/deferred/renderer.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -65,13 +65,13 @@ def __init__(self, width, height, gbuffer=None, lightbuffer=None):
6565

6666
# Unit cube for point lights (cube with radius 1.0)
6767
self.unit_cube = geometry.cube(width=2, height=2, depth=2)
68-
self.point_light_shader = resources.shaders.get("deferred/light_point.glsl", create=True)
68+
self.point_light_shader = resources.programs.get("deferred/light_point.glsl", create=True)
6969

7070
# Debug draw lights
71-
self.debug_shader = resources.shaders.get("deferred/debug.glsl", create=True)
71+
self.debug_shader = resources.programs.get("deferred/debug.glsl", create=True)
7272

7373
# Combine shader
74-
self.combine_shader = resources.shaders.get("deferred/combine.glsl", create=True)
74+
self.combine_shader = resources.programs.get("deferred/combine.glsl", create=True)
7575
self.quad = geometry.quad_fs()
7676

7777
@property

demosys/effect_templates/cube_simple/effect.py

+8-7
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import moderngl
2-
from demosys.effects import effect
32
from demosys import geometry
3+
from demosys.effects import effect
4+
45
# from pyrr import matrix44
56

67

78
class SimpleCubeEffect(effect.Effect):
89
"""Generated default effect"""
910
def __init__(self):
10-
self.shader = self.get_shader("cube_plain.glsl", local=True)
11+
self.program = self.get_program("cube_plain.glsl", local=True)
1112
self.cube = geometry.cube(4.0, 4.0, 4.0)
1213

1314
def draw(self, time, frametime, target):
@@ -24,8 +25,8 @@ def draw(self, time, frametime, target):
2425
m_normal = self.create_normal_matrix(m_mv)
2526

2627
# Draw the cube
27-
self.shader.uniform("m_proj", self.sys_camera.projection.tobytes())
28-
self.shader.uniform("m_mv", m_mv.astype('f4').tobytes())
29-
self.shader.uniform("m_normal", m_normal.astype('f4').tobytes())
30-
self.shader.uniform("time", time)
31-
self.cube.draw(self.shader)
28+
self.program.uniform("m_proj", self.sys_camera.projection.tobytes())
29+
self.program.uniform("m_mv", m_mv.astype('f4').tobytes())
30+
self.program.uniform("m_normal", m_normal.astype('f4').tobytes())
31+
self.program.uniform("time", time)
32+
self.cube.draw(self.program)

demosys/effect_templates/raymarching_simple/effect.py

+17-16
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
import math
22

3+
from pyrr import Vector3
4+
35
import moderngl
46
from demosys import geometry
57
from demosys.effects import effect
6-
from pyrr import Vector3
78

89

910
class SimpleRaymarchEffect(effect.Effect):
1011
"""Generated raymarching effect"""
1112
def __init__(self):
12-
self.shader = self.get_shader("raymarching_simple.glsl", local=True)
13+
self.program = self.get_program("raymarching_simple.glsl", local=True)
1314

1415
# create plane to fit whole screen
1516
self.plane = geometry.plane_xz(size=self.window.size, resolution=(10, 10))
@@ -35,21 +36,21 @@ def draw(self, time, frametime, target):
3536

3637
# Draw the plane
3738

38-
# For vertex shader
39-
self.shader.uniform("m_proj", self.sys_camera.projection.tobytes())
40-
self.shader.uniform("m_mv", m_mv.astype('f4').tobytes())
39+
# For vertex program
40+
self.program.uniform("m_proj", self.sys_camera.projection.tobytes())
41+
self.program.uniform("m_mv", m_mv.astype('f4').tobytes())
4142

42-
# For fragment shader
43-
self.shader.uniform("fov", fov)
44-
self.shader.uniform("alpha", alpha)
45-
self.shader.uniform("modifier", modifier)
43+
# For fragment program
44+
self.program.uniform("fov", fov)
45+
self.program.uniform("alpha", alpha)
46+
self.program.uniform("modifier", modifier)
4647

47-
self.shader.uniform("cPosition", cPosition.astype('f4').tobytes())
48-
self.shader.uniform("cLookAt", cLookAt.astype('f4').tobytes())
49-
self.shader.uniform("lPosition", lPosition.astype('f4').tobytes())
50-
self.shader.uniform("lIntensity", lItensity)
51-
self.shader.uniform("color", color.astype('f4').tobytes())
48+
self.program.uniform("cPosition", cPosition.astype('f4').tobytes())
49+
self.program.uniform("cLookAt", cLookAt.astype('f4').tobytes())
50+
self.program.uniform("lPosition", lPosition.astype('f4').tobytes())
51+
self.program.uniform("lIntensity", lItensity)
52+
self.program.uniform("color", color.astype('f4').tobytes())
5253

53-
self.shader.uniform("resolution", (self.window.width, self.window.height))
54+
self.program.uniform("resolution", (self.window.width, self.window.height))
5455

55-
self.plane.draw(self.shader)
56+
self.plane.draw(self.program)

demosys/effect_templates/sphere_textured/effect.py

+9-8
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1+
from pyrr import matrix44
2+
13
import moderngl
2-
from demosys.effects import effect
34
from demosys import geometry
4-
from pyrr import matrix44
5+
from demosys.effects import effect
56

67

78
class TexturedSphere(effect.Effect):
89
"""Generated default effect"""
910
def __init__(self):
10-
self.shader = self.get_shader("default.glsl", local=True)
11+
self.program = self.get_program("default.glsl", local=True)
1112
self.sphere = geometry.sphere(4.0, sectors=32, rings=16)
1213
self.texture = self.get_texture("wood.jpg", local=True)
1314

@@ -27,9 +28,9 @@ def draw(self, time, frametime, target):
2728
m_normal = self.create_normal_matrix(m_mv)
2829

2930
# Draw the cube
30-
self.shader.uniform("m_proj", self.sys_camera.projection.tobytes())
31-
self.shader.uniform("m_mv", m_mv.astype('f4').tobytes())
32-
self.shader.uniform("m_normal", m_normal.astype('f4').tobytes())
31+
self.program.uniform("m_proj", self.sys_camera.projection.tobytes())
32+
self.program.uniform("m_mv", m_mv.astype('f4').tobytes())
33+
self.program.uniform("m_normal", m_normal.astype('f4').tobytes())
3334
self.texture.use(location=0)
34-
self.shader.uniform("texture0", 0)
35-
self.sphere.draw(self.shader)
35+
self.program.uniform("texture0", 0)
36+
self.sphere.draw(self.program)

demosys/effects/effect.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,7 @@ def draw(self, time, frametime, target):
101101
# Methods for getting resources
102102

103103
@local_path
104-
def get_shader(self, path, local=False) -> ShaderProgram:
104+
def get_program(self, path, local=False) -> ShaderProgram:
105105
"""
106106
Get a shader or schedule the shader for loading.
107107
If the resource is not loaded yet, an empty shader object
@@ -111,7 +111,7 @@ def get_shader(self, path, local=False) -> ShaderProgram:
111111
:param local: Auto-prepend the effect package name to the path
112112
:return: Shader object
113113
"""
114-
return resources.shaders.load(path)
114+
return resources.programs.load(path)
115115

116116
@local_path
117117
def get_texture(self, path, flip=True, local=False, **kwargs) -> moderngl.Texture:

demosys/finders/shaders.py renamed to demosys/finders/program.py

+5-5
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@
33

44

55
class FileSystemFinder(base.BaseFileSystemFinder):
6-
"""Find shaders in ``SHADER_DIRS``"""
7-
settings_attr = 'SHADER_DIRS'
6+
"""Find shaders in ``PROGRAM_DIRS``"""
7+
settings_attr = 'PROGRAM_DIRS'
88

99

1010
class EffectDirectoriesFinder(base.BaseEffectDirectoriesFinder):
11-
"""Finds shaders in the registered effects"""
12-
directory = 'shaders'
11+
"""Finds programs in registered effects"""
12+
directory = 'programs'
1313

1414

1515
def get_finders():
16-
for finder in settings.SHADER_FINDERS:
16+
for finder in settings.PROGRAM_FINDERS:
1717
yield base.get_finder(finder)

demosys/loaders/data/binary.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from demosys.loaders.base import BaseLoader
22

33

4-
class Binary(BaseLoader):
4+
class Loader(BaseLoader):
5+
name = 'binary'
56

67
def load(self):
78
pass

demosys/loaders/data/json.py

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from demosys.loaders.base import BaseLoader
2+
3+
4+
class Loader(BaseLoader):
5+
name = 'json'
6+
7+
def load(self):
8+
pass

demosys/loaders/data/text.py

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
from demosys.loaders.base import BaseLoader
2+
3+
4+
class Loader(BaseLoader):
5+
name = 'text'
6+
7+
def load(self):
8+
pass
File renamed without changes.
File renamed without changes.

demosys/project.py

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
from demosys import context
2+
from demosys import resources
3+
4+
5+
class Project:
6+
"""The Project"""
7+
8+
def __init__(self):
9+
self.effects = {}
10+
self.programs = {}
11+
self.textures = {}
12+
self.scenes = {}
13+
self.data = {}
14+
15+
def create_resources(self, external):
16+
# Just return the external list
17+
return external
18+
19+
def create_effects(self):
20+
pass
21+
22+
def load(self):
23+
resource_list = self.create_resources()
24+
25+
# Throw each resource into their respective pools
26+
for meta in resource_list:
27+
resources.add(meta)
28+
29+
for meta, resource in resources.textures.load_pool():
30+
self.textures[meta.label] = resource
31+
32+
for meta, resource in resources.shaders.load_pool():
33+
self.programs[meta.label] = resource
34+
35+
for meta, resource in resources.scenes.load_pool():
36+
self.scenes[meta.label] = resource
37+
38+
for meta, resource in resources.data.load_pool():
39+
self.data[meta.label] = resource
40+
41+
self.create_effects()
42+
43+
def get_effect(self, label):
44+
return self.effects[label]
45+
46+
def get_scene(self, label):
47+
return self.scenes[label]
48+
49+
def get_program(self, label):
50+
return self.programs[label]
51+
52+
def get_texture(self, label):
53+
return self.textures[label]
54+
55+
def get_data(self, label):
56+
return self.data[label]
57+
58+
@property
59+
def ctx(self):
60+
return context.ctx()

demosys/resources/__init__.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
1-
from .shaders import shaders
2-
from .textures import textures
3-
from .tracks import tracks # noqa
4-
from .scenes import scenes
5-
from .data import data, Data # noqa
1+
from demosys.resources.programs import programs, Program # noqa
2+
from demosys.resources.textures import textures
3+
from demosys.resources.tracks import tracks # noqa
4+
from demosys.resources.scenes import scenes
5+
from demosys.resources.data import data, Data # noqa
66

77

88
def load():
99
scenes.load_pool()
10-
shaders.load_pool()
10+
programs.load_pool()
1111
textures.load_pool()
1212
data.load_pool()
1313

1414

1515
def count():
16-
return scenes.count + shaders.count + textures.count + data.count
16+
return scenes.count + programs.count + textures.count + data.count

0 commit comments

Comments
 (0)