Struct tridify_rs::Texture
source · pub struct Texture {
pub desc: TextureDesc,
/* private fields */
}
Expand description
GPU texture handle.
Fields§
§desc: TextureDesc
Implementations§
source§impl Texture
impl Texture
sourcepub fn from_path(gpu: &GpuCtx, path: &Path) -> Self
pub fn from_path(gpu: &GpuCtx, path: &Path) -> Self
Examples found in repository?
examples/texture_cube/main.rs (lines 13-16)
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
fn main() -> Result<(), Box<dyn Error>> {
//Create app and main window.
let mut app = Tridify::new();
let window = app.create_window()?;
let gpu_ctx = window.ctx();
//Load texture from path.
let texture = Texture::from_path(
gpu_ctx,
Path::new(r#"D:\Development\Rust Crates\LDrawy\examples\draw_cube\texture.png"#),
);
//Sampler defines how the texture will be rendered in shapes.
let sampler = Sampler::new_default(gpu_ctx);
let camera = Camera::new(
Transform::from_look_at(Vec3::NEG_Z * 10.0 + Vec3::Y * 10.0, Vec3::ZERO, Vec3::Y),
Projection::default(),
);
let mut camera_buf = camera.build_buffer(gpu_ctx);
//Create brush to draw the shapes.
let mut brush = Brush::from_source(
BrushDesc::default(),
gpu_ctx,
include_str!("shader.wgsl").to_string(),
)?;
//Bind camera, sampler and texture to the brush. Make sure group_index and loc_index are the same as
//in the shader.
brush.bind(0, 0, camera_buf.clone());
brush.bind(1, 0, texture);
brush.bind(1, 1, sampler);
//Create and bake a shape batch with a cube in it.
let shape_buffer = ShapeBatch::new()
.add_cube(
Vec3::ZERO,
Quat::from_rotation_x(35.) * Quat::from_rotation_y(35.),
Vec3::ONE * 5.,
Color::WHITE,
)
.bake_buffers(gpu_ctx);
//Setup the window render loop.
window.set_render_loop(move |gpu, frame_ctx| {
let model = Mat4::from_rotation_y(frame_ctx.elapsed_time as f32);
let mvp = camera.build_camera_matrix() * model;
//Updating the gpu buffer will update all brushes binded as well.
camera_buf.write(gpu, bytemuck::cast_slice(&mvp.to_cols_array()));
//Render frame as usual.
let mut pass_builder = gpu.create_render_builder();
let mut render_pass = pass_builder.build_render_pass(RenderOptions::default());
render_pass.render_shapes(gpu, &mut brush, &shape_buffer);
render_pass.finish();
pass_builder.finish_render(gpu);
});
// Start program.
app.start(());
}
pub fn init( gpu: &GpuCtx, desc: TextureDesc, data: &[u8], label: Option<&str> ) -> Self
pub fn new(gpu: &GpuCtx, desc: TextureDesc, label: Option<&str>) -> Self
sourcepub fn write_pixels(&self, gpu: &GpuCtx, data: &[u8])
pub fn write_pixels(&self, gpu: &GpuCtx, data: &[u8])
Queues a write into the texture
sourcepub fn write_region_pixels(&self, gpu: &GpuCtx, data: &[u8], origin: UVec3)
pub fn write_region_pixels(&self, gpu: &GpuCtx, data: &[u8], origin: UVec3)
Queues a write into the texture updating only a subset of it
Trait Implementations§
Auto Trait Implementations§
impl !RefUnwindSafe for Texture
impl !Send for Texture
impl !Sync for Texture
impl Unpin for Texture
impl !UnwindSafe for Texture
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more