Add basic tiled rendering
This commit is contained in:
parent
854e5a55a1
commit
edffd22c2e
1 changed files with 353 additions and 170 deletions
|
|
@ -1,4 +1,4 @@
|
|||
import { InfoText } from '../../../objects/types/info-text';
|
||||
import { vec2 } from 'gl-matrix';
|
||||
import { FragmentShaderOnlyProgram } from './fragment-shader-only-program';
|
||||
import { IProgram } from './i-program';
|
||||
|
||||
|
|
@ -9,6 +9,9 @@ export class UniformArrayAutoScalingProgram implements IProgram {
|
|||
}> = [];
|
||||
private current: FragmentShaderOnlyProgram;
|
||||
|
||||
private drawingRectangleTopLeft = vec2.fromValues(0, 0);
|
||||
private drawingRectangleSize = vec2.fromValues(1, 1);
|
||||
|
||||
constructor(
|
||||
private gl: WebGL2RenderingContext,
|
||||
private vertexShaderSource: string,
|
||||
|
|
@ -17,6 +20,7 @@ export class UniformArrayAutoScalingProgram implements IProgram {
|
|||
private options: {
|
||||
getValueFromUniforms: (values: { [name: string]: any }) => number;
|
||||
uniformArraySizeName: string;
|
||||
enablingMacro: string;
|
||||
startingValue: number;
|
||||
steps: number;
|
||||
maximumValue: number;
|
||||
|
|
@ -31,12 +35,10 @@ export class UniformArrayAutoScalingProgram implements IProgram {
|
|||
}
|
||||
}
|
||||
|
||||
bindAndSetUniforms(values: { [name: string]: any }): void {
|
||||
public bindAndSetUniforms(values: { [name: string]: any }): void {
|
||||
let value = this.options.getValueFromUniforms(values);
|
||||
value = Math.min(this.options.maximumValue, value);
|
||||
|
||||
InfoText.modifyRecord(this.options.uniformArraySizeName, value.toString());
|
||||
|
||||
const closest = this.programs.find(
|
||||
(p) => value < p.value && value + this.options.steps >= p.value
|
||||
);
|
||||
|
|
@ -46,14 +48,23 @@ export class UniformArrayAutoScalingProgram implements IProgram {
|
|||
this.current = this.createProgram(value + this.options.steps);
|
||||
}
|
||||
|
||||
this.current.setDrawingRectangle(
|
||||
this.drawingRectangleTopLeft,
|
||||
this.drawingRectangleSize
|
||||
);
|
||||
this.current.bindAndSetUniforms(values);
|
||||
}
|
||||
|
||||
draw(): void {
|
||||
public setDrawingRectangle(topLeft: vec2, size: vec2) {
|
||||
this.drawingRectangleTopLeft = topLeft;
|
||||
this.drawingRectangleSize = size;
|
||||
}
|
||||
|
||||
public draw(): void {
|
||||
this.current.draw();
|
||||
}
|
||||
|
||||
delete(): void {
|
||||
public delete(): void {
|
||||
this.programs.forEach((p) => p.program.delete());
|
||||
}
|
||||
|
||||
|
|
@ -64,6 +75,7 @@ export class UniformArrayAutoScalingProgram implements IProgram {
|
|||
this.fragmentShaderSource,
|
||||
{
|
||||
[this.options.uniformArraySizeName]: Math.floor(arraySize).toString(),
|
||||
[this.options.enablingMacro]: arraySize > 0 ? '1' : '0',
|
||||
...this.substitutions,
|
||||
}
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in a new issue