Fix issues

This commit is contained in:
Andras Schmelczer 2023-04-16 14:05:47 +01:00
parent 5cc94805f1
commit 5feb7c929d
No known key found for this signature in database
GPG key ID: FC8F2C3D3D1A718C
12 changed files with 190 additions and 113 deletions

View file

@ -1,7 +1,10 @@
import { setUpFullScreenQuad } from '../../utils/full-screen-quad';
import shader from './render.wgsl';
export class RenderPipeline {
private readonly pipeline: GPURenderPipeline;
private readonly quadVertexBuffer: GPUBuffer;
private bindGroup?: GPUBindGroup;
private previousColorTexture?: GPUTexture;
@ -10,14 +13,12 @@ export class RenderPipeline {
private readonly device: GPUDevice,
preferredCanvasFormat: GPUTextureFormat
) {
const { buffer, vertex } = setUpFullScreenQuad(device);
this.quadVertexBuffer = buffer;
this.pipeline = device.createRenderPipeline({
layout: 'auto',
vertex: {
module: device.createShaderModule({
code: shader,
}),
entryPoint: 'vertex',
},
vertex,
fragment: {
module: device.createShaderModule({
code: shader,
@ -42,17 +43,18 @@ export class RenderPipeline {
colorAttachments: [
{
view: this.context.getCurrentTexture().createView(),
clearValue: { r: 0.0, g: 0.0, b: 0.0, a: 1.0 },
clearValue: { r: 1.0, g: 1.0, b: 1.0, a: 1.0 },
loadOp: 'clear',
storeOp: 'store',
},
],
};
const renderPassEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
renderPassEncoder.setBindGroup(0, this.bindGroup);
renderPassEncoder.setPipeline(this.pipeline);
renderPassEncoder.draw(4, 1);
renderPassEncoder.end();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
passEncoder.setPipeline(this.pipeline);
passEncoder.setVertexBuffer(0, this.quadVertexBuffer);
passEncoder.setBindGroup(0, this.bindGroup);
passEncoder.draw(4, 1);
passEncoder.end();
}
private ensureBindGroupExists(colorTexture: GPUTexture) {

View file

@ -1,30 +1,8 @@
struct VertexOutput {
@builtin(position) Position : vec4<f32>,
@location(0) fragUV : vec2<f32>,
}
@vertex
fn vertex(@builtin(vertex_index) i : u32) -> VertexOutput {
var pos = array<vec2<f32>, 4>(
vec2(-1.0, 1.0),
vec2(-1.0, -1.0),
vec2(1.0, 1.0),
vec2(1.0, -1.0),
);
var output : VertexOutput;
output.Position = vec4<f32>(pos[i], 0.0, 1.0);
output.fragUV = output.Position.xy * 0.5 + 0.5;
return output;
}
@group(0) @binding(0) var mySampler: sampler;
@group(0) @binding(1) var TargetTexture : texture_2d<f32>;
@fragment
fn fragment(@location(0) fragUV: vec2<f32>) -> @location(0) vec4<f32> {
// return vec4(1.0, 0.0, 0.0, 1.0);
return textureSample(TargetTexture, mySampler, fragUV);
fn fragment(@location(0) uv: vec2<f32>) -> @location(0) vec4<f32> {
return textureSample(TargetTexture, mySampler, uv) * 10.0;
}