# {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: ``` * - {py:obj}`VkInstance ` - ```{autodoc2-docstring} simvx.graphics.engine.VkInstance :summary: ``` * - {py:obj}`VkDevice ` - ```{autodoc2-docstring} simvx.graphics.engine.VkDevice :summary: ``` * - {py:obj}`VkPhysicalDevice ` - ```{autodoc2-docstring} simvx.graphics.engine.VkPhysicalDevice :summary: ``` * - {py:obj}`VkQueue ` - ```{autodoc2-docstring} simvx.graphics.engine.VkQueue :summary: ``` * - {py:obj}`VkSurfaceKHR ` - ```{autodoc2-docstring} simvx.graphics.engine.VkSurfaceKHR :summary: ``` * - {py:obj}`VkRenderPass ` - ```{autodoc2-docstring} simvx.graphics.engine.VkRenderPass :summary: ``` * - {py:obj}`VkPipeline ` - ```{autodoc2-docstring} simvx.graphics.engine.VkPipeline :summary: ``` * - {py:obj}`VkPipelineLayout ` - ```{autodoc2-docstring} simvx.graphics.engine.VkPipelineLayout :summary: ``` * - {py:obj}`VkCommandBuffer ` - ```{autodoc2-docstring} simvx.graphics.engine.VkCommandBuffer :summary: ``` * - {py:obj}`VkFramebuffer ` - ```{autodoc2-docstring} simvx.graphics.engine.VkFramebuffer :summary: ``` * - {py:obj}`VkShaderModule ` - ```{autodoc2-docstring} simvx.graphics.engine.VkShaderModule :summary: ``` * - {py:obj}`VkImage ` - ```{autodoc2-docstring} simvx.graphics.engine.VkImage :summary: ``` * - {py:obj}`VkImageView ` - ```{autodoc2-docstring} simvx.graphics.engine.VkImageView :summary: ``` * - {py:obj}`VkDeviceMemory ` - ```{autodoc2-docstring} simvx.graphics.engine.VkDeviceMemory :summary: ``` * - {py:obj}`VkDescriptorPool ` - ```{autodoc2-docstring} simvx.graphics.engine.VkDescriptorPool :summary: ``` * - {py:obj}`VkDescriptorSetLayout ` - ```{autodoc2-docstring} simvx.graphics.engine.VkDescriptorSetLayout :summary: ``` * - {py:obj}`VkDescriptorSet ` - ```{autodoc2-docstring} simvx.graphics.engine.VkDescriptorSet :summary: ``` * - {py:obj}`VkSampler ` - ```{autodoc2-docstring} simvx.graphics.engine.VkSampler :summary: ``` * - {py:obj}`VkDebugUtilsMessengerEXT ` - ```{autodoc2-docstring} simvx.graphics.engine.VkDebugUtilsMessengerEXT :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:data} VkInstance :canonical: simvx.graphics.engine.VkInstance :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkInstance ``` ```` ````{py:data} VkDevice :canonical: simvx.graphics.engine.VkDevice :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkDevice ``` ```` ````{py:data} VkPhysicalDevice :canonical: simvx.graphics.engine.VkPhysicalDevice :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkPhysicalDevice ``` ```` ````{py:data} VkQueue :canonical: simvx.graphics.engine.VkQueue :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkQueue ``` ```` ````{py:data} VkSurfaceKHR :canonical: simvx.graphics.engine.VkSurfaceKHR :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkSurfaceKHR ``` ```` ````{py:data} VkRenderPass :canonical: simvx.graphics.engine.VkRenderPass :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkRenderPass ``` ```` ````{py:data} VkPipeline :canonical: simvx.graphics.engine.VkPipeline :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkPipeline ``` ```` ````{py:data} VkPipelineLayout :canonical: simvx.graphics.engine.VkPipelineLayout :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkPipelineLayout ``` ```` ````{py:data} VkCommandBuffer :canonical: simvx.graphics.engine.VkCommandBuffer :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkCommandBuffer ``` ```` ````{py:data} VkFramebuffer :canonical: simvx.graphics.engine.VkFramebuffer :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkFramebuffer ``` ```` ````{py:data} VkShaderModule :canonical: simvx.graphics.engine.VkShaderModule :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkShaderModule ``` ```` ````{py:data} VkImage :canonical: simvx.graphics.engine.VkImage :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkImage ``` ```` ````{py:data} VkImageView :canonical: simvx.graphics.engine.VkImageView :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkImageView ``` ```` ````{py:data} VkDeviceMemory :canonical: simvx.graphics.engine.VkDeviceMemory :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkDeviceMemory ``` ```` ````{py:data} VkDescriptorPool :canonical: simvx.graphics.engine.VkDescriptorPool :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkDescriptorPool ``` ```` ````{py:data} VkDescriptorSetLayout :canonical: simvx.graphics.engine.VkDescriptorSetLayout :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkDescriptorSetLayout ``` ```` ````{py:data} VkDescriptorSet :canonical: simvx.graphics.engine.VkDescriptorSet :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkDescriptorSet ``` ```` ````{py:data} VkSampler :canonical: simvx.graphics.engine.VkSampler :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkSampler ``` ```` ````{py:data} VkDebugUtilsMessengerEXT :canonical: simvx.graphics.engine.VkDebugUtilsMessengerEXT :value: > None ```{autodoc2-docstring} simvx.graphics.engine.VkDebugUtilsMessengerEXT ``` ```` `````{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} device :canonical: simvx.graphics.engine.Engine.device :type: simvx.graphics.engine.VkDevice ```{autodoc2-docstring} simvx.graphics.engine.Engine.device ``` ```` ````{py:property} physical_device :canonical: simvx.graphics.engine.Engine.physical_device :type: simvx.graphics.engine.VkPhysicalDevice ```{autodoc2-docstring} simvx.graphics.engine.Engine.physical_device ``` ```` ````{py:property} render_pass :canonical: simvx.graphics.engine.Engine.render_pass :type: simvx.graphics.engine.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} graphics_queue :canonical: simvx.graphics.engine.Engine.graphics_queue :type: simvx.graphics.engine.VkQueue ```{autodoc2-docstring} simvx.graphics.engine.Engine.graphics_queue ``` ```` ````{py:property} cmd_pool :canonical: simvx.graphics.engine.Engine.cmd_pool :type: typing.Any ```{autodoc2-docstring} simvx.graphics.engine.Engine.cmd_pool ``` ```` ````{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.engine.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.engine.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.engine.VkImageView) -> int :canonical: simvx.graphics.engine.Engine.register_texture ```{autodoc2-docstring} simvx.graphics.engine.Engine.register_texture ``` ```` ````{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.engine.VkShaderModule, frag_module: simvx.graphics.engine.VkShaderModule) -> tuple[simvx.graphics.engine.VkPipeline, simvx.graphics.engine.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.engine.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.engine.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.engine.VkDeviceMemory] :canonical: simvx.graphics.engine.Engine.create_ssbo ```{autodoc2-docstring} simvx.graphics.engine.Engine.create_ssbo ``` ```` ````{py:method} update_ssbo(memory: simvx.graphics.engine.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.engine.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.engine.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.engine.VkDescriptorPool, layout: simvx.graphics.engine.VkDescriptorSetLayout) -> simvx.graphics.engine.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.engine.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.engine.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.engine.VkShaderModule, frag_module: simvx.graphics.engine.VkShaderModule, descriptor_layout: simvx.graphics.engine.VkDescriptorSetLayout, texture_layout: simvx.graphics.engine.VkDescriptorSetLayout | None = None, render_pass: simvx.graphics.engine.VkRenderPass | None = None, extent: tuple[int, int] | None = None) -> tuple[simvx.graphics.engine.VkPipeline, simvx.graphics.engine.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.engine.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.engine.VkShaderModule, frag_module: simvx.graphics.engine.VkShaderModule) -> tuple[simvx.graphics.engine.VkPipeline, simvx.graphics.engine.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.engine.VkShaderModule, frag_module: simvx.graphics.engine.VkShaderModule) -> tuple[simvx.graphics.engine.VkPipeline, simvx.graphics.engine.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.engine.VkCommandBuffer, pipeline_layout: simvx.graphics.engine.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.engine.VkDescriptorSetLayout, descriptor_set: simvx.graphics.engine.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, color: 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.engine.VkCommandBuffer, tuple[int, int]], None] | None = None, pre_render: collections.abc.Callable[[simvx.graphics.engine.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 ``` ```` `````