mirror of
https://github.com/GraphiteEditor/Graphite.git
synced 2026-09-17 07:18:04 +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 {
|
||||
use super::*;
|
||||
use crate::raster_types::__private::Sealed;
|
||||
use std::sync::Arc;
|
||||
|
||||
#[derive(Clone, Debug, PartialEq, Hash)]
|
||||
pub struct GPU {
|
||||
pub texture: wgpu::Texture,
|
||||
pub texture: Arc<InnerTexture>,
|
||||
}
|
||||
|
||||
impl Sealed for Raster<GPU> {}
|
||||
@@ -150,7 +151,9 @@ mod gpu {
|
||||
|
||||
impl Raster<GPU> {
|
||||
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 {
|
||||
@@ -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) {
|
||||
self.texture.destroy();
|
||||
self.0.destroy();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -140,7 +140,7 @@ impl WgpuExecutor {
|
||||
let mut renderer = self.vello_renderer.lock().await;
|
||||
for (image, texture) in context.resource_overrides.iter() {
|
||||
let texture_view = wgpu::TexelCopyTextureInfoBase {
|
||||
texture: texture.texture.clone(),
|
||||
texture: wgpu::Texture::clone(&texture.texture),
|
||||
mip_level: 0,
|
||||
origin: Origin3d::ZERO,
|
||||
aspect: TextureAspect::All,
|
||||
|
||||
@@ -230,7 +230,7 @@ impl PerPixelAdjustGraphicsPipeline {
|
||||
rp.draw(0..3, 0..1);
|
||||
|
||||
TableRow {
|
||||
element: Raster::new(GPU { texture: tex_out }),
|
||||
element: Raster::new_gpu(tex_out),
|
||||
transform: *instance.transform,
|
||||
alpha_blending: *instance.alpha_blending,
|
||||
source_node_id: *instance.source_node_id,
|
||||
|
||||
Reference in New Issue
Block a user