Rename "object" to "shader"; cull degenerate fills

This commit is contained in:
Patrick Walton 2019-01-03 20:55:31 -08:00
parent 2109049269
commit 808bcaeed4
2 changed files with 12 additions and 6 deletions

View File

@ -85,7 +85,7 @@ class App {
private viewBox: Rect; private viewBox: Rect;
private solidTileCount: number; private solidTileCount: number;
private objectCount: number; private shaderCount: number;
constructor(areaLUT: HTMLImageElement) { constructor(areaLUT: HTMLImageElement) {
const canvas = staticCast(document.getElementById('canvas'), HTMLCanvasElement); const canvas = staticCast(document.getElementById('canvas'), HTMLCanvasElement);
@ -247,7 +247,7 @@ class App {
this.canvas.addEventListener('click', event => this.onClick(event), false); this.canvas.addEventListener('click', event => this.onClick(event), false);
this.solidTileCount = 0; this.solidTileCount = 0;
this.objectCount = 0; this.shaderCount = 0;
} }
redraw(): void { redraw(): void {
@ -284,7 +284,7 @@ class App {
gl.uniform1i(this.solidTileProgram.uniforms.FillColorsTexture, 0); gl.uniform1i(this.solidTileProgram.uniforms.FillColorsTexture, 0);
// FIXME(pcwalton): Maybe this should be an ivec2 or uvec2? // FIXME(pcwalton): Maybe this should be an ivec2 or uvec2?
gl.uniform2f(this.solidTileProgram.uniforms.FillColorsTextureSize, gl.uniform2f(this.solidTileProgram.uniforms.FillColorsTextureSize,
this.objectCount, this.shaderCount,
1.0); 1.0);
gl.uniform2f(this.solidTileProgram.uniforms.ViewBoxOrigin, gl.uniform2f(this.solidTileProgram.uniforms.ViewBoxOrigin,
this.viewBox.origin.x, this.viewBox.origin.x,
@ -317,6 +317,7 @@ class App {
gl.blendFunc(gl.ONE, gl.ONE); gl.blendFunc(gl.ONE, gl.ONE);
gl.enable(gl.BLEND); gl.enable(gl.BLEND);
gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, unwrapNull(batch.fillPrimitiveCount)); gl.drawArraysInstanced(gl.TRIANGLE_FAN, 0, 4, unwrapNull(batch.fillPrimitiveCount));
console.log("drawing ", batch.fillPrimitiveCount, " fills");
gl.disable(gl.BLEND); gl.disable(gl.BLEND);
// Read back stencil and dump it. // Read back stencil and dump it.
@ -344,7 +345,7 @@ class App {
gl.uniform1i(this.maskTileProgram.uniforms.FillColorsTexture, 1); gl.uniform1i(this.maskTileProgram.uniforms.FillColorsTexture, 1);
// FIXME(pcwalton): Maybe this should be an ivec2 or uvec2? // FIXME(pcwalton): Maybe this should be an ivec2 or uvec2?
gl.uniform2f(this.maskTileProgram.uniforms.FillColorsTextureSize, gl.uniform2f(this.maskTileProgram.uniforms.FillColorsTextureSize,
this.objectCount, this.shaderCount,
1.0); 1.0);
gl.uniform2f(this.maskTileProgram.uniforms.ViewBoxOrigin, gl.uniform2f(this.maskTileProgram.uniforms.ViewBoxOrigin,
this.viewBox.origin.x, this.viewBox.origin.x,
@ -426,7 +427,7 @@ class App {
this.solidTileVertexBuffer, this.solidTileVertexBuffer,
SOLID_TILE_INSTANCE_SIZE); SOLID_TILE_INSTANCE_SIZE);
} else if (id === 'shad') { } else if (id === 'shad') {
this.objectCount = subchunk.length() / 4; this.shaderCount = subchunk.length() / 4;
gl.activeTexture(gl.TEXTURE0); gl.activeTexture(gl.TEXTURE0);
gl.bindTexture(gl.TEXTURE_2D, this.fillColorsTexture); gl.bindTexture(gl.TEXTURE_2D, this.fillColorsTexture);
const textureDataView = subchunk.contents(); const textureDataView = subchunk.contents();
@ -436,7 +437,7 @@ class App {
gl.texImage2D(gl.TEXTURE_2D, gl.texImage2D(gl.TEXTURE_2D,
0, 0,
gl.RGBA, gl.RGBA,
this.objectCount, this.shaderCount,
1, 1,
0, 0,
gl.RGBA, gl.RGBA,

View File

@ -1300,6 +1300,11 @@ impl BuiltObject {
(from.y.fract() * 256.0) as u8); (from.y.fract() * 256.0) as u8);
let to_subpx = Point2D::new((to.x.fract() * 256.0) as u8, (to.y.fract() * 256.0) as u8); let to_subpx = Point2D::new((to.x.fract() * 256.0) as u8, (to.y.fract() * 256.0) as u8);
// Cull degenerate fills.
if from.x as u8 == to.x as u8 && from_subpx.x == to_subpx.x {
return
}
self.fills.push(FillObjectPrimitive { self.fills.push(FillObjectPrimitive {
from_px, to_px, from_px, to_px,
from_subpx, to_subpx, from_subpx, to_subpx,