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.

Files changed (172) hide show
  1. {basilisk_engine-0.1.42/basilisk_engine.egg-info → basilisk_engine-0.1.44}/PKG-INFO +1 -1
  2. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/engine.py +3 -5
  3. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/bloom.py +25 -31
  4. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/chunk.py +6 -1
  5. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/frame.py +4 -2
  6. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/framebuffer.py +1 -21
  7. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/image_handler.py +3 -3
  8. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/material_handler.py +2 -2
  9. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/shader.py +3 -2
  10. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/shader_handler.py +16 -1
  11. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/sky.py +2 -4
  12. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/scene.py +1 -2
  13. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/batch.frag +2 -7
  14. basilisk_engine-0.1.44/basilisk/shaders/bloom_downsample.frag +24 -0
  15. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44/basilisk_engine.egg-info}/PKG-INFO +1 -1
  16. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk_engine.egg-info/SOURCES.txt +1 -0
  17. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/setup.py +1 -1
  18. basilisk_engine-0.1.44/tests/battery.obj +698 -0
  19. basilisk_engine-0.1.42/basilisk/shaders/bloom_downsample.frag +0 -43
  20. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/MANIFEST.in +0 -0
  21. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/README.md +0 -0
  22. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/__init__.py +0 -0
  23. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/audio/__init__.py +0 -0
  24. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/audio/sound.py +0 -0
  25. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/bsk_assets/Roboto-Regular.ttf +0 -0
  26. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/bsk_assets/__init__.py +0 -0
  27. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/bsk_assets/basilisk.png +0 -0
  28. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/bsk_assets/cube.obj +0 -0
  29. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/bsk_assets/skybox.png +0 -0
  30. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/__init__.py +0 -0
  31. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/broad/__init__.py +0 -0
  32. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/broad/broad_aabb.py +0 -0
  33. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/broad/broad_bvh.py +0 -0
  34. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/collider.py +0 -0
  35. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/collider_handler.py +0 -0
  36. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/__init__.py +0 -0
  37. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/contact_manifold.py +0 -0
  38. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/dataclasses.py +0 -0
  39. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/deprecated.py +0 -0
  40. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/epa.py +0 -0
  41. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/gjk.py +0 -0
  42. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/graham_scan.py +0 -0
  43. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/helper.py +0 -0
  44. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/line_intersections.py +0 -0
  45. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/collisions/narrow/sutherland_hodgman.py +0 -0
  46. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/config.py +0 -0
  47. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/draw/__init__.py +0 -0
  48. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/draw/draw.py +0 -0
  49. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/draw/draw_handler.py +0 -0
  50. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/draw/font_renderer.py +0 -0
  51. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/__init__.py +0 -0
  52. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/abstract_bvh.py +0 -0
  53. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/abstract_custom.py +0 -0
  54. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/collisions.py +0 -0
  55. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/input_validation.py +0 -0
  56. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/math.py +0 -0
  57. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/matrices.py +0 -0
  58. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/meshes.py +0 -0
  59. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/quat.py +0 -0
  60. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/quat_methods.py +0 -0
  61. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/raycast_result.py +0 -0
  62. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/generic/vec3.py +0 -0
  63. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/input_output/IO_handler.py +0 -0
  64. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/input_output/__init__.py +0 -0
  65. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/input_output/clock.py +0 -0
  66. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/input_output/keys.py +0 -0
  67. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/input_output/mouse.py +0 -0
  68. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/input_output/path.py +0 -0
  69. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/__init__.py +0 -0
  70. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/cube.py +0 -0
  71. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/mesh.py +0 -0
  72. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/mesh_from_data.py +0 -0
  73. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/model.py +0 -0
  74. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/narrow_aabb.py +0 -0
  75. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/narrow_bvh.py +0 -0
  76. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/mesh/narrow_primative.py +0 -0
  77. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/nodes/__init__.py +0 -0
  78. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/nodes/helper.py +0 -0
  79. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/nodes/node.py +0 -0
  80. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/nodes/node_handler.py +0 -0
  81. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/particles/__init__.py +0 -0
  82. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/particles/particle_handler.py +0 -0
  83. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/particles/particle_renderer.py +0 -0
  84. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/physics/__init__.py +0 -0
  85. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/physics/impulse.py +0 -0
  86. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/physics/physics_body.py +0 -0
  87. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/physics/physics_engine.py +0 -0
  88. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/__init__.py +0 -0
  89. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/batch.py +0 -0
  90. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/camera.py +0 -0
  91. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/chunk_handler.py +0 -0
  92. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/image.py +0 -0
  93. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/light.py +0 -0
  94. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/light_handler.py +0 -0
  95. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/material.py +0 -0
  96. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/post_process.py +0 -0
  97. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/render/tempCodeRunnerFile.py +0 -0
  98. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/__init__.py +0 -0
  99. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/batch.vert +0 -0
  100. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/bloom_upsample.frag +0 -0
  101. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/crt.frag +0 -0
  102. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/draw.frag +0 -0
  103. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/draw.vert +0 -0
  104. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/filter.frag +0 -0
  105. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/frame.frag +0 -0
  106. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/frame.vert +0 -0
  107. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/frame_hdr.frag +0 -0
  108. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/geometry.frag +0 -0
  109. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/geometry.vert +0 -0
  110. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/normal.frag +0 -0
  111. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/normal.vert +0 -0
  112. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/particle.frag +0 -0
  113. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/particle.vert +0 -0
  114. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/sky.frag +0 -0
  115. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk/shaders/sky.vert +0 -0
  116. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk_engine.egg-info/dependency_links.txt +0 -0
  117. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk_engine.egg-info/requires.txt +0 -0
  118. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/basilisk_engine.egg-info/top_level.txt +0 -0
  119. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/docs/images/0_boilerplate.png +0 -0
  120. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/images/cloth.png +0 -0
  121. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/images/floor.png +0 -0
  122. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/images/foil.png +0 -0
  123. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/images/mud.png +0 -0
  124. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/setup.cfg +0 -0
  125. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/SkySkybox.png +0 -0
  126. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/box_three.obj +0 -0
  127. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/box_three_lid.obj +0 -0
  128. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/brick.png +0 -0
  129. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/brick_normal.png +0 -0
  130. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/bunny.obj +0 -0
  131. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/closet_001.obj +0 -0
  132. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/cloth_albedo.png +0 -0
  133. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/cloth_normal.png +0 -0
  134. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/cube.obj +0 -0
  135. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/cubemaps_skybox.png +0 -0
  136. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/cylinder.obj +0 -0
  137. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/demo_sphere.obj +0 -0
  138. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/dirt.png +0 -0
  139. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/drawer.obj +0 -0
  140. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/dresser.obj +0 -0
  141. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/floor_albedo.png +0 -0
  142. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/floor_normal.png +0 -0
  143. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/foil_normal.png +0 -0
  144. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/fridge_001.obj +0 -0
  145. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/grass.jpg +0 -0
  146. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/grass_ao.jpg +0 -0
  147. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/grass_block_side.png +0 -0
  148. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/grass_block_top.png +0 -0
  149. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/grass_normal.png +0 -0
  150. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/grass_roughness.jpg +0 -0
  151. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/image.png +0 -0
  152. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/john.obj +0 -0
  153. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/key.obj +0 -0
  154. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/lucy.obj +0 -0
  155. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/monkey.obj +0 -0
  156. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/mud.png +0 -0
  157. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/mud_normal.png +0 -0
  158. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/oak_tree.obj +0 -0
  159. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/picture_frame.obj +0 -0
  160. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/custom_format.frag +0 -0
  161. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/custom_format.vert +0 -0
  162. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/depth.frag +0 -0
  163. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/edge.frag +0 -0
  164. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/image_test.frag +0 -0
  165. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/image_test.vert +0 -0
  166. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/multi_render_test.frag +0 -0
  167. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/shaders/multi_render_test.vert +0 -0
  168. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/skybox.png +0 -0
  169. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/sock.obj +0 -0
  170. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/sphere.obj +0 -0
  171. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/wedge.obj +0 -0
  172. {basilisk_engine-0.1.42 → basilisk_engine-0.1.44}/tests/wheel_eight.obj +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: basilisk-engine
3
- Version: 0.1.42
3
+ Version: 0.1.44
4
4
  Summary: Python 3D Framework
5
5
  Home-page: https://basilisk-website.vercel.app/
6
6
  Author: Name
@@ -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
- for frame in self.frames:
152
- frame.render(self.frame.output_buffer)
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
- self.downsample(self.frame.input_buffer.color_attachments[1], getattr(self, f'bloom_buffer_{0}'))
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(getattr(self, f'bloom_buffer_{i}'), getattr(self, f'bloom_buffer_{i + 1}'))
46
+ self.downsample(self.downsample_buffers[i], self.downsample_buffers[i + 1])
41
47
 
42
- self.upsample(getattr(self, f'bloom_buffer_{n - 1}'), getattr(self, f'bloom_buffer_{n}'), getattr(self, f'upscale_buffer_{n}'))
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(getattr(self, f'upscale_buffer_{i + 1}'), getattr(self, f'bloom_buffer_{i}'), getattr(self, f'upscale_buffer_{i}'))
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('textureSize', glm.ivec2(source.size))
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('textureSize', glm.ivec2(low.size))
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
- for i in range(100):
96
- try:
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
- fbo = Framebuffer(self.engine, size=(max(size[0] // (2 ** (i)), 1), max(size[1] // (2 ** (i)), 1)))
104
- fbo.texture.repeat_x = False
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
- fbo = Framebuffer(self.engine, size=(max(size[0] // (2 ** (i)), 1), max(size[1] // (2 ** (i)), 1)))
109
- fbo.texture.repeat_x = False
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 i in range(100):
115
- try:
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 texture(self): return getattr(self, f'upscale_buffer_0').texture
116
+ def fbo(self): return self.upsample_buffers[0]
123
117
  @property
124
- def fbo(self): return getattr(self, f'upscale_buffer_0')
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
- self.batch.vbo.write(data, node.data_index * data.shape[1] * 4)
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.bloom.render()
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.program[f'textureArrays[{i}].array'] = i + 3
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.program['materialsTexture'] = 9
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, value) -> None:
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(uniform, self.uniform_values[uniform])
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.program['skyboxTexture'] = 8
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.program['skyboxTexture'] = 8
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):
@@ -89,8 +89,7 @@ class Scene():
89
89
 
90
90
  if target: return
91
91
  # This will show the frame to screen on engine.update()
92
- self.frame.scene_render(target)
93
- self.engine.frames.append(self.frame)
92
+ self.frame.scene_render(self.ctx.screen)
94
93
 
95
94
 
96
95
 
@@ -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(fragColor.rgb, vec3(0.2126, 0.7152, 0.0722)) + dot(lightResult.specular, vec3(.2)) + dot(mtl.emissiveColor, vec3(1));
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
- // // Filter out bright pixels for bloom
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
+ }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: basilisk-engine
3
- Version: 0.1.42
3
+ Version: 0.1.44
4
4
  Summary: Python 3D Framework
5
5
  Home-page: https://basilisk-website.vercel.app/
6
6
  Author: Name
@@ -119,6 +119,7 @@ images/floor.png
119
119
  images/foil.png
120
120
  images/mud.png
121
121
  tests/SkySkybox.png
122
+ tests/battery.obj
122
123
  tests/box_three.obj
123
124
  tests/box_three_lid.obj
124
125
  tests/brick.png
@@ -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.42',
10
+ version = '0.1.44',
11
11
  url = 'https://basilisk-website.vercel.app/',
12
12
  author = 'Name',
13
13
  author_email = 'basiliskengine@gmail.com',