pub trait Device: Sized {
type Buffer;
type Framebuffer;
type Program;
type Shader;
type Texture;
type TextureDataReceiver;
type TimerQuery;
type Uniform;
type VertexArray;
type VertexAttr;
Show 35 methods
// Required methods
fn create_texture(
&self,
format: TextureFormat,
size: Vector2I,
) -> Self::Texture;
fn create_texture_from_data(
&self,
format: TextureFormat,
size: Vector2I,
data: TextureDataRef<'_>,
) -> Self::Texture;
fn create_shader(
&self,
resources: &dyn ResourceLoader,
name: &str,
kind: ShaderKind,
) -> Self::Shader;
fn create_shader_from_source(
&self,
name: &str,
source: &[u8],
kind: ShaderKind,
) -> Self::Shader;
fn create_vertex_array(&self) -> Self::VertexArray;
fn create_program_from_shaders(
&self,
resources: &dyn ResourceLoader,
name: &str,
vertex_shader: Self::Shader,
fragment_shader: Self::Shader,
) -> Self::Program;
fn get_vertex_attr(
&self,
program: &Self::Program,
name: &str,
) -> Option<Self::VertexAttr>;
fn get_uniform(&self, program: &Self::Program, name: &str) -> Self::Uniform;
fn bind_buffer(
&self,
vertex_array: &Self::VertexArray,
buffer: &Self::Buffer,
target: BufferTarget,
);
fn configure_vertex_attr(
&self,
vertex_array: &Self::VertexArray,
attr: &Self::VertexAttr,
descriptor: &VertexAttrDescriptor,
);
fn create_framebuffer(&self, texture: Self::Texture) -> Self::Framebuffer;
fn create_buffer(&self) -> Self::Buffer;
fn allocate_buffer<T>(
&self,
buffer: &Self::Buffer,
data: BufferData<'_, T>,
target: BufferTarget,
mode: BufferUploadMode,
);
fn framebuffer_texture<'f>(
&self,
framebuffer: &'f Self::Framebuffer,
) -> &'f Self::Texture;
fn destroy_framebuffer(
&self,
framebuffer: Self::Framebuffer,
) -> Self::Texture;
fn texture_format(&self, texture: &Self::Texture) -> TextureFormat;
fn texture_size(&self, texture: &Self::Texture) -> Vector2I;
fn set_texture_sampling_mode(
&self,
texture: &Self::Texture,
flags: TextureSamplingFlags,
);
fn upload_to_texture(
&self,
texture: &Self::Texture,
rect: RectI,
data: TextureDataRef<'_>,
);
fn read_pixels(
&self,
target: &RenderTarget<'_, Self>,
viewport: RectI,
) -> Self::TextureDataReceiver;
fn begin_commands(&self);
fn end_commands(&self);
fn draw_arrays(
&self,
index_count: u32,
render_state: &RenderState<'_, Self>,
);
fn draw_elements(
&self,
index_count: u32,
render_state: &RenderState<'_, Self>,
);
fn draw_elements_instanced(
&self,
index_count: u32,
instance_count: u32,
render_state: &RenderState<'_, Self>,
);
fn create_timer_query(&self) -> Self::TimerQuery;
fn begin_timer_query(&self, query: &Self::TimerQuery);
fn end_timer_query(&self, query: &Self::TimerQuery);
fn try_recv_timer_query(&self, query: &Self::TimerQuery) -> Option<Duration>;
fn recv_timer_query(&self, query: &Self::TimerQuery) -> Duration;
fn try_recv_texture_data(
&self,
receiver: &Self::TextureDataReceiver,
) -> Option<TextureData>;
fn recv_texture_data(
&self,
receiver: &Self::TextureDataReceiver,
) -> TextureData;
// Provided methods
fn create_texture_from_png(
&self,
resources: &dyn ResourceLoader,
name: &str,
) -> Self::Texture { ... }
fn create_program_from_shader_names(
&self,
resources: &dyn ResourceLoader,
program_name: &str,
vertex_shader_name: &str,
fragment_shader_name: &str,
) -> Self::Program { ... }
fn create_program(
&self,
resources: &dyn ResourceLoader,
name: &str,
) -> Self::Program { ... }
}
Required Associated Types§
type Buffer
type Framebuffer
type Program
type Shader
type Texture
type TextureDataReceiver
type TimerQuery
type Uniform
type VertexArray
type VertexAttr
Required Methods§
fn create_texture(&self, format: TextureFormat, size: Vector2I) -> Self::Texture
fn create_texture_from_data( &self, format: TextureFormat, size: Vector2I, data: TextureDataRef<'_>, ) -> Self::Texture
fn create_shader( &self, resources: &dyn ResourceLoader, name: &str, kind: ShaderKind, ) -> Self::Shader
fn create_shader_from_source( &self, name: &str, source: &[u8], kind: ShaderKind, ) -> Self::Shader
fn create_vertex_array(&self) -> Self::VertexArray
fn create_program_from_shaders( &self, resources: &dyn ResourceLoader, name: &str, vertex_shader: Self::Shader, fragment_shader: Self::Shader, ) -> Self::Program
fn get_vertex_attr( &self, program: &Self::Program, name: &str, ) -> Option<Self::VertexAttr>
fn get_uniform(&self, program: &Self::Program, name: &str) -> Self::Uniform
fn bind_buffer( &self, vertex_array: &Self::VertexArray, buffer: &Self::Buffer, target: BufferTarget, )
fn configure_vertex_attr( &self, vertex_array: &Self::VertexArray, attr: &Self::VertexAttr, descriptor: &VertexAttrDescriptor, )
fn create_framebuffer(&self, texture: Self::Texture) -> Self::Framebuffer
fn create_buffer(&self) -> Self::Buffer
fn allocate_buffer<T>( &self, buffer: &Self::Buffer, data: BufferData<'_, T>, target: BufferTarget, mode: BufferUploadMode, )
fn framebuffer_texture<'f>( &self, framebuffer: &'f Self::Framebuffer, ) -> &'f Self::Texture
fn destroy_framebuffer(&self, framebuffer: Self::Framebuffer) -> Self::Texture
fn texture_format(&self, texture: &Self::Texture) -> TextureFormat
fn texture_size(&self, texture: &Self::Texture) -> Vector2I
fn set_texture_sampling_mode( &self, texture: &Self::Texture, flags: TextureSamplingFlags, )
fn upload_to_texture( &self, texture: &Self::Texture, rect: RectI, data: TextureDataRef<'_>, )
fn read_pixels( &self, target: &RenderTarget<'_, Self>, viewport: RectI, ) -> Self::TextureDataReceiver
fn begin_commands(&self)
fn end_commands(&self)
fn draw_arrays(&self, index_count: u32, render_state: &RenderState<'_, Self>)
fn draw_elements(&self, index_count: u32, render_state: &RenderState<'_, Self>)
fn draw_elements_instanced( &self, index_count: u32, instance_count: u32, render_state: &RenderState<'_, Self>, )
fn create_timer_query(&self) -> Self::TimerQuery
fn begin_timer_query(&self, query: &Self::TimerQuery)
fn end_timer_query(&self, query: &Self::TimerQuery)
fn try_recv_timer_query(&self, query: &Self::TimerQuery) -> Option<Duration>
fn recv_timer_query(&self, query: &Self::TimerQuery) -> Duration
fn try_recv_texture_data( &self, receiver: &Self::TextureDataReceiver, ) -> Option<TextureData>
fn recv_texture_data(&self, receiver: &Self::TextureDataReceiver) -> TextureData
Provided Methods§
fn create_texture_from_png( &self, resources: &dyn ResourceLoader, name: &str, ) -> Self::Texture
fn create_program_from_shader_names( &self, resources: &dyn ResourceLoader, program_name: &str, vertex_shader_name: &str, fragment_shader_name: &str, ) -> Self::Program
fn create_program( &self, resources: &dyn ResourceLoader, name: &str, ) -> Self::Program
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.