# Public API surface of simvx.graphics.
# Generated by tools/api_surface.py; a change here is a change to what games can call.

[exports]
AVAILABLE_BACKENDS tuple
App class(title: 'str' = ..., width: 'int' = ..., height: 'int' = ..., backend: 'str | None' = ..., physics_fps: 'int' = ..., target_fps: 'int | None' = ..., visible: 'bool' = ..., vsync: 'bool' = ..., bg_colour: 'tuple[float, float, float, float] | str | None' = ..., audio_sample_rate: 'int' = ..., audio_channels: 'int' = ..., render_thread: 'bool' = ..., multi_gpu: 'bool' = ..., splash: 'Any' = ..., splash_min_time: 'float | None' = ..., unbranded: 'bool' = ..., **_kwargs)
Engine class(width: 'int' = ..., height: 'int' = ..., title: 'str' = ..., backend: 'str | None' = ..., renderer: 'str' = ..., max_textures: 'int' = ..., visible: 'bool' = ..., vsync: 'bool' = ..., target_fps: 'int | None' = ...) -> 'None'
GamePlaytestHarness class(game_root: 'Node', *, width: 'int' = ..., height: 'int' = ..., output_dir: 'str | Path | None' = ..., max_frames: 'int' = ..., speed: 'float' = ...)
GltfScene class(meshes: 'list[tuple[VertexStreams, np.ndarray]]' = ..., materials: 'list[GltfMaterial]' = ..., nodes: 'list[GltfNode]' = ..., root_nodes: 'list[int]' = ..., skins: 'list[dict[str, Any]]' = ..., animations: 'list[dict[str, Any]]' = ..., lights: 'list[dict[str, Any]]' = ..., cameras: 'list[dict[str, Any]]' = ..., mesh_extras: 'list[dict[str, np.ndarray]]' = ...) -> 'None'
PlaytestReport class(game_path: 'str', timestamp: 'str', total_frames: 'int', total_steps: 'int', completed: 'bool', passed: 'bool', failures: 'list[str]', steps: 'list[StepSnapshot]', duration_seconds: 'float', node_count: 'int', output_dir: 'Path') -> 'None'
Renderer class(engine: 'Any', max_objects: 'int' = ...)
RendererBackend class()
ShaderMaterial class(vertex_path: 'str | Path | None' = ..., fragment_path: 'str | Path | None' = ..., *, vertex_source: 'str | None' = ..., fragment_source: 'str | None' = ..., language: 'str' = ..., wgsl_vertex: 'str | None' = ..., wgsl_fragment: 'str | None' = ..., wgsl_vertex_path: 'str | Path | None' = ..., wgsl_fragment_path: 'str | Path | None' = ..., transparent: 'bool' = ...) -> 'None'
ShaderMaterialManager class() -> 'None'
StepSnapshot class(step_index: 'int', step_type: 'str', step_desc: 'str', frame_index: 'int', time_seconds: 'float', screenshot_path: 'Path | None' = ..., scene_tree: 'str' = ..., ui_tree: 'str' = ..., assertion_result: 'str | None' = ...) -> 'None'
UniformBuffer class(max_size: 'int' = ...) -> 'None'
import_gltf function(file_path: 'str') -> 'Node3D'
load_gltf function(file_path: 'str') -> 'GltfScene'
save_png function(pixels: 'np.ndarray', path: 'str | Path') -> 'None'
testing module

[methods]
App.active_backend property
App.capabilities property
App.current method() -> 'App | None'
App.cursor_pos property
App.engine property
App.is_fullscreen property
App.last_draw2d_draw_count property
App.quit method(self) -> 'None'
App.register_lut method(self, tex_id: 'int', lut_data) -> 'int'
App.run method(self, root_or_update: 'Any' = ..., *, update: 'Callable[[], None] | None' = ..., render: 'Callable[[object, tuple[int, int]], None] | None' = ...) -> 'None'
App.run_headless method(self, root_node: 'Any', *, frames: 'int' = ..., on_frame: 'Callable[[int, float], bool | None] | None' = ..., capture_frames: 'list[int] | None' = ..., capture_fn: 'Callable[[int], bool] | None' = ...) -> 'list'
App.run_streaming method(self, root_node: 'Any', server: 'Any') -> 'None'
App.scene_adapter property
App.set_vsync method(self, value: 'bool') -> 'None'
App.texture_manager property
App.time_scale property
App.toggle_fullscreen method(self) -> 'None'
App.vsync property
App.window_size property
App.window_title property
Draw2D.clear method(r=..., g=..., b=...)
Draw2D.draw_circle method(center, radius, *, colour=..., filled=..., segments=..., screen_space=...) -> 'None'
Draw2D.draw_line method(a, b, *, colour=..., thickness=..., screen_space=...) -> 'None'
Draw2D.draw_lines method(points, closed=..., colour=...)
Draw2D.draw_polygon method(vertices, *, colour=..., filled=..., blend=...)
Draw2D.draw_rect method(pos, size, *, colour=..., filled=..., thickness=..., screen_space=..., blend=...) -> 'None'
Draw2D.draw_thick_line method(x1, y1, x2, y2, width=..., *, colour=...)
Draw2D.fill_quad method(x1, y1, x2, y2, x3, y3, x4, y4, *, colour=...)
Draw2D.fill_rect_gradient method(x, y, w, h, colour_top, colour_bottom)
Draw2D.fill_triangle method(x1, y1, x2, y2, x3, y3, *, colour=...)
Draw2D.pop_clip method() -> 'None'
Draw2D.pop_post_layer method() -> 'None'
Draw2D.present method()
Draw2D.push_clip method(x: 'int', y: 'int', w: 'int', h: 'int') -> 'None'
Draw2D.push_post_layer method(band: 'int') -> 'None'
Draw2D.reset_clip method() -> 'None'
Draw2DTextMixin.draw_text method(text, pos=..., *, colour=..., scale=..., rect=..., alignment=..., vertical_alignment=..., fit_to_width=..., min_scale=..., outline=..., outline_colour=..., screen_space=..., cell_width=...)
Draw2DTextMixin.fit_scale method(text, max_width, *, base_scale=..., min_scale=..., cell_width=...)
Draw2DTextMixin.set_font method(path: 'str | None' = ..., size: 'int' = ...) -> 'None'
Draw2DTextMixin.text_height method(text, scale=...)
Draw2DTextMixin.text_size method(text, scale=...)
Draw2DTextMixin.text_width method(text, scale=..., *, cell_width=...)
Draw2DTextureMixin.draw_image method(path: 'str | Path', x: 'float', y: 'float', w: 'float', h: 'float', *, colour: 'tuple[float, ...] | None' = ..., rotation: 'float' = ..., filter: 'str' = ..., blend: 'str' = ...)
Draw2DTextureMixin.draw_nine_patch method(texture_id: 'int', x: 'float', y: 'float', w: 'float', h: 'float', tex_w: 'float', tex_h: 'float', margin_left: 'float' = ..., margin_right: 'float' = ..., margin_top: 'float' = ..., margin_bottom: 'float' = ..., draw_centre: 'bool' = ..., colour: 'tuple[float, ...] | None' = ...)
Draw2DTextureMixin.draw_texture method(texture_id: 'int', pos, size, *, colour: 'tuple[float, ...] | None' = ..., rotation: 'float' = ..., blend: 'str' = ..., screen_space: 'bool' = ...)
Draw2DTextureMixin.draw_texture_region method(texture_id: 'int', pos, size, uv0=..., uv1=..., colour: 'tuple[float, ...] | None' = ..., rotation: 'float' = ..., *, blend: 'str' = ..., screen_space: 'bool' = ...)
Draw2DTextureMixin.register_texture method(png_data: 'bytes') -> 'int'
Draw2DTextureMixin.register_texture_with_id method(texture_id: 'int', png_data: 'bytes') -> 'None'
Draw2DTransformMixin.pop_transform method()
Draw2DTransformMixin.push_identity method()
Draw2DTransformMixin.push_screen_transform method(a, b, c, d, tx, ty)
Draw2DTransformMixin.push_transform method(a, b, c, d, tx, ty)
Draw2DTransformMixin.screen_space method()
Engine.allocate_descriptor_set method(self, pool: '_VkDescriptorPool', layout: '_VkDescriptorSetLayout') -> '_VkDescriptorSet'
Engine.arm_capture method(self) -> 'None'
Engine.batch property
Engine.begin method(self, *, setup: 'Callable[[], None] | None' = ..., render: 'Callable[[_VkCommandBuffer, tuple[int, int]], None] | None' = ..., pre_render: 'Callable[[_VkCommandBuffer], None] | None' = ...) -> 'None'
Engine.capabilities property
Engine.capture_frame method(self) -> 'np.ndarray'
Engine.clear_selected_objects method(self) -> 'None'
Engine.compile_and_load_shader method(self, name: 'str') -> '_VkShaderModule'
Engine.compressed_caps method(self) -> 'dict[str, bool]'
Engine.content_scale property
Engine.create_descriptor_pool method(self, max_sets: 'int' = ...) -> '_VkDescriptorPool'
Engine.create_descriptor_set_layout method(self, binding_count: 'int' = ...) -> '_VkDescriptorSetLayout'
Engine.create_index_buffer method(self, indices: 'np.ndarray') -> 'tuple[Any, _VkDeviceMemory]'
Engine.create_render_target method(self, width: 'int', height: 'int', use_depth: 'bool' = ...) -> 'RenderTarget'
Engine.create_renderer method(self, renderer_type: 'str' = ...) -> 'Renderer'
Engine.create_ssbo method(self, data: 'np.ndarray') -> 'tuple[Any, _VkDeviceMemory]'
Engine.create_text_texture method(self, font: 'str | None' = ..., size: 'int' = ..., width: 'int' = ..., height: 'int' = ...) -> 'Any'
Engine.create_vertex_buffer method(self, vertices: 'np.ndarray') -> 'tuple[Any, _VkDeviceMemory]'
Engine.ctx property
Engine.current_frame property
Engine.current_timestamp_pool property
Engine.cursor_pos property
Engine.enable_picking method(self, descriptor_layout: '_VkDescriptorSetLayout', descriptor_set: '_VkDescriptorSet') -> 'None'
Engine.end method(self, *, pre_shutdown: 'Callable[[], None] | None' = ..., cleanup: 'Callable[[], None] | None' = ...) -> 'None'
Engine.extent property
Engine.format_supported method(self, vk_format: 'int') -> 'bool'
Engine.load_cubemap method(self, paths_or_hdr: 'list[str] | str | None' = ..., *, colour: 'tuple[float, float, float] | None' = ..., face_size: 'int' = ..., faces: 'list | None' = ...) -> 'CubemapHandle'
Engine.load_mesh method(self, file_path: 'str') -> 'MeshHandle'
Engine.material_sampler method(self) -> '_VkSampler'
Engine.mesh_registry property
Engine.multi_device property
Engine.outline_pass property
Engine.pick_entity method(self, x: 'int', y: 'int', view_proj_data: 'bytes', vertex_buffer: 'Any', index_buffer: 'Any', index_count: 'int', instance_count: 'int') -> 'int'
Engine.pre_render_callback property
Engine.push_constants method(self, cmd: '_VkCommandBuffer', pipeline_layout: '_VkPipelineLayout', data: 'bytes | bytearray') -> 'None'
Engine.register_lut method(self, tex_id: 'int', lut_data: 'np.ndarray') -> 'int'
Engine.register_texture method(self, image_view: '_VkImageView', *, filter: 'str' = ..., mip_count: 'int' = ...) -> 'int'
Engine.render_pass property
Engine.renderer property
Engine.run method(self, callback: 'Callable[[], None] | None' = ..., setup: 'Callable[[], None] | None' = ..., render: 'Callable[[_VkCommandBuffer, tuple[int, int]], None] | None' = ..., pre_render: 'Callable[[_VkCommandBuffer], None] | None' = ..., cleanup: 'Callable[[], None] | None' = ..., frame_driver: 'Callable[[], None] | None' = ..., pre_shutdown: 'Callable[[], None] | None' = ...) -> 'None'
Engine.set_char_callback method(self, callback: 'Callable[[int], None]') -> 'None'
Engine.set_cursor_pos_callback method(self, callback: 'Callable[[float, float], None]') -> 'None'
Engine.set_cursor_shape method(self, shape: 'int') -> 'None'
Engine.set_key_callback method(self, callback: 'Callable[[int, int, int], None]') -> 'None'
Engine.set_mouse_button_callback method(self, callback: 'Callable[[int, int, int], None]') -> 'None'
Engine.set_mouse_capture method(self, mode: 'int') -> 'None'
Engine.set_scroll_callback method(self, callback: 'Callable[[float, float], None]') -> 'None'
Engine.set_selected_objects method(self, selected: 'list[tuple[MeshHandle, np.ndarray, int]]') -> 'None'
Engine.set_vsync method(self, value: 'bool') -> 'None'
Engine.shader_dir property
Engine.shutdown method(self) -> 'None'
Engine.step method(self, *, callback: 'Callable[[], None] | None' = ..., frame_driver: 'Callable[[], None] | None' = ...) -> 'bool'
Engine.supports_compressed_format method(self, vk_format: 'int') -> 'bool'
Engine.take_captured_frame method(self) -> 'np.ndarray | None'
Engine.texture_binding method(self, slot: 'int') -> 'tuple[_VkImageView, _VkSampler] | None'
Engine.texture_descriptor_layout property
Engine.texture_descriptor_set property
Engine.texture_manager property
Engine.unregister_texture method(self, slot: 'int') -> 'None'
Engine.update_ssbo method(self, memory: '_VkDeviceMemory', data: 'np.ndarray') -> 'None'
Engine.update_texture method(self, slot: 'int', image_view: '_VkImageView') -> 'None'
Engine.update_texture_pixels method(self, slot: 'int', pixels: 'np.ndarray', width: 'int', height: 'int', *, filter: 'str | None' = ..., colour_space: 'str | None' = ..., mipmaps: 'bool | None' = ...) -> 'int'
Engine.update_vertex_buffer method(self, memory: '_VkDeviceMemory', data: 'np.ndarray') -> 'None'
Engine.upload_texture_blocks method(self, blocks: 'list[bytes]', width: 'int', height: 'int', fmt: 'int', block_size: 'int', *, filter: 'str' = ...) -> 'int'
Engine.upload_texture_pixels method(self, pixels: 'np.ndarray', width: 'int', height: 'int', *, filter: 'str' = ..., colour_space: 'str' = ..., mipmaps: 'bool' = ...) -> 'int'
Engine.vsync property
Engine.window_size property
Engine.write_descriptor_ssbo method(self, descriptor_set: '_VkDescriptorSet', binding: 'int', buffer: 'Any', size: 'int') -> 'None'
GamePlaytestHarness.run method(self, steps: 'list', *, capture_every_n: 'int' = ..., capture_on_assert: 'bool' = ..., capture_on_click: 'bool' = ...) -> 'PlaytestReport'
PlaytestReport.save method(self) -> 'Path'
PlaytestReport.summary method(self) -> 'str'
Renderer.apply_gbuffer_state method(self, active: 'bool') -> 'None'
Renderer.apply_probe_quality method(self) -> 'None'
Renderer.apply_shadow_quality method(self) -> 'None'
Renderer.apply_ssgi_state method(self, active: 'bool', *, intensity: 'float' = ..., max_distance: 'float' = ...) -> 'None'
Renderer.apply_ssr_state method(self, active: 'bool', *, intensity: 'float' = ..., max_distance: 'float' = ..., roughness_cutoff: 'float' = ...) -> 'None'
Renderer.begin_frame method(self) -> 'Any'
Renderer.capture_frame method(self) -> 'np.ndarray'
Renderer.capture_irradiance_volumes method(self, cmd: 'Any', adapter: 'Any') -> 'bool'
Renderer.capture_reflection_probes method(self, cmd: 'Any', adapter: 'Any') -> 'bool'
Renderer.cleanup method(self) -> 'None'
Renderer.custom_post_processing property
Renderer.destroy method(self) -> 'None'
Renderer.draw2d_draw_count property
Renderer.draw_sprite_3d method(self, *, texture_id: 'int', position: 'Any', width: 'float', height: 'float', uv: 'tuple[float, float, float, float]', colour: 'Any' = ..., billboard: 'bool' = ..., centered: 'bool' = ..., offset: 'tuple[float, float]' = ..., alpha_cut: 'str' = ..., render_priority: 'int' = ...) -> 'None'
Renderer.draw_text_3d method(self, *, text: 'str', position: 'Any', font_scale: 'float' = ..., pixel_size: 'float' = ..., colour: 'Any' = ..., alignment: 'str' = ..., offset: 'tuple[float, float]' = ...) -> 'None'
Renderer.init method(self, device: 'Any', swapchain: 'Any') -> 'None'
Renderer.install_packet method(self, packet: 'Any') -> 'None'
Renderer.internal_extent method(self, width: 'int | None' = ..., height: 'int | None' = ...) -> 'tuple[int, int]'
Renderer.light2d_submissions method(self) -> 'tuple[list, list]'
Renderer.msdf_atlas_slot method(self) -> 'int'
Renderer.post_processing property
Renderer.pre_render method(self, cmd: 'Any') -> 'None'
Renderer.register_mesh method(self, streams: 'VertexStreams', indices: 'np.ndarray') -> 'MeshHandle'
Renderer.render method(self, cmd: 'Any') -> 'None'
Renderer.render_scale property
Renderer.reserve_main_slice method(self) -> 'int'
Renderer.resize method(self, width: 'int', height: 'int') -> 'None'
Renderer.set_gizmo_data method(self, data: 'GizmoRenderData | None') -> 'None'
Renderer.set_item_view method(self, view: 'Any', camera: 'tuple') -> 'None'
Renderer.set_lights method(self, lights: 'np.ndarray') -> 'None'
Renderer.set_materials method(self, materials: 'np.ndarray') -> 'None'
Renderer.set_skybox method(self, cubemap: 'CubemapHandle') -> 'None'
Renderer.setup method(self) -> 'None'
Renderer.shadow_caster_budget property
Renderer.ssao property
Renderer.submit_billboards method(self, billboards: 'np.ndarray') -> 'None'
Renderer.submit_gpu_particles method(self, emitter_config: 'dict', *, emitter_id: 'int' = ...) -> 'None'
Renderer.submit_instance method(self, mesh_handle: 'MeshHandle', transform: 'np.ndarray', material_id: 'int' = ..., viewport_id: 'int' = ..., render_layers: 'int' = ...) -> 'None'
Renderer.submit_light2d method(self, **kwargs) -> 'None'
Renderer.submit_multimesh method(self, mesh_handle: 'MeshHandle', transforms: 'np.ndarray', material_id: 'int' = ..., material_ids: 'np.ndarray | None' = ..., viewport_id: 'int' = ..., count: 'int' = ..., cache_key: 'int' = ..., version: 'int' = ...) -> 'None'
Renderer.submit_occluder2d method(self, polygon_vertices: 'list[tuple[float, float]]') -> 'None'
Renderer.submit_particles method(self, particle_data: 'np.ndarray') -> 'None'
Renderer.submit_shader_instance method(self, mesh_handle: 'MeshHandle', transform: 'np.ndarray', material_id: 'int', shader_material: 'Any', texture_slots: 'dict[str, int] | None' = ...) -> 'None'
Renderer.submit_skinned_instance method(self, mesh_handle: 'MeshHandle', transform: 'np.ndarray', material_id: 'int', joint_matrices: 'np.ndarray') -> 'None'
Renderer.sync_render_state method(self) -> 'None'
Renderer.tilemap_layers method(self) -> 'list'
Renderer.upload_texture_pixels method(self, pixels: 'np.ndarray', width: 'int', height: 'int') -> 'int'
RendererBackend.begin_frame method(self) -> 'None'
RendererBackend.capture_frame method(self) -> 'np.ndarray'
RendererBackend.destroy method(self) -> 'None'
RendererBackend.pre_render method(self, cmd: 'Any') -> 'None'
RendererBackend.register_mesh method(self, streams: 'VertexStreams', indices: 'np.ndarray') -> 'MeshHandle'
RendererBackend.render method(self, cmd: 'Any') -> 'None'
RendererBackend.resize method(self, width: 'int', height: 'int') -> 'None'
RendererBackend.set_lights method(self, lights: 'np.ndarray') -> 'None'
RendererBackend.set_materials method(self, materials: 'np.ndarray') -> 'None'
RendererBackend.submit_instance method(self, mesh_handle: 'MeshHandle', transform: 'np.ndarray', material_id: 'int', viewport_id: 'int' = ...) -> 'None'
RendererBackend.submit_light2d method(self, **kwargs: 'Any') -> 'None'
RendererBackend.submit_multimesh method(self, mesh_handle: 'MeshHandle', transforms: 'np.ndarray', material_id: 'int' = ..., material_ids: 'np.ndarray | None' = ..., viewport_id: 'int' = ..., count: 'int' = ..., cache_key: 'int' = ..., version: 'int' = ...) -> 'None'
RendererBackend.submit_particles method(self, particle_data: 'np.ndarray') -> 'None'
RendererBackend.submit_skinned_instance method(self, mesh_handle: 'MeshHandle', transform: 'np.ndarray', material_id: 'int', joint_matrices: 'np.ndarray') -> 'None'
RendererBackend.upload_texture_pixels method(self, pixels: 'np.ndarray', width: 'int', height: 'int') -> 'int'
ShaderMaterial.cleanup method(self, device: 'Any') -> 'None'
ShaderMaterial.compile method(self, device: 'Any', shader_dir: 'Path | None' = ...) -> 'None'
ShaderMaterial.get_pipeline_key method(self) -> 'tuple'
ShaderMaterial.get_texture method(self, name: 'str') -> 'Any'
ShaderMaterial.get_uniform method(self, name: 'str') -> 'Any'
ShaderMaterial.has_source_changed method(self) -> 'bool'
ShaderMaterial.has_wgsl_escape_hatch property
ShaderMaterial.is_compiled property
ShaderMaterial.material_bindings method(self) -> 'MaterialBindings'
ShaderMaterial.resolve_wgsl method(self, base_dir: 'Path | None' = ...) -> 'tuple[str | None, str | None]'
ShaderMaterial.set_texture method(self, name: 'str', source: 'Any', *, colour_space: 'str' = ...) -> 'None'
ShaderMaterial.set_uniform method(self, name: 'str', value: 'Any') -> 'None'
ShaderMaterial.set_uniform_typed method(self, name: 'str', value: 'Any', utype: 'str') -> 'None'
ShaderMaterial.texture_colour_space method(self, name: 'str') -> 'str'
ShaderMaterial.textures property
ShaderMaterial.uniforms property
ShaderMaterialManager.check_hot_reload method(self, device: 'Any', physical_device: 'Any', render_pass: 'Any', extent: 'tuple[int, int]', shader_dir: 'Path | None' = ...) -> 'list[ShaderMaterial]'
ShaderMaterialManager.cleanup method(self, device: 'Any') -> 'None'
ShaderMaterialManager.draw method(self, cmd: 'Any', submissions: 'list', device: 'Any', physical_device: 'Any', render_pass: 'Any', extent: 'tuple[int, int]', view: 'np.ndarray', proj: 'np.ndarray', registry: 'Any', shader_dir: 'Path | None' = ..., frame_globals_buf: 'Any' = ..., gbuffer: 'bool' = ..., engine: 'Any' = ...) -> 'None'
ShaderMaterialManager.get_or_create_pipeline method(self, material: 'ShaderMaterial', device: 'Any', physical_device: 'Any', render_pass: 'Any', extent: 'tuple[int, int]', shader_dir: 'Path | None' = ...) -> 'tuple[Any, Any]'
ShaderMaterialManager.get_uniform_buffer method(self, material: 'ShaderMaterial') -> 'UniformBuffer | None'
ShaderMaterialManager.register_material method(self, material: 'ShaderMaterial') -> 'None'
ShaderMaterialManager.update_textures method(self, material: 'ShaderMaterial', device: 'Any', texture_slots: 'dict[str, int]', engine: 'Any') -> 'None'
ShaderMaterialManager.update_uniforms method(self, material: 'ShaderMaterial', device: 'Any') -> 'None'
UniformBuffer.bind_sampler method(self, device: 'Any', binding: 'int', sampler: 'Any') -> 'None'
UniformBuffer.bind_texture method(self, device: 'Any', binding: 'int', image_view: 'Any') -> 'None'
UniformBuffer.cleanup method(self, device: 'Any') -> 'None'
UniformBuffer.create method(self, device: 'Any', physical_device: 'Any', bindings: 'MaterialBindings | None' = ...) -> 'None'
UniformBuffer.get_descriptor_layout method(self) -> 'Any'
UniformBuffer.get_descriptor_set method(self) -> 'Any'
UniformBuffer.is_created property
UniformBuffer.update method(self, device: 'Any', uniform_data: 'dict[str, Any]', uniform_types: 'dict[str, str]') -> 'None'

[properties]
