_'use strict';
/**
* A RenderPass is a way to have a block of shaders to pass to your application pipeline and
* these render passes will be executed in the order you pass them in the {@link Points#init} method.
*
* @example
* import Points, { RenderPass } from 'points';
* // vert, frag and compute are strings with the wgsl shaders.
* let renderPasses = [
* new RenderPass(vert1, frag1, compute1),
* new RenderPass(vert2, frag2, compute2)
* ];
* // we pass the array of renderPasses
* await points.init(renderPasses);
* @memberof module:points
*/
class RenderPass {
#vertexShader;
#computeShader;
#fragmentShader;
#compiledShaders
#computePipeline = null;
#renderPipeline = null;
#computeBindGroup = null;
#uniformBindGroup = null;
#internal = false;
#hasComputeShader;
#hasVertexShader;
#hasFragmentShader;
#hasVertexAndFragmentShader;
#workgroupCountX;
#workgroupCountY;
#workgroupCountZ;
/**
* A collection of Vertex, Compute and Fragment shaders that represent a RenderPass.
* This is useful for PostProcessing.
* @param {String} vertexShader WGSL Vertex Shader in a String.
* @param {String} fragmentShader WGSL Fragment Shader in a String.
* @param {String} computeShader WGSL Compute Shader in a String.
*/
constructor(vertexShader, fragmentShader, computeShader, workgroupCountX, workgroupCountY, workgroupCountZ) {
this.#vertexShader = vertexShader;
this.#computeShader = computeShader;
this.#fragmentShader = fragmentShader;
this.#compiledShaders = {
vertex: '',
compute: '',
fragment: '',
};
this.#hasComputeShader = !!this.#computeShader;
this.#hasVertexShader = !!this.#vertexShader;
this.#hasFragmentShader = !!this.#fragmentShader;
this.#hasVertexAndFragmentShader = this.#hasVertexShader && this.#hasFragmentShader;
this.#workgroupCountX = workgroupCountX || 8;
this.#workgroupCountY = workgroupCountY || 8;
this.#workgroupCountZ = workgroupCountZ || 1;
}
/**
* To use with {link RenderPasses} so it's internal
* @ignore
*/
get internal() {
return this.#internal;
}
set internal(value) {
this.#internal = value;
}
/**
* get the vertex shader content
*/
get vertexShader() {
return this.#vertexShader;
}
/**
* get the compute shader content
*/
get computeShader() {
return this.#computeShader;
}
/**
* get the fragment shader content
*/
get fragmentShader() {
return this.#fragmentShader;
}
set computePipeline(value) {
this.#computePipeline = value;
}
get computePipeline() {
return this.#computePipeline;
}
set renderPipeline(value) {
this.#renderPipeline = value;
}
get renderPipeline() {
return this.#renderPipeline;
}
set computeBindGroup(value) {
this.#computeBindGroup = value;
}
get computeBindGroup() {
return this.#computeBindGroup;
}
set uniformBindGroup(value) {
this.#uniformBindGroup = value;
}
get uniformBindGroup() {
return this.#uniformBindGroup;
}
get compiledShaders() {
return this.#compiledShaders;
}
get hasComputeShader() {
return this.#hasComputeShader;
}
get hasVertexShader() {
return this.#hasVertexShader;
}
get hasFragmentShader() {
return this.#hasFragmentShader;
}
get hasVertexAndFragmentShader() {
return this.#hasVertexAndFragmentShader;
}
get workgroupCountX() {
return this.#workgroupCountX;
}
get workgroupCountY() {
return this.#workgroupCountY;
}
get workgroupCountZ() {
return this.#workgroupCountZ;
}
}
export default RenderPass;