mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-10-06 23:48:11 +08:00
WIP shaders: wrap Texture in Arc within Raster<GPU>
This commit is contained in:
@@ -134,10 +134,11 @@ pub use gpu::GPU;
|
|||||||
mod gpu {
|
mod gpu {
|
||||||
use super::*;
|
use super::*;
|
||||||
use crate::raster_types::__private::Sealed;
|
use crate::raster_types::__private::Sealed;
|
||||||
|
use std::sync::Arc;
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Hash)]
|
#[derive(Clone, Debug, PartialEq, Hash)]
|
||||||
pub struct GPU {
|
pub struct GPU {
|
||||||
pub texture: wgpu::Texture,
|
pub texture: Arc<InnerTexture>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Sealed for Raster<GPU> {}
|
impl Sealed for Raster<GPU> {}
|
||||||
@@ -150,7 +151,9 @@ mod gpu {
|
|||||||
|
|
||||||
impl Raster<GPU> {
|
impl Raster<GPU> {
|
||||||
pub fn new_gpu(texture: wgpu::Texture) -> Self {
|
pub fn new_gpu(texture: wgpu::Texture) -> Self {
|
||||||
Self::new(GPU { texture })
|
Self::new(GPU {
|
||||||
|
texture: Arc::new(InnerTexture(texture)),
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn data(&self) -> &wgpu::Texture {
|
pub fn data(&self) -> &wgpu::Texture {
|
||||||
@@ -158,9 +161,20 @@ mod gpu {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Drop for GPU {
|
#[derive(Debug, PartialEq, Hash)]
|
||||||
|
pub struct InnerTexture(wgpu::Texture);
|
||||||
|
|
||||||
|
impl Deref for InnerTexture {
|
||||||
|
type Target = wgpu::Texture;
|
||||||
|
|
||||||
|
fn deref(&self) -> &Self::Target {
|
||||||
|
&self.0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Drop for InnerTexture {
|
||||||
fn drop(&mut self) {
|
fn drop(&mut self) {
|
||||||
self.texture.destroy();
|
self.0.destroy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -140,7 +140,7 @@ impl WgpuExecutor {
|
|||||||
let mut renderer = self.vello_renderer.lock().await;
|
let mut renderer = self.vello_renderer.lock().await;
|
||||||
for (image, texture) in context.resource_overrides.iter() {
|
for (image, texture) in context.resource_overrides.iter() {
|
||||||
let texture_view = wgpu::TexelCopyTextureInfoBase {
|
let texture_view = wgpu::TexelCopyTextureInfoBase {
|
||||||
texture: texture.texture.clone(),
|
texture: wgpu::Texture::clone(&texture.texture),
|
||||||
mip_level: 0,
|
mip_level: 0,
|
||||||
origin: Origin3d::ZERO,
|
origin: Origin3d::ZERO,
|
||||||
aspect: TextureAspect::All,
|
aspect: TextureAspect::All,
|
||||||
|
|||||||
@@ -230,7 +230,7 @@ impl PerPixelAdjustGraphicsPipeline {
|
|||||||
rp.draw(0..3, 0..1);
|
rp.draw(0..3, 0..1);
|
||||||
|
|
||||||
TableRow {
|
TableRow {
|
||||||
element: Raster::new(GPU { texture: tex_out }),
|
element: Raster::new_gpu(tex_out),
|
||||||
transform: *instance.transform,
|
transform: *instance.transform,
|
||||||
alpha_blending: *instance.alpha_blending,
|
alpha_blending: *instance.alpha_blending,
|
||||||
source_node_id: *instance.source_node_id,
|
source_node_id: *instance.source_node_id,
|
||||||
|
|||||||
Reference in New Issue
Block a user