basilisk-engine 0.1.42__tar.gz → 0.1.44__tar.gz
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.
- {basilisk_engine-0.1.42/basilisk_engine.egg-info → basilisk_engine-0.1.44}/PKG-INFO +1 -1
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/engine.py +3 -5
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/bloom.py +25 -31
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/chunk.py +6 -1
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/frame.py +4 -2
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/framebuffer.py +1 -21
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/image_handler.py +3 -3
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/material_handler.py +2 -2
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/shader.py +3 -2
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/shader_handler.py +16 -1
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/sky.py +2 -4
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/scene.py +1 -2
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/batch.frag +2 -7
- basilisk_engine-0.1.44/basilisk/shaders/bloom_downsample.frag +24 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44/basilisk_engine.egg-info}/PKG-INFO +1 -1
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk_engine.egg-info/SOURCES.txt +1 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/setup.py +1 -1
- basilisk_engine-0.1.44/tests/battery.obj +698 -0
- basilisk_engine-0.1.42/basilisk/shaders/bloom_downsample.frag +0 -43
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/MANIFEST.in +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/README.md +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/audio/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/audio/sound.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/bsk_assets/Roboto-Regular.ttf +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/bsk_assets/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/bsk_assets/basilisk.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/bsk_assets/cube.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/bsk_assets/skybox.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/broad/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/broad/broad_aabb.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/broad/broad_bvh.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/collider.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/collider_handler.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/contact_manifold.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/dataclasses.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/deprecated.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/epa.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/gjk.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/graham_scan.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/helper.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/line_intersections.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/sutherland_hodgman.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/config.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/draw/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/draw/draw.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/draw/draw_handler.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/draw/font_renderer.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/abstract_bvh.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/abstract_custom.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/collisions.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/input_validation.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/math.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/matrices.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/meshes.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/quat.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/quat_methods.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/raycast_result.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/vec3.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/input_output/IO_handler.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/input_output/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/input_output/clock.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/input_output/keys.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/input_output/mouse.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/input_output/path.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/cube.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/mesh.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/mesh_from_data.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/model.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/narrow_aabb.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/narrow_bvh.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/narrow_primative.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/nodes/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/nodes/helper.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/nodes/node.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/nodes/node_handler.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/particles/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/particles/particle_handler.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/particles/particle_renderer.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/physics/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/physics/impulse.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/physics/physics_body.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/physics/physics_engine.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/batch.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/camera.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/chunk_handler.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/image.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/light.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/light_handler.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/material.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/post_process.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/tempCodeRunnerFile.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/__init__.py +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/batch.vert +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/bloom_upsample.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/crt.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/draw.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/draw.vert +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/filter.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/frame.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/frame.vert +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/frame_hdr.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/geometry.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/geometry.vert +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/normal.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/normal.vert +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/particle.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/particle.vert +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/sky.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/sky.vert +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk_engine.egg-info/dependency_links.txt +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk_engine.egg-info/requires.txt +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk_engine.egg-info/top_level.txt +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/docs/images/0_boilerplate.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/images/cloth.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/images/floor.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/images/foil.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/images/mud.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/setup.cfg +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/SkySkybox.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/box_three.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/box_three_lid.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/brick.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/brick_normal.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/bunny.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/closet_001.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/cloth_albedo.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/cloth_normal.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/cube.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/cubemaps_skybox.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/cylinder.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/demo_sphere.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/dirt.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/drawer.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/dresser.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/floor_albedo.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/floor_normal.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/foil_normal.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/fridge_001.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/grass.jpg +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/grass_ao.jpg +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/grass_block_side.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/grass_block_top.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/grass_normal.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/grass_roughness.jpg +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/image.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/john.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/key.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/lucy.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/monkey.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/mud.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/mud_normal.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/oak_tree.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/picture_frame.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/custom_format.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/custom_format.vert +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/depth.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/edge.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/image_test.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/image_test.vert +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/multi_render_test.frag +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/multi_render_test.vert +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/skybox.png +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/sock.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/sphere.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/wedge.obj +0 -0
- {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/wheel_eight.obj +0 -0
|
@@ -142,14 +142,12 @@ class Engine():
|
|
|
142
142
|
self._update()
|
|
143
143
|
if not self.running: return
|
|
144
144
|
|
|
145
|
-
# Render all draw calls from the past frame
|
|
146
|
-
self.ctx.screen.use()
|
|
147
|
-
self.draw_handler.render()
|
|
148
145
|
|
|
149
146
|
# Clear the screen and render the frame
|
|
150
147
|
if render:
|
|
151
|
-
|
|
152
|
-
|
|
148
|
+
# Render all draw calls from the past frame
|
|
149
|
+
self.ctx.screen.use()
|
|
150
|
+
self.draw_handler.render()
|
|
153
151
|
self.frame.render()
|
|
154
152
|
|
|
155
153
|
# Even though we may not render here, the user might be rendering in their file, so we need to flip
|
|
@@ -14,12 +14,11 @@ class Bloom:
|
|
|
14
14
|
self.downsample_shader = Shader(self.engine, self.engine.root + '/shaders/frame.vert', self.engine.root + '/shaders/bloom_downsample.frag')
|
|
15
15
|
self.upsample_shader = Shader(self.engine, self.engine.root + '/shaders/frame.vert', self.engine.root + '/shaders/bloom_upsample.frag')
|
|
16
16
|
|
|
17
|
-
self.engine.shader_handler.add(self.downsample_shader)
|
|
18
|
-
self.engine.shader_handler.add(self.upsample_shader)
|
|
19
|
-
|
|
20
17
|
self.downsample_vao = self.ctx.vertex_array(self.downsample_shader.program, [(self.frame.vbo, '3f 2f', 'in_position', 'in_uv')], skip_errors=True)
|
|
21
18
|
self.upsample_vao = self.ctx.vertex_array(self.upsample_shader.program, [(self.frame.vbo, '3f 2f', 'in_position', 'in_uv')], skip_errors=True)
|
|
22
19
|
|
|
20
|
+
self.upsample_buffers = []
|
|
21
|
+
self.downsample_buffers = []
|
|
23
22
|
self.generate_bloom_buffers()
|
|
24
23
|
|
|
25
24
|
def render(self) -> None:
|
|
@@ -35,13 +34,20 @@ class Bloom:
|
|
|
35
34
|
self.ctx.enable(mgl.BLEND)
|
|
36
35
|
self.ctx.blend_func = mgl.ADDITIVE_BLENDING
|
|
37
36
|
|
|
38
|
-
|
|
37
|
+
# Render the screen's bloom texture to a local buffer
|
|
38
|
+
bloom_texture = self.frame.input_buffer.color_attachments[1]
|
|
39
|
+
self.downsample_shader.bind(bloom_texture, 'screenTexture', 0)
|
|
40
|
+
self.downsample_shader.write(glm.ivec2(bloom_texture.size), 'textureSize')
|
|
41
|
+
self.downsample_buffers[0].clear()
|
|
42
|
+
self.downsample_buffers[0].use()
|
|
43
|
+
self.downsample_vao.render()
|
|
44
|
+
|
|
39
45
|
for i in range(0, n):
|
|
40
|
-
self.downsample(
|
|
46
|
+
self.downsample(self.downsample_buffers[i], self.downsample_buffers[i + 1])
|
|
41
47
|
|
|
42
|
-
self.upsample(
|
|
48
|
+
self.upsample(self.downsample_buffers[n - 1], self.downsample_buffers[n], self.upsample_buffers[n])
|
|
43
49
|
for i in range(n - 1, -1, -1):
|
|
44
|
-
self.upsample(
|
|
50
|
+
self.upsample(self.upsample_buffers[i + 1], self.downsample_buffers[i], self.upsample_buffers[i])
|
|
45
51
|
|
|
46
52
|
self.ctx.disable(mgl.BLEND)
|
|
47
53
|
|
|
@@ -56,7 +62,7 @@ class Bloom:
|
|
|
56
62
|
else: texture = source
|
|
57
63
|
|
|
58
64
|
self.downsample_shader.bind(texture, 'screenTexture', 0)
|
|
59
|
-
self.downsample_shader.write(
|
|
65
|
+
self.downsample_shader.write(glm.ivec2(source.size), 'textureSize')
|
|
60
66
|
|
|
61
67
|
# Clear and use the destination fbo
|
|
62
68
|
dest.use()
|
|
@@ -73,7 +79,7 @@ class Bloom:
|
|
|
73
79
|
# Bind the source texture to the shader
|
|
74
80
|
self.upsample_shader.bind(high.texture, 'highTexture', 0)
|
|
75
81
|
self.upsample_shader.bind(low.texture, 'lowTexture', 1)
|
|
76
|
-
self.upsample_shader.write(
|
|
82
|
+
self.upsample_shader.write(glm.ivec2(low.size), 'textureSize')
|
|
77
83
|
|
|
78
84
|
# Clear and use the destination fbo
|
|
79
85
|
dest.use()
|
|
@@ -92,33 +98,21 @@ class Bloom:
|
|
|
92
98
|
n = self.engine.config.bloom_quality
|
|
93
99
|
size = self.frame.input_buffer.size
|
|
94
100
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
getattr(self, f'bloom_buffer_{i}').__del__()
|
|
98
|
-
getattr(self, f'upscale_buffer_{i}').__del__()
|
|
99
|
-
except:
|
|
100
|
-
break
|
|
101
|
+
self.downsample_buffers = []
|
|
102
|
+
self.upsample_buffers = []
|
|
101
103
|
|
|
102
104
|
for i in range(n + 1):
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
fbo.texture.repeat_y = False
|
|
106
|
-
setattr(self, f'bloom_buffer_{i}', fbo)
|
|
105
|
+
downsample_fbo = Framebuffer(self.engine, size=(max(size[0] // (2 ** (i)), 1), max(size[1] // (2 ** (i)), 1)))
|
|
106
|
+
upsample_fbo = Framebuffer(self.engine, size=(max(size[0] // (2 ** (i)), 1), max(size[1] // (2 ** (i)), 1)))
|
|
107
107
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
fbo.texture.repeat_y = False
|
|
111
|
-
setattr(self, f'upscale_buffer_{i}', fbo)
|
|
108
|
+
self.downsample_buffers.append(downsample_fbo)
|
|
109
|
+
self.upsample_buffers.append(upsample_fbo)
|
|
112
110
|
|
|
113
111
|
def clear(self):
|
|
114
|
-
for
|
|
115
|
-
|
|
116
|
-
getattr(self, f'bloom_buffer_{i}').clear()
|
|
117
|
-
getattr(self, f'upscale_buffer_{i}').clear()
|
|
118
|
-
except:
|
|
119
|
-
break
|
|
112
|
+
for buffer in self.upsample_buffers + self.downsample_buffers:
|
|
113
|
+
buffer.clear()
|
|
120
114
|
|
|
121
115
|
@property
|
|
122
|
-
def
|
|
116
|
+
def fbo(self): return self.upsample_buffers[0]
|
|
123
117
|
@property
|
|
124
|
-
def
|
|
118
|
+
def texture(self): return self.fbo.texture
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import sys
|
|
1
2
|
from .batch import Batch
|
|
2
3
|
|
|
3
4
|
|
|
@@ -55,7 +56,11 @@ class Chunk():
|
|
|
55
56
|
if not self.batch.vbo: return
|
|
56
57
|
|
|
57
58
|
data = node.get_data()
|
|
58
|
-
|
|
59
|
+
|
|
60
|
+
if ((node.data_index * data.shape[1] + (data.shape[0] * data.shape[1])) * 4) > self.batch.vbo.size:
|
|
61
|
+
self.batch.batch()
|
|
62
|
+
else:
|
|
63
|
+
self.batch.vbo.write(data, node.data_index * data.shape[1] * 4)
|
|
59
64
|
|
|
60
65
|
def add(self, node):
|
|
61
66
|
"""
|
|
@@ -55,10 +55,12 @@ class Frame:
|
|
|
55
55
|
# self.ping_pong_buffer = temp
|
|
56
56
|
|
|
57
57
|
|
|
58
|
-
self.
|
|
58
|
+
if self.engine.config.bloom_enabled:
|
|
59
|
+
self.bloom.render()
|
|
60
|
+
self.shader.bind(self.bloom.texture, 'bloomTexture', 1)
|
|
61
|
+
|
|
59
62
|
target.use() if target else self.output_buffer.use()
|
|
60
63
|
self.shader.bind(self.input_buffer.texture, 'screenTexture', 0)
|
|
61
|
-
self.shader.bind(self.bloom.texture, 'bloomTexture', 1)
|
|
62
64
|
self.vao.render()
|
|
63
65
|
|
|
64
66
|
def render(self, target=None) -> None:
|
|
@@ -124,7 +124,7 @@ class Framebuffer:
|
|
|
124
124
|
Clear all data currently in the textures (set to black)
|
|
125
125
|
"""
|
|
126
126
|
|
|
127
|
-
self.fbo.clear()
|
|
127
|
+
self.fbo.clear(color=color)
|
|
128
128
|
|
|
129
129
|
def bind(self, sampler: mgl.Texture | mgl.TextureArray | mgl.TextureCube , name: str, slot: int=None):
|
|
130
130
|
"""
|
|
@@ -167,31 +167,11 @@ class Framebuffer:
|
|
|
167
167
|
def data(self) -> bytes:
|
|
168
168
|
"""Reads the data from the fbo"""
|
|
169
169
|
return self.fbo.read()
|
|
170
|
-
@property
|
|
171
|
-
def show(self) -> int:
|
|
172
|
-
return self._show
|
|
173
170
|
|
|
174
171
|
@size.setter
|
|
175
172
|
def size(self, value: tuple[int]=None) -> tuple[int]:
|
|
176
173
|
self.resize(value)
|
|
177
174
|
return self.size
|
|
178
|
-
|
|
179
|
-
@show.setter
|
|
180
|
-
def show(self, value: int) -> None:
|
|
181
|
-
value = validate_int("Framebuffer", "show", value)
|
|
182
|
-
if value == self._show: return
|
|
183
|
-
|
|
184
|
-
# Verify the range
|
|
185
|
-
if value < 0 or value > len(self.color_attachments): raise ValueError(f'Framebuffer.show: invalid color attachement to show, {value} is out of range')
|
|
186
|
-
elif value == len(self.color_attachments): src = self.depth
|
|
187
|
-
else: src = self.color_attachments[value]
|
|
188
|
-
|
|
189
|
-
# Update value
|
|
190
|
-
self._show = value
|
|
191
|
-
|
|
192
|
-
# Bind the correct texture
|
|
193
|
-
# self.shader.program['screenTexture'] = value+1
|
|
194
|
-
src.use(location=value+1)
|
|
195
175
|
|
|
196
176
|
def __repr__(self) -> str:
|
|
197
177
|
return f'<bsk.Framebuffer | size: {self.size}>'
|
|
@@ -76,7 +76,8 @@ class ImageHandler():
|
|
|
76
76
|
|
|
77
77
|
def write(self, regenerate=False) -> None:
|
|
78
78
|
"""
|
|
79
|
-
Writes all texture arrays to shaders that use images
|
|
79
|
+
Writes all texture arrays to shaders that use images
|
|
80
|
+
Uses bind slots [10, 11, 12, 13, 14]
|
|
80
81
|
"""
|
|
81
82
|
|
|
82
83
|
if not self.engine.shader_handler: return
|
|
@@ -91,8 +92,7 @@ class ImageHandler():
|
|
|
91
92
|
for i, size in enumerate(texture_sizes):
|
|
92
93
|
if not size in self.texture_arrays: continue
|
|
93
94
|
if not self.texture_arrays[size]: continue
|
|
94
|
-
shader.
|
|
95
|
-
self.texture_arrays[size].use(location=i+3)
|
|
95
|
+
shader.bind(self.texture_arrays[size], f'textureArrays[{i}].array', i + 10)
|
|
96
96
|
|
|
97
97
|
def get(self, identifier: str | int) -> any:
|
|
98
98
|
"""
|
|
@@ -85,6 +85,7 @@ class MaterialHandler():
|
|
|
85
85
|
def write(self, regenerate=False) -> None:
|
|
86
86
|
"""
|
|
87
87
|
Writes all material data to relavent shaders
|
|
88
|
+
Uses bind slot 15
|
|
88
89
|
"""
|
|
89
90
|
|
|
90
91
|
if regenerate: self.generate_material_texture()
|
|
@@ -94,8 +95,7 @@ class MaterialHandler():
|
|
|
94
95
|
for shader in self.engine.shader_handler.shaders:
|
|
95
96
|
if 'materialsTexture' not in shader.uniforms: continue
|
|
96
97
|
|
|
97
|
-
shader.
|
|
98
|
-
self.data_texture.use(location=9)
|
|
98
|
+
shader.bind(self.data_texture, 'materialsTexture', 9)
|
|
99
99
|
|
|
100
100
|
def get(self, identifier: str | int) -> any:
|
|
101
101
|
"""
|
|
@@ -13,7 +13,6 @@ attribute_mappings = {
|
|
|
13
13
|
'obj_material' : [24],
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
17
16
|
class Shader:
|
|
18
17
|
program: mgl.Program=None
|
|
19
18
|
"""Shader program for the vertex and fragment shader"""
|
|
@@ -106,7 +105,7 @@ class Shader:
|
|
|
106
105
|
self.engine.shader_handler.add(self)
|
|
107
106
|
if scene.node_handler: scene.node_handler.chunk_handler.swap_default(self)
|
|
108
107
|
|
|
109
|
-
def write(self, name: str
|
|
108
|
+
def write(self, value, name: str) -> None:
|
|
110
109
|
"""
|
|
111
110
|
Writes a uniform to the shader program
|
|
112
111
|
"""
|
|
@@ -118,6 +117,8 @@ class Shader:
|
|
|
118
117
|
Binds the given sampler to the next availible slot
|
|
119
118
|
"""
|
|
120
119
|
|
|
120
|
+
# print(f'Binding {name} to slot {slot}')
|
|
121
|
+
|
|
121
122
|
# Use the next slot if no slot is given
|
|
122
123
|
if slot == None: slot = self.bindings; self.bindings+=1
|
|
123
124
|
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
"""
|
|
2
|
+
|
|
3
|
+
---------------------------------------
|
|
4
|
+
Standard Reserved Bind Slots Mappings:
|
|
5
|
+
8 : Bloom
|
|
6
|
+
9 : Sky
|
|
7
|
+
10: Images[0]
|
|
8
|
+
11: Images[1]
|
|
9
|
+
12: Images[2]
|
|
10
|
+
13: Images[3]
|
|
11
|
+
14: Images[4]
|
|
12
|
+
15: Material Texture
|
|
13
|
+
|
|
14
|
+
"""
|
|
15
|
+
|
|
1
16
|
import moderngl as mgl
|
|
2
17
|
import glm
|
|
3
18
|
from .shader import Shader
|
|
@@ -85,7 +100,7 @@ class ShaderHandler:
|
|
|
85
100
|
for uniform in self.uniform_values:
|
|
86
101
|
for shader in self.shaders:
|
|
87
102
|
if not uniform in shader.uniforms: continue # Does not write uniforms not in the shader
|
|
88
|
-
shader.write(
|
|
103
|
+
shader.write(self.uniform_values[uniform], uniform)
|
|
89
104
|
|
|
90
105
|
def release(self) -> None:
|
|
91
106
|
"""
|
|
@@ -28,13 +28,11 @@ class Sky:
|
|
|
28
28
|
|
|
29
29
|
def write(self):
|
|
30
30
|
# Write the texture cube to the sky shader
|
|
31
|
-
self.shader.
|
|
32
|
-
self.texture_cube.use(location = 8)
|
|
31
|
+
self.shader.bind(self.texture_cube, 'skyboxTexture', 8)
|
|
33
32
|
|
|
34
33
|
shader = self.engine.shader
|
|
35
34
|
if 'skyboxTexture' not in shader.uniforms: return
|
|
36
|
-
shader.
|
|
37
|
-
self.texture_cube.use(location = 8)
|
|
35
|
+
shader.bind(self.texture_cube, 'skyboxTexture', 8)
|
|
38
36
|
|
|
39
37
|
|
|
40
38
|
def set_texture(self, skybox_images: list):
|
|
@@ -273,22 +273,17 @@ void main() {
|
|
|
273
273
|
vec3 finalColor = albedo * 0.3 * mix(vec3(1.0), reflect_sky, mtl.metallicness);
|
|
274
274
|
finalColor += (lightResult.diffuse + lightResult.specular + lightResult.clearcoat);
|
|
275
275
|
|
|
276
|
-
// light_result *= mix(vec3(1.0), texture(skyboxTexture, reflect(-V, N)).rgb, mtl.metallicness);
|
|
277
|
-
// Gamma correction
|
|
278
|
-
// finalColor = pow(finalColor, vec3(1.0/gamma));
|
|
279
|
-
|
|
280
276
|
// Output fragment color
|
|
281
|
-
float brightness = dot(
|
|
277
|
+
float brightness = dot(finalColor, vec3(0.2126, 0.7152, 0.0722)) + dot(lightResult.specular, vec3(.2)) + dot(mtl.emissiveColor, vec3(1));
|
|
282
278
|
fragColor = vec4(finalColor + mtl.emissiveColor, 1.0);
|
|
283
279
|
|
|
284
280
|
normalTexture = vec4(abs(N), 1.0);
|
|
285
281
|
|
|
286
|
-
//
|
|
282
|
+
// Filter out bright pixels for bloom
|
|
287
283
|
if (brightness > 0.5) {
|
|
288
284
|
bloomColor = vec4(fragColor.rgb, 1.0);
|
|
289
285
|
}
|
|
290
286
|
else{
|
|
291
287
|
bloomColor = vec4(0.0, 0.0, 0.0, 1.0);
|
|
292
288
|
}
|
|
293
|
-
|
|
294
289
|
}
|
|
@@ -0,0 +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
|
|
24
|
+
}
|
|
@@ -7,7 +7,7 @@ with open(path.join(working_directory, 'README.md'), encoding='utf-8') as f:
|
|
|
7
7
|
|
|
8
8
|
setup(
|
|
9
9
|
name = 'basilisk-engine', # Name of folder containing scripts and __init__
|
|
10
|
-
version = '0.1.
|
|
10
|
+
version = '0.1.44',
|
|
11
11
|
url = 'https://basilisk-website.vercel.app/',
|
|
12
12
|
author = 'Name',
|
|
13
13
|
author_email = 'basiliskengine@gmail.com',
|