# {py:mod}`simvx.graphics.engine` ```{py:module} simvx.graphics.engine ``` ```{autodoc2-docstring} simvx.graphics.engine :allowtitles: ``` ## Module Contents ### Classes ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`Engine ` - ```{autodoc2-docstring} simvx.graphics.engine.Engine :summary: ``` ```` ### Data ````{list-table} :class: autosummary longtable :align: left * - {py:obj}`__all__ ` - ```{autodoc2-docstring} simvx.graphics.engine.__all__ :summary: ``` * - {py:obj}`log ` - ```{autodoc2-docstring} simvx.graphics.engine.log :summary: ``` ```` ### API ````{py:data} __all__ :canonical: simvx.graphics.engine.__all__ :value: > ['Engine'] ```{autodoc2-docstring} simvx.graphics.engine.__all__ ``` ```` ````{py:data} log :canonical: simvx.graphics.engine.log :value: > 'getLogger(...)' ```{autodoc2-docstring} simvx.graphics.engine.log ``` ```` `````{py:class} Engine(width: int = 1280, height: int = 720, title: str = 'SimVX', backend: str | None = None, renderer: str = 'deferred', max_textures: int = MAX_TEXTURES, visible: bool = True, vsync: bool = False) :canonical: simvx.graphics.engine.Engine ```{autodoc2-docstring} simvx.graphics.engine.Engine ``` ```{rubric} Initialization ``` ```{autodoc2-docstring} simvx.graphics.engine.Engine.__init__ ``` ````{py:property} ctx :canonical: simvx.graphics.engine.Engine.ctx :type: simvx.graphics.gpu.context.GPUContext ```{autodoc2-docstring} simvx.graphics.engine.Engine.ctx ``` ```` ````{py:property} render_pass :canonical: simvx.graphics.engine.Engine.render_pass :type: simvx.graphics._types.VkRenderPass ```{autodoc2-docstring} simvx.graphics.engine.Engine.render_pass ``` ```` ````{py:property} extent :canonical: simvx.graphics.engine.Engine.extent :type: tuple[int, int] ```{autodoc2-docstring} simvx.graphics.engine.Engine.extent ``` ```` ````{py:property} shader_dir :canonical: simvx.graphics.engine.Engine.shader_dir :type: pathlib.Path ```{autodoc2-docstring} simvx.graphics.engine.Engine.shader_dir ``` ```` ````{py:property} mesh_registry :canonical: simvx.graphics.engine.Engine.mesh_registry :type: simvx.graphics.renderer.mesh_registry.MeshRegistry ```{autodoc2-docstring} simvx.graphics.engine.Engine.mesh_registry ``` ```` ````{py:property} texture_manager :canonical: simvx.graphics.engine.Engine.texture_manager :type: simvx.graphics.materials.texture.TextureManager ```{autodoc2-docstring} simvx.graphics.engine.Engine.texture_manager ``` ```` ````{py:property} batch :canonical: simvx.graphics.engine.Engine.batch :type: simvx.graphics.renderer.gpu_batch.GPUBatch ```{autodoc2-docstring} simvx.graphics.engine.Engine.batch ``` ```` ````{py:property} renderer :canonical: simvx.graphics.engine.Engine.renderer :type: simvx.graphics.renderer.forward.ForwardRenderer ```{autodoc2-docstring} simvx.graphics.engine.Engine.renderer ``` ```` ````{py:method} create_renderer(renderer_type: str = 'forward') -> simvx.graphics.renderer.forward.ForwardRenderer :canonical: simvx.graphics.engine.Engine.create_renderer ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_renderer ``` ```` ````{py:property} texture_descriptor_layout :canonical: simvx.graphics.engine.Engine.texture_descriptor_layout :type: simvx.graphics._types.VkDescriptorSetLayout ```{autodoc2-docstring} simvx.graphics.engine.Engine.texture_descriptor_layout ``` ```` ````{py:property} texture_descriptor_set :canonical: simvx.graphics.engine.Engine.texture_descriptor_set :type: simvx.graphics._types.VkDescriptorSet ```{autodoc2-docstring} simvx.graphics.engine.Engine.texture_descriptor_set ``` ```` ````{py:method} create_render_target(width: int, height: int, use_depth: bool = True) -> simvx.graphics.renderer.render_target.RenderTarget :canonical: simvx.graphics.engine.Engine.create_render_target ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_render_target ``` ```` ````{py:method} register_texture(image_view: simvx.graphics._types.VkImageView) -> int :canonical: simvx.graphics.engine.Engine.register_texture ```{autodoc2-docstring} simvx.graphics.engine.Engine.register_texture ``` ```` ````{py:method} upload_texture_pixels(pixels: numpy.ndarray, width: int, height: int) -> int :canonical: simvx.graphics.engine.Engine.upload_texture_pixels ```{autodoc2-docstring} simvx.graphics.engine.Engine.upload_texture_pixels ``` ```` ````{py:method} load_texture(file_path: str) -> int :canonical: simvx.graphics.engine.Engine.load_texture ```{autodoc2-docstring} simvx.graphics.engine.Engine.load_texture ``` ```` ````{py:method} load_mesh(file_path: str) -> simvx.graphics._types.MeshHandle :canonical: simvx.graphics.engine.Engine.load_mesh ```{autodoc2-docstring} simvx.graphics.engine.Engine.load_mesh ``` ```` ````{py:method} create_textured_quad_pipeline(vert_module: simvx.graphics._types.VkShaderModule, frag_module: simvx.graphics._types.VkShaderModule) -> tuple[simvx.graphics._types.VkPipeline, simvx.graphics._types.VkPipelineLayout] :canonical: simvx.graphics.engine.Engine.create_textured_quad_pipeline ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_textured_quad_pipeline ``` ```` ````{py:method} create_vertex_buffer(vertices: numpy.ndarray) -> tuple[typing.Any, simvx.graphics._types.VkDeviceMemory] :canonical: simvx.graphics.engine.Engine.create_vertex_buffer ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_vertex_buffer ``` ```` ````{py:method} create_index_buffer(indices: numpy.ndarray) -> tuple[typing.Any, simvx.graphics._types.VkDeviceMemory] :canonical: simvx.graphics.engine.Engine.create_index_buffer ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_index_buffer ``` ```` ````{py:method} create_ssbo(data: numpy.ndarray) -> tuple[typing.Any, simvx.graphics._types.VkDeviceMemory] :canonical: simvx.graphics.engine.Engine.create_ssbo ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_ssbo ``` ```` ````{py:method} update_ssbo(memory: simvx.graphics._types.VkDeviceMemory, data: numpy.ndarray) -> None :canonical: simvx.graphics.engine.Engine.update_ssbo ```{autodoc2-docstring} simvx.graphics.engine.Engine.update_ssbo ``` ```` ````{py:method} create_descriptor_pool(max_sets: int = 4) -> simvx.graphics._types.VkDescriptorPool :canonical: simvx.graphics.engine.Engine.create_descriptor_pool ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_descriptor_pool ``` ```` ````{py:method} create_descriptor_set_layout(binding_count: int = 3) -> simvx.graphics._types.VkDescriptorSetLayout :canonical: simvx.graphics.engine.Engine.create_descriptor_set_layout ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_descriptor_set_layout ``` ```` ````{py:method} allocate_descriptor_set(pool: simvx.graphics._types.VkDescriptorPool, layout: simvx.graphics._types.VkDescriptorSetLayout) -> simvx.graphics._types.VkDescriptorSet :canonical: simvx.graphics.engine.Engine.allocate_descriptor_set ```{autodoc2-docstring} simvx.graphics.engine.Engine.allocate_descriptor_set ``` ```` ````{py:method} write_descriptor_ssbo(descriptor_set: simvx.graphics._types.VkDescriptorSet, binding: int, buffer: typing.Any, size: int) -> None :canonical: simvx.graphics.engine.Engine.write_descriptor_ssbo ```{autodoc2-docstring} simvx.graphics.engine.Engine.write_descriptor_ssbo ``` ```` ````{py:method} compile_and_load_shader(name: str) -> simvx.graphics._types.VkShaderModule :canonical: simvx.graphics.engine.Engine.compile_and_load_shader ```{autodoc2-docstring} simvx.graphics.engine.Engine.compile_and_load_shader ``` ```` ````{py:method} create_forward_pipeline(vert_module: simvx.graphics._types.VkShaderModule, frag_module: simvx.graphics._types.VkShaderModule, descriptor_layout: simvx.graphics._types.VkDescriptorSetLayout, texture_layout: simvx.graphics._types.VkDescriptorSetLayout | None = None, render_pass: simvx.graphics._types.VkRenderPass | None = None, extent: tuple[int, int] | None = None) -> tuple[simvx.graphics._types.VkPipeline, simvx.graphics._types.VkPipelineLayout] :canonical: simvx.graphics.engine.Engine.create_forward_pipeline ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_forward_pipeline ``` ```` ````{py:method} update_vertex_buffer(memory: simvx.graphics._types.VkDeviceMemory, data: numpy.ndarray) -> None :canonical: simvx.graphics.engine.Engine.update_vertex_buffer ```{autodoc2-docstring} simvx.graphics.engine.Engine.update_vertex_buffer ``` ```` ````{py:method} create_line_pipeline(vert_module: simvx.graphics._types.VkShaderModule, frag_module: simvx.graphics._types.VkShaderModule) -> tuple[simvx.graphics._types.VkPipeline, simvx.graphics._types.VkPipelineLayout] :canonical: simvx.graphics.engine.Engine.create_line_pipeline ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_line_pipeline ``` ```` ````{py:method} create_ui_pipeline(vert_module: simvx.graphics._types.VkShaderModule, frag_module: simvx.graphics._types.VkShaderModule) -> tuple[simvx.graphics._types.VkPipeline, simvx.graphics._types.VkPipelineLayout] :canonical: simvx.graphics.engine.Engine.create_ui_pipeline ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_ui_pipeline ``` ```` ````{py:method} push_constants(cmd: simvx.graphics._types.VkCommandBuffer, pipeline_layout: simvx.graphics._types.VkPipelineLayout, data: bytes | bytearray) -> None :canonical: simvx.graphics.engine.Engine.push_constants ```{autodoc2-docstring} simvx.graphics.engine.Engine.push_constants ``` ```` ````{py:method} enable_picking(descriptor_layout: simvx.graphics._types.VkDescriptorSetLayout, descriptor_set: simvx.graphics._types.VkDescriptorSet) -> None :canonical: simvx.graphics.engine.Engine.enable_picking ```{autodoc2-docstring} simvx.graphics.engine.Engine.enable_picking ``` ```` ````{py:method} pick_entity(x: int, y: int, view_proj_data: bytes, vertex_buffer: typing.Any, index_buffer: typing.Any, index_count: int, instance_count: int) -> int :canonical: simvx.graphics.engine.Engine.pick_entity ```{autodoc2-docstring} simvx.graphics.engine.Engine.pick_entity ``` ```` ````{py:method} set_selected_objects(selected: list[tuple[simvx.graphics._types.MeshHandle, numpy.ndarray, int]]) -> None :canonical: simvx.graphics.engine.Engine.set_selected_objects ```{autodoc2-docstring} simvx.graphics.engine.Engine.set_selected_objects ``` ```` ````{py:method} clear_selected_objects() -> None :canonical: simvx.graphics.engine.Engine.clear_selected_objects ```{autodoc2-docstring} simvx.graphics.engine.Engine.clear_selected_objects ``` ```` ````{py:property} outline_pass :canonical: simvx.graphics.engine.Engine.outline_pass :type: simvx.graphics.renderer.outline_pass.OutlinePass | None ```{autodoc2-docstring} simvx.graphics.engine.Engine.outline_pass ``` ```` ````{py:method} draw_text(text: str, x: float = 10, y: float = 10, font: str | None = None, size: float = 24.0, colour: tuple[float, ...] = (1.0, 1.0, 1.0, 1.0)) -> None :canonical: simvx.graphics.engine.Engine.draw_text ```{autodoc2-docstring} simvx.graphics.engine.Engine.draw_text ``` ```` ````{py:method} create_text_texture(font: str | None = None, size: int = 32, width: int = 256, height: int = 64) -> typing.Any :canonical: simvx.graphics.engine.Engine.create_text_texture ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_text_texture ``` ```` ````{py:method} set_key_callback(callback: collections.abc.Callable[[int, int, int], None]) -> None :canonical: simvx.graphics.engine.Engine.set_key_callback ```{autodoc2-docstring} simvx.graphics.engine.Engine.set_key_callback ``` ```` ````{py:method} set_mouse_button_callback(callback: collections.abc.Callable[[int, int, int], None]) -> None :canonical: simvx.graphics.engine.Engine.set_mouse_button_callback ```{autodoc2-docstring} simvx.graphics.engine.Engine.set_mouse_button_callback ``` ```` ````{py:method} set_cursor_pos_callback(callback: collections.abc.Callable[[float, float], None]) -> None :canonical: simvx.graphics.engine.Engine.set_cursor_pos_callback ```{autodoc2-docstring} simvx.graphics.engine.Engine.set_cursor_pos_callback ``` ```` ````{py:method} set_scroll_callback(callback: collections.abc.Callable[[float, float], None]) -> None :canonical: simvx.graphics.engine.Engine.set_scroll_callback ```{autodoc2-docstring} simvx.graphics.engine.Engine.set_scroll_callback ``` ```` ````{py:method} set_char_callback(callback: collections.abc.Callable[[int], None]) -> None :canonical: simvx.graphics.engine.Engine.set_char_callback ```{autodoc2-docstring} simvx.graphics.engine.Engine.set_char_callback ``` ```` ````{py:method} set_cursor_shape(shape: int) -> None :canonical: simvx.graphics.engine.Engine.set_cursor_shape ```{autodoc2-docstring} simvx.graphics.engine.Engine.set_cursor_shape ``` ```` ````{py:method} get_cursor_pos() -> tuple[float, float] :canonical: simvx.graphics.engine.Engine.get_cursor_pos ```{autodoc2-docstring} simvx.graphics.engine.Engine.get_cursor_pos ``` ```` ````{py:method} run(callback: collections.abc.Callable[[], None] | None = None, setup: collections.abc.Callable[[], None] | None = None, render: collections.abc.Callable[[simvx.graphics._types.VkCommandBuffer, tuple[int, int]], None] | None = None, pre_render: collections.abc.Callable[[simvx.graphics._types.VkCommandBuffer], None] | None = None) -> None :canonical: simvx.graphics.engine.Engine.run ```{autodoc2-docstring} simvx.graphics.engine.Engine.run ``` ```` ````{py:method} capture_frame() -> numpy.ndarray :canonical: simvx.graphics.engine.Engine.capture_frame ```{autodoc2-docstring} simvx.graphics.engine.Engine.capture_frame ``` ```` ````{py:method} set_window_size(width: int, height: int) -> None :canonical: simvx.graphics.engine.Engine.set_window_size ```{autodoc2-docstring} simvx.graphics.engine.Engine.set_window_size ``` ```` ````{py:method} shutdown() -> None :canonical: simvx.graphics.engine.Engine.shutdown ```{autodoc2-docstring} simvx.graphics.engine.Engine.shutdown ``` ```` `````