Trait gfx_core::factory::Factory [] [src]

pub trait Factory<R: Resources> {
    type Mapper: Clone + Raw;
    fn get_capabilities(&self) -> &Capabilities;
    fn create_buffer_raw(&mut self, BufferInfo) -> Result<RawBuffer<R>, BufferError>;
    fn create_buffer_const_raw(&mut self, data: &[u8], stride: usize, BufferRole, Bind) -> Result<RawBuffer<R>, BufferError>;
    fn create_pipeline_state_raw(&mut self, &Program<R>, &Descriptor) -> Result<RawPipelineState<R>, CreationError>;
    fn create_program(&mut self, shader_set: &ShaderSet<R>) -> Result<Program<R>, CreateProgramError>;
    fn create_shader(&mut self, stage: Stage, code: &[u8]) -> Result<Shader<R>, CreateShaderError>;
    fn create_sampler(&mut self, SamplerInfo) -> Sampler<R>;
    fn map_buffer_raw(&mut self, &RawBuffer<R>, MapAccess) -> Self::Mapper;
    fn unmap_buffer_raw(&mut self, Self::Mapper);
    fn map_buffer_readable<T: Copy>(&mut self, &Buffer<R, T>) -> Readable<T, R, Self> where Self: Sized;
    fn map_buffer_writable<T: Copy>(&mut self, &Buffer<R, T>) -> Writable<T, R, Self> where Self: Sized;
    fn map_buffer_rw<T: Copy>(&mut self, &Buffer<R, T>) -> RW<T, R, Self> where Self: Sized;
    fn create_texture_raw(&mut self, Descriptor, Option<ChannelType>, Option<&[&[u8]]>) -> Result<RawTexture<R>, Error>;
    fn view_buffer_as_shader_resource_raw(&mut self, &RawBuffer<R>) -> Result<RawShaderResourceView<R>, ResourceViewError>;
    fn view_buffer_as_unordered_access_raw(&mut self, &RawBuffer<R>) -> Result<RawUnorderedAccessView<R>, ResourceViewError>;
    fn view_texture_as_shader_resource_raw(&mut self, &RawTexture<R>, ResourceDesc) -> Result<RawShaderResourceView<R>, ResourceViewError>;
    fn view_texture_as_unordered_access_raw(&mut self, &RawTexture<R>) -> Result<RawUnorderedAccessView<R>, ResourceViewError>;
    fn view_texture_as_render_target_raw(&mut self, &RawTexture<R>, RenderDesc) -> Result<RawRenderTargetView<R>, TargetViewError>;
    fn view_texture_as_depth_stencil_raw(&mut self, &RawTexture<R>, DepthStencilDesc) -> Result<RawDepthStencilView<R>, TargetViewError>;

    fn create_buffer_const<T: Copy>(&mut self, data: &[T], role: BufferRole, bind: Bind) -> Result<Buffer<R, T>, BufferError> { ... }
    fn create_buffer_dynamic<T>(&mut self, num: usize, role: BufferRole, bind: Bind) -> Result<Buffer<R, T>, BufferError> { ... }
    fn create_buffer_staging<T>(&mut self, num: usize, role: BufferRole, bind: Bind, map: MapAccess) -> Result<Buffer<R, T>, BufferError> { ... }
    fn create_shader_vertex(&mut self, code: &[u8]) -> Result<VertexShader<R>, CreateShaderError> { ... }
    fn create_shader_geometry(&mut self, code: &[u8]) -> Result<GeometryShader<R>, CreateShaderError> { ... }
    fn create_shader_pixel(&mut self, code: &[u8]) -> Result<PixelShader<R>, CreateShaderError> { ... }
    fn create_texture<S>(&mut self, kind: Kind, levels: Level, bind: Bind, usage: Usage, channel_hint: Option<ChannelType>) -> Result<Texture<R, S>, Error> where S: SurfaceTyped { ... }
    fn view_buffer_as_shader_resource<T>(&mut self, buf: &Buffer<R, T>) -> Result<ShaderResourceView<R, T>, ResourceViewError> { ... }
    fn view_buffer_as_unordered_access<T>(&mut self, buf: &Buffer<R, T>) -> Result<UnorderedAccessView<R, T>, ResourceViewError> { ... }
    fn view_texture_as_shader_resource<T: TextureFormat>(&mut self, tex: &Texture<R, T::Surface>, levels: (Level, Level), swizzle: Swizzle) -> Result<ShaderResourceView<R, T::View>, ResourceViewError> { ... }
    fn view_texture_as_unordered_access<T: TextureFormat>(&mut self, tex: &Texture<R, T::Surface>) -> Result<UnorderedAccessView<R, T::View>, ResourceViewError> { ... }
    fn view_texture_as_render_target<T: RenderFormat>(&mut self, tex: &Texture<R, T::Surface>, level: Level, layer: Option<Layer>) -> Result<RenderTargetView<R, T>, TargetViewError> { ... }
    fn view_texture_as_depth_stencil<T: DepthFormat>(&mut self, tex: &Texture<R, T::Surface>, level: Level, layer: Option<Layer>, flags: DepthStencilFlags) -> Result<DepthStencilView<R, T>, TargetViewError> { ... }
    fn view_texture_as_depth_stencil_trivial<T: DepthFormat>(&mut self, tex: &Texture<R, T::Surface>) -> Result<DepthStencilView<R, T>, TargetViewError> { ... }
    fn create_texture_const_u8<T: TextureFormat>(&mut self, kind: Kind, data: &[&[u8]]) -> Result<(Texture<R, T::Surface>, ShaderResourceView<R, T::View>)CombinedError> { ... }
    fn create_texture_const<T: TextureFormat>(&mut self, kind: Kind, data: &[&[T::Surface::DataType]]) -> Result<(Texture<R, T::Surface>, ShaderResourceView<R, T::View>)CombinedError> { ... }
    fn create_render_target<T: RenderFormat + TextureFormat>(&mut self, width: Size, height: Size) -> Result<(Texture<R, T::Surface>, ShaderResourceView<R, T::View>, RenderTargetView<R, T>)CombinedError> { ... }
    fn create_depth_stencil<T: DepthFormat + TextureFormat>(&mut self, width: Size, height: Size) -> Result<(Texture<R, T::Surface>, ShaderResourceView<R, T::View>, DepthStencilView<R, T>)CombinedError> { ... }
    fn create_depth_stencil_view_only<T: DepthFormat + TextureFormat>(&mut self, width: Size, height: Size) -> Result<DepthStencilView<R, T>, CombinedError> { ... }
}

A Factory is responsible for creating and managing resources for the context it was created with.

Construction and Handling

A Factory is created by using the appropriate functions of the desired graphics backend. An example using the OpenGL backend and Glutin.

extern crate gfx;
extern crate gfx_device_gl;
extern crate gfx_window_glutin;
extern crate glutin;

use gfx::format::{DepthStencil, Rgba8};

let builder = glutin::WindowBuilder::new().with_title("Factory Construction".to_string());
let (window, device, factory, rtv, stv) =
    gfx_window_glutin::init::<Rgba8, DepthStencil>(builder);

This factory structure can then be used to create and manage different resources, like buffers, shader programs and textures. See the individual methods for more information.

Also see FactoryExt inside the gfx trait for additional methods.

Associated Types

type Mapper: Clone + Raw

Associated mapper type

Required Methods

fn get_capabilities(&self) -> &Capabilities

Returns the capabilities of this Factory. This usually depends on the graphics API being used.

fn create_buffer_raw(&mut self, BufferInfo) -> Result<RawBuffer<R>, BufferError>

fn create_buffer_const_raw(&mut self, data: &[u8], stride: usize, BufferRole, Bind) -> Result<RawBuffer<R>, BufferError>

fn create_pipeline_state_raw(&mut self, &Program<R>, &Descriptor) -> Result<RawPipelineState<R>, CreationError>

Creates a new RawPipelineState. To create a safely typed PipelineState, see the FactoryExt trait and pso module, both in the gfx crate.

fn create_program(&mut self, shader_set: &ShaderSet<R>) -> Result<Program<R>, CreateProgramError>

Creates a new shader Program for the supplied ShaderSet.

fn create_shader(&mut self, stage: Stage, code: &[u8]) -> Result<Shader<R>, CreateShaderError>

Compiles a shader source into a Shader object that can be used to create a shader Program.

fn create_sampler(&mut self, SamplerInfo) -> Sampler<R>

fn map_buffer_raw(&mut self, &RawBuffer<R>, MapAccess) -> Self::Mapper

fn unmap_buffer_raw(&mut self, Self::Mapper)

fn map_buffer_readable<T: Copy>(&mut self, &Buffer<R, T>) -> Readable<T, R, Self> where Self: Sized

fn map_buffer_writable<T: Copy>(&mut self, &Buffer<R, T>) -> Writable<T, R, Self> where Self: Sized

fn map_buffer_rw<T: Copy>(&mut self, &Buffer<R, T>) -> RW<T, R, Self> where Self: Sized

fn create_texture_raw(&mut self, Descriptor, Option<ChannelType>, Option<&[&[u8]]>) -> Result<RawTexture<R>, Error>

Create a new empty raw texture with no data. The channel type parameter is a hint, required to assist backends that have no concept of typeless formats (OpenGL). The initial data, if given, has to be provided for all mip levels and slices: Slice0.Mip0, Slice0.Mip1, ..., Slice1.Mip0, ...

fn view_buffer_as_shader_resource_raw(&mut self, &RawBuffer<R>) -> Result<RawShaderResourceView<R>, ResourceViewError>

fn view_buffer_as_unordered_access_raw(&mut self, &RawBuffer<R>) -> Result<RawUnorderedAccessView<R>, ResourceViewError>

fn view_texture_as_shader_resource_raw(&mut self, &RawTexture<R>, ResourceDesc) -> Result<RawShaderResourceView<R>, ResourceViewError>

fn view_texture_as_unordered_access_raw(&mut self, &RawTexture<R>) -> Result<RawUnorderedAccessView<R>, ResourceViewError>

fn view_texture_as_render_target_raw(&mut self, &RawTexture<R>, RenderDesc) -> Result<RawRenderTargetView<R>, TargetViewError>

fn view_texture_as_depth_stencil_raw(&mut self, &RawTexture<R>, DepthStencilDesc) -> Result<RawDepthStencilView<R>, TargetViewError>

Provided Methods

fn create_buffer_const<T: Copy>(&mut self, data: &[T], role: BufferRole, bind: Bind) -> Result<Buffer<R, T>, BufferError>

fn create_buffer_dynamic<T>(&mut self, num: usize, role: BufferRole, bind: Bind) -> Result<Buffer<R, T>, BufferError>

fn create_buffer_staging<T>(&mut self, num: usize, role: BufferRole, bind: Bind, map: MapAccess) -> Result<Buffer<R, T>, BufferError>

fn create_shader_vertex(&mut self, code: &[u8]) -> Result<VertexShader<R>, CreateShaderError>

Compiles a VertexShader from source.

fn create_shader_geometry(&mut self, code: &[u8]) -> Result<GeometryShader<R>, CreateShaderError>

Compiles a GeometryShader from source.

fn create_shader_pixel(&mut self, code: &[u8]) -> Result<PixelShader<R>, CreateShaderError>

Compiles a PixelShader from source. This is the same as what some APIs call a fragment shader.

fn create_texture<S>(&mut self, kind: Kind, levels: Level, bind: Bind, usage: Usage, channel_hint: Option<ChannelType>) -> Result<Texture<R, S>, Error> where S: SurfaceTyped

fn view_buffer_as_shader_resource<T>(&mut self, buf: &Buffer<R, T>) -> Result<ShaderResourceView<R, T>, ResourceViewError>

fn view_buffer_as_unordered_access<T>(&mut self, buf: &Buffer<R, T>) -> Result<UnorderedAccessView<R, T>, ResourceViewError>

fn view_texture_as_shader_resource<T: TextureFormat>(&mut self, tex: &Texture<R, T::Surface>, levels: (Level, Level), swizzle: Swizzle) -> Result<ShaderResourceView<R, T::View>, ResourceViewError>

fn view_texture_as_unordered_access<T: TextureFormat>(&mut self, tex: &Texture<R, T::Surface>) -> Result<UnorderedAccessView<R, T::View>, ResourceViewError>

fn view_texture_as_render_target<T: RenderFormat>(&mut self, tex: &Texture<R, T::Surface>, level: Level, layer: Option<Layer>) -> Result<RenderTargetView<R, T>, TargetViewError>

fn view_texture_as_depth_stencil<T: DepthFormat>(&mut self, tex: &Texture<R, T::Surface>, level: Level, layer: Option<Layer>, flags: DepthStencilFlags) -> Result<DepthStencilView<R, T>, TargetViewError>

fn view_texture_as_depth_stencil_trivial<T: DepthFormat>(&mut self, tex: &Texture<R, T::Surface>) -> Result<DepthStencilView<R, T>, TargetViewError>

fn create_texture_const_u8<T: TextureFormat>(&mut self, kind: Kind, data: &[&[u8]]) -> Result<(Texture<R, T::Surface>, ShaderResourceView<R, T::View>)CombinedError>

fn create_texture_const<T: TextureFormat>(&mut self, kind: Kind, data: &[&[T::Surface::DataType]]) -> Result<(Texture<R, T::Surface>, ShaderResourceView<R, T::View>)CombinedError>

fn create_render_target<T: RenderFormat + TextureFormat>(&mut self, width: Size, height: Size) -> Result<(Texture<R, T::Surface>, ShaderResourceView<R, T::View>, RenderTargetView<R, T>)CombinedError>

fn create_depth_stencil<T: DepthFormat + TextureFormat>(&mut self, width: Size, height: Size) -> Result<(Texture<R, T::Surface>, ShaderResourceView<R, T::View>, DepthStencilView<R, T>)CombinedError>

fn create_depth_stencil_view_only<T: DepthFormat + TextureFormat>(&mut self, width: Size, height: Size) -> Result<DepthStencilView<R, T>, CombinedError>

Implementors