Path: blob/main/crates/bevy_render/src/render_resource/texture.rs
6596 views
use crate::define_atomic_id;1use crate::renderer::WgpuWrapper;2use bevy_derive::{Deref, DerefMut};3use bevy_ecs::resource::Resource;4use core::ops::Deref;56define_atomic_id!(TextureId);78/// A GPU-accessible texture.9///10/// May be converted from and dereferences to a wgpu [`Texture`](wgpu::Texture).11/// Can be created via [`RenderDevice::create_texture`](crate::renderer::RenderDevice::create_texture).12///13/// Other options for storing GPU-accessible data are:14/// * [`BufferVec`](crate::render_resource::BufferVec)15/// * [`DynamicStorageBuffer`](crate::render_resource::DynamicStorageBuffer)16/// * [`DynamicUniformBuffer`](crate::render_resource::DynamicUniformBuffer)17/// * [`GpuArrayBuffer`](crate::render_resource::GpuArrayBuffer)18/// * [`RawBufferVec`](crate::render_resource::RawBufferVec)19/// * [`StorageBuffer`](crate::render_resource::StorageBuffer)20/// * [`UniformBuffer`](crate::render_resource::UniformBuffer)21#[derive(Clone, Debug)]22pub struct Texture {23id: TextureId,24value: WgpuWrapper<wgpu::Texture>,25}2627impl Texture {28/// Returns the [`TextureId`].29#[inline]30pub fn id(&self) -> TextureId {31self.id32}3334/// Creates a view of this texture.35pub fn create_view(&self, desc: &wgpu::TextureViewDescriptor) -> TextureView {36TextureView::from(self.value.create_view(desc))37}38}3940impl From<wgpu::Texture> for Texture {41fn from(value: wgpu::Texture) -> Self {42Texture {43id: TextureId::new(),44value: WgpuWrapper::new(value),45}46}47}4849impl Deref for Texture {50type Target = wgpu::Texture;5152#[inline]53fn deref(&self) -> &Self::Target {54&self.value55}56}5758define_atomic_id!(TextureViewId);5960/// Describes a [`Texture`] with its associated metadata required by a pipeline or [`BindGroup`](super::BindGroup).61#[derive(Clone, Debug)]62pub struct TextureView {63id: TextureViewId,64value: WgpuWrapper<wgpu::TextureView>,65}6667pub struct SurfaceTexture {68value: WgpuWrapper<wgpu::SurfaceTexture>,69}7071impl SurfaceTexture {72pub fn present(self) {73self.value.into_inner().present();74}75}7677impl TextureView {78/// Returns the [`TextureViewId`].79#[inline]80pub fn id(&self) -> TextureViewId {81self.id82}83}8485impl From<wgpu::TextureView> for TextureView {86fn from(value: wgpu::TextureView) -> Self {87TextureView {88id: TextureViewId::new(),89value: WgpuWrapper::new(value),90}91}92}9394impl From<wgpu::SurfaceTexture> for SurfaceTexture {95fn from(value: wgpu::SurfaceTexture) -> Self {96SurfaceTexture {97value: WgpuWrapper::new(value),98}99}100}101102impl Deref for TextureView {103type Target = wgpu::TextureView;104105#[inline]106fn deref(&self) -> &Self::Target {107&self.value108}109}110111impl Deref for SurfaceTexture {112type Target = wgpu::SurfaceTexture;113114#[inline]115fn deref(&self) -> &Self::Target {116&self.value117}118}119120define_atomic_id!(SamplerId);121122/// A Sampler defines how a pipeline will sample from a [`TextureView`].123/// They define image filters (including anisotropy) and address (wrapping) modes, among other things.124///125/// May be converted from and dereferences to a wgpu [`Sampler`](wgpu::Sampler).126/// Can be created via [`RenderDevice::create_sampler`](crate::renderer::RenderDevice::create_sampler).127#[derive(Clone, Debug)]128pub struct Sampler {129id: SamplerId,130value: WgpuWrapper<wgpu::Sampler>,131}132133impl Sampler {134/// Returns the [`SamplerId`].135#[inline]136pub fn id(&self) -> SamplerId {137self.id138}139}140141impl From<wgpu::Sampler> for Sampler {142fn from(value: wgpu::Sampler) -> Self {143Sampler {144id: SamplerId::new(),145value: WgpuWrapper::new(value),146}147}148}149150impl Deref for Sampler {151type Target = wgpu::Sampler;152153#[inline]154fn deref(&self) -> &Self::Target {155&self.value156}157}158159/// A rendering resource for the default image sampler which is set during renderer160/// initialization.161///162/// The [`ImagePlugin`](bevy_image::ImagePlugin) can be set during app initialization to change the default163/// image sampler.164#[derive(Resource, Debug, Clone, Deref, DerefMut)]165pub struct DefaultImageSampler(pub(crate) Sampler);166167168