Up to date
This page is up to date for Godot 4.2
.
If you still find outdated information, please open an issue.
RenderingDevice¶
Inherits: Object
Abstraction for working with modern low-level graphics APIs.
Description¶
RenderingDevice is an abstraction for working with modern low-level graphics APIs such as Vulkan. Compared to RenderingServer (which works with Godot's own rendering subsystems), RenderingDevice is much lower-level and allows working more directly with the underlying graphics APIs. RenderingDevice is used in Godot to provide support for several modern low-level graphics APIs while reducing the amount of code duplication required. RenderingDevice can also be used in your own projects to perform things that are not exposed by RenderingServer or high-level nodes, such as using compute shaders.
On startup, Godot creates a global RenderingDevice which can be retrieved using RenderingServer.get_rendering_device. This global RenderingDevice performs drawing to the screen.
Local RenderingDevices: Using RenderingServer.create_local_rendering_device, you can create "secondary" rendering devices to perform drawing and GPU compute operations on separate threads.
Note: RenderingDevice assumes intermediate knowledge of modern graphics APIs such as Vulkan, Direct3D 12, Metal or WebGPU. These graphics APIs are lower-level than OpenGL or Direct3D 11, requiring you to perform what was previously done by the graphics driver itself. If you have difficulty understanding the concepts used in this class, follow the Vulkan Tutorial or Vulkan Guide. It's recommended to have existing modern OpenGL or Direct3D 11 knowledge before attempting to learn a low-level graphics API.
Note: RenderingDevice is not available when running in headless mode or when using the Compatibility rendering method.
Tutorials¶
Methods¶
void |
barrier ( BitField<BarrierMask> from=32767, BitField<BarrierMask> to=32767 ) |
buffer_clear ( RID buffer, int offset, int size_bytes, BitField<BarrierMask> post_barrier=32767 ) |
|
buffer_get_data ( RID buffer, int offset_bytes=0, int size_bytes=0 ) |
|
buffer_update ( RID buffer, int offset, int size_bytes, PackedByteArray data, BitField<BarrierMask> post_barrier=32767 ) |
|
void |
capture_timestamp ( String name ) |
void |
compute_list_add_barrier ( int compute_list ) |
compute_list_begin ( bool allow_draw_overlap=false ) |
|
void |
compute_list_bind_compute_pipeline ( int compute_list, RID compute_pipeline ) |
void |
compute_list_bind_uniform_set ( int compute_list, RID uniform_set, int set_index ) |
void |
compute_list_dispatch ( int compute_list, int x_groups, int y_groups, int z_groups ) |
void |
compute_list_end ( BitField<BarrierMask> post_barrier=32767 ) |
void |
compute_list_set_push_constant ( int compute_list, PackedByteArray buffer, int size_bytes ) |
compute_pipeline_create ( RID shader, RDPipelineSpecializationConstant[] specialization_constants=[] ) |
|
compute_pipeline_is_valid ( RID compute_pipeline ) |
|
void |
draw_command_begin_label ( String name, Color color ) |
void |
|
void |
draw_command_insert_label ( String name, Color color ) |
draw_list_begin ( RID framebuffer, InitialAction initial_color_action, FinalAction final_color_action, InitialAction initial_depth_action, FinalAction final_depth_action, PackedColorArray clear_color_values=PackedColorArray(), float clear_depth=1.0, int clear_stencil=0, Rect2 region=Rect2(0, 0, 0, 0), RID[] storage_textures=[] ) |
|
draw_list_begin_for_screen ( int screen=0, Color clear_color=Color(0, 0, 0, 1) ) |
|
draw_list_begin_split ( RID framebuffer, int splits, InitialAction initial_color_action, FinalAction final_color_action, InitialAction initial_depth_action, FinalAction final_depth_action, PackedColorArray clear_color_values=PackedColorArray(), float clear_depth=1.0, int clear_stencil=0, Rect2 region=Rect2(0, 0, 0, 0), RID[] storage_textures=[] ) |
|
void |
draw_list_bind_index_array ( int draw_list, RID index_array ) |
void |
draw_list_bind_render_pipeline ( int draw_list, RID render_pipeline ) |
void |
draw_list_bind_uniform_set ( int draw_list, RID uniform_set, int set_index ) |
void |
draw_list_bind_vertex_array ( int draw_list, RID vertex_array ) |
void |
draw_list_disable_scissor ( int draw_list ) |
void |
draw_list_draw ( int draw_list, bool use_indices, int instances, int procedural_vertex_count=0 ) |
void |
draw_list_enable_scissor ( int draw_list, Rect2 rect=Rect2(0, 0, 0, 0) ) |
void |
draw_list_end ( BitField<BarrierMask> post_barrier=32767 ) |
void |
draw_list_set_blend_constants ( int draw_list, Color color ) |
void |
draw_list_set_push_constant ( int draw_list, PackedByteArray buffer, int size_bytes ) |
draw_list_switch_to_next_pass_split ( int splits ) |
|
framebuffer_create ( RID[] textures, int validate_with_format=-1, int view_count=1 ) |
|
framebuffer_create_empty ( Vector2i size, TextureSamples samples=0, int validate_with_format=-1 ) |
|
framebuffer_create_multipass ( RID[] textures, RDFramebufferPass[] passes, int validate_with_format=-1, int view_count=1 ) |
|
framebuffer_format_create ( RDAttachmentFormat[] attachments, int view_count=1 ) |
|
framebuffer_format_create_empty ( TextureSamples samples=0 ) |
|
framebuffer_format_create_multipass ( RDAttachmentFormat[] attachments, RDFramebufferPass[] passes, int view_count=1 ) |
|
framebuffer_format_get_texture_samples ( int format, int render_pass=0 ) |
|