mirror of
https://github.com/guilhermewerner/wgpu-renderer
synced 2025-06-15 13:24:20 +00:00
191 lines
6.7 KiB
Rust
191 lines
6.7 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
|
|
#[repr(C)]
|
|
#[derive(Copy, Clone, Debug, Hash, Eq, PartialEq, Serialize, Deserialize)]
|
|
pub enum VertexFormat {
|
|
/// Two unsigned bytes (u8). `uvec2` in shaders.
|
|
UInt8x2 = 0,
|
|
|
|
/// Four unsigned bytes (u8). `uvec4` in shaders.
|
|
UInt8x4 = 1,
|
|
|
|
/// Two signed bytes (i8). `ivec2` in shaders.
|
|
Int8x2 = 2,
|
|
|
|
/// Four signed bytes (i8). `ivec4` in shaders.
|
|
Int8x4 = 3,
|
|
|
|
/// Two unsigned bytes (u8). [0, 255] converted to float [0, 1] `vec2` in shaders.
|
|
UNorm8x2 = 4,
|
|
|
|
/// Four unsigned bytes (u8). [0, 255] converted to float [0, 1] `vec4` in shaders.
|
|
UNorm8x4 = 5,
|
|
|
|
/// Two signed bytes (i8). [-127, 127] converted to float [-1, 1] `vec2` in shaders.
|
|
Norm8x2 = 6,
|
|
|
|
/// Four signed bytes (i8). [-127, 127] converted to float [-1, 1] `vec4` in shaders.
|
|
Norm8x4 = 7,
|
|
|
|
/// Two unsigned shorts (u16). `uvec2` in shaders.
|
|
UInt16x2 = 8,
|
|
|
|
/// Four unsigned shorts (u16). `uvec4` in shaders.
|
|
UInt16x4 = 9,
|
|
|
|
/// Two signed shorts (i16). `ivec2` in shaders.
|
|
Int16x2 = 10,
|
|
|
|
/// Four signed shorts (i16). `ivec4` in shaders.
|
|
Int16x4 = 11,
|
|
|
|
/// Two unsigned shorts (u16). [0, 65535] converted to float [0, 1] `vec2` in shaders.
|
|
UNorm16x2 = 12,
|
|
|
|
/// Four unsigned shorts (u16). [0, 65535] converted to float [0, 1] `vec4` in shaders.
|
|
UNorm16x4 = 13,
|
|
|
|
/// Two signed shorts (i16). [-32767, 32767] converted to float [-1, 1] `vec2` in shaders.
|
|
Norm16x2 = 14,
|
|
|
|
/// Four signed shorts (i16). [-32767, 32767] converted to float [-1, 1] `vec4` in shaders.
|
|
Norm16x4 = 15,
|
|
|
|
/// Two half-precision floats (no Rust equiv). `vec2` in shaders.
|
|
Float16x2 = 16,
|
|
|
|
/// Four half-precision floats (no Rust equiv). `vec4` in shaders.
|
|
Float16x4 = 17,
|
|
|
|
/// One single-precision float (f32). `float` in shaders.
|
|
Float32 = 18,
|
|
|
|
/// Two single-precision floats (f32). `vec2` in shaders.
|
|
Float32x2 = 19,
|
|
|
|
/// Three single-precision floats (f32). `vec3` in shaders.
|
|
Float32x3 = 20,
|
|
|
|
/// Four single-precision floats (f32). `vec4` in shaders.
|
|
Float32x4 = 21,
|
|
|
|
/// One unsigned int (u32). `uint` in shaders.
|
|
UInt32 = 22,
|
|
|
|
/// Two unsigned ints (u32). `uvec2` in shaders.
|
|
UInt32x2 = 23,
|
|
|
|
/// Three unsigned ints (u32). `uvec3` in shaders.
|
|
UInt32x3 = 24,
|
|
|
|
/// Four unsigned ints (u32). `uvec4` in shaders.
|
|
UInt32x4 = 25,
|
|
|
|
/// One signed int (i32). `int` in shaders.
|
|
Int32 = 26,
|
|
|
|
/// Two signed ints (i32). `ivec2` in shaders.
|
|
Int32x2 = 27,
|
|
|
|
/// Three signed ints (i32). `ivec3` in shaders.
|
|
Int32x3 = 28,
|
|
|
|
/// Four signed ints (i32). `ivec4` in shaders.
|
|
Int32x4 = 29,
|
|
|
|
/// One double-precision float (f64). `double` in shaders.
|
|
Float64 = 30,
|
|
|
|
/// Two double-precision floats (f64). `dvec2` in shaders.
|
|
Float64x2 = 31,
|
|
|
|
/// Three double-precision floats (f64). `dvec3` in shaders.
|
|
Float64x3 = 32,
|
|
|
|
/// Four double-precision floats (f64). `dvec4` in shaders.
|
|
Float64x4 = 33,
|
|
}
|
|
|
|
impl VertexFormat {
|
|
/// Returns the size in bytes of this format.
|
|
pub const fn GetSize(&self) -> u64 {
|
|
match *self {
|
|
Self::UInt8x2 => 2,
|
|
Self::UInt8x4 => 4,
|
|
Self::Int8x2 => 2,
|
|
Self::Int8x4 => 4,
|
|
Self::UNorm8x2 => 2,
|
|
Self::UNorm8x4 => 4,
|
|
Self::Norm8x2 => 2,
|
|
Self::Norm8x4 => 4,
|
|
Self::UInt16x2 => 2 * 2,
|
|
Self::UInt16x4 => 4 * 4,
|
|
Self::Int16x2 => 2 * 2,
|
|
Self::Int16x4 => 2 * 4,
|
|
Self::UNorm16x2 => 2 * 2,
|
|
Self::UNorm16x4 => 2 * 4,
|
|
Self::Norm16x2 => 2 * 2,
|
|
Self::Norm16x4 => 2 * 4,
|
|
Self::Float16x2 => 2 * 2,
|
|
Self::Float16x4 => 2 * 4,
|
|
Self::Float32 => 4,
|
|
Self::Float32x2 => 4 * 2,
|
|
Self::Float32x3 => 4 * 3,
|
|
Self::Float32x4 => 4 * 4,
|
|
Self::UInt32 => 4,
|
|
Self::UInt32x2 => 4 * 2,
|
|
Self::UInt32x3 => 4 * 3,
|
|
Self::UInt32x4 => 4 * 4,
|
|
Self::Int32 => 4,
|
|
Self::Int32x2 => 4 * 2,
|
|
Self::Int32x3 => 4 * 3,
|
|
Self::Int32x4 => 4 * 4,
|
|
Self::Float64 => 8,
|
|
Self::Float64x2 => 8 * 2,
|
|
Self::Float64x3 => 8 * 3,
|
|
Self::Float64x4 => 8 * 4,
|
|
}
|
|
}
|
|
}
|
|
|
|
impl From<VertexFormat> for wgpu::VertexFormat {
|
|
fn from(format: VertexFormat) -> Self {
|
|
match format {
|
|
VertexFormat::UInt8x2 => wgpu::VertexFormat::Uint8x2,
|
|
VertexFormat::UInt8x4 => wgpu::VertexFormat::Uint8x4,
|
|
VertexFormat::Int8x2 => wgpu::VertexFormat::Sint8x2,
|
|
VertexFormat::Int8x4 => wgpu::VertexFormat::Sint8x4,
|
|
VertexFormat::UNorm8x2 => wgpu::VertexFormat::Unorm8x2,
|
|
VertexFormat::UNorm8x4 => wgpu::VertexFormat::Unorm8x4,
|
|
VertexFormat::Norm8x2 => wgpu::VertexFormat::Snorm8x2,
|
|
VertexFormat::Norm8x4 => wgpu::VertexFormat::Snorm8x4,
|
|
VertexFormat::UInt16x2 => wgpu::VertexFormat::Uint16x2,
|
|
VertexFormat::UInt16x4 => wgpu::VertexFormat::Uint16x4,
|
|
VertexFormat::Int16x2 => wgpu::VertexFormat::Sint16x2,
|
|
VertexFormat::Int16x4 => wgpu::VertexFormat::Sint16x4,
|
|
VertexFormat::UNorm16x2 => wgpu::VertexFormat::Unorm16x2,
|
|
VertexFormat::UNorm16x4 => wgpu::VertexFormat::Unorm16x4,
|
|
VertexFormat::Norm16x2 => wgpu::VertexFormat::Snorm16x2,
|
|
VertexFormat::Norm16x4 => wgpu::VertexFormat::Snorm16x4,
|
|
VertexFormat::Float16x2 => wgpu::VertexFormat::Float16x2,
|
|
VertexFormat::Float16x4 => wgpu::VertexFormat::Float16x4,
|
|
VertexFormat::Float32 => wgpu::VertexFormat::Float32,
|
|
VertexFormat::Float32x2 => wgpu::VertexFormat::Float32x2,
|
|
VertexFormat::Float32x3 => wgpu::VertexFormat::Float32x3,
|
|
VertexFormat::Float32x4 => wgpu::VertexFormat::Float32x4,
|
|
VertexFormat::UInt32 => wgpu::VertexFormat::Uint32,
|
|
VertexFormat::UInt32x2 => wgpu::VertexFormat::Uint32x2,
|
|
VertexFormat::UInt32x3 => wgpu::VertexFormat::Uint32x3,
|
|
VertexFormat::UInt32x4 => wgpu::VertexFormat::Uint32x4,
|
|
VertexFormat::Int32 => wgpu::VertexFormat::Sint32,
|
|
VertexFormat::Int32x2 => wgpu::VertexFormat::Sint32x2,
|
|
VertexFormat::Int32x3 => wgpu::VertexFormat::Sint32x3,
|
|
VertexFormat::Int32x4 => wgpu::VertexFormat::Sint32x4,
|
|
VertexFormat::Float64 => wgpu::VertexFormat::Float64,
|
|
VertexFormat::Float64x2 => wgpu::VertexFormat::Float64x2,
|
|
VertexFormat::Float64x3 => wgpu::VertexFormat::Float64x3,
|
|
VertexFormat::Float64x4 => wgpu::VertexFormat::Float64x4,
|
|
}
|
|
}
|
|
}
|