Remove clipping support from the SVG demo.

It's overengineering and was broken anyway. WebRender has much better
clipping support; let's centralize the logic in there.
This commit is contained in:
Patrick Walton 2017-12-22 16:30:24 -08:00
parent 934086ace8
commit 429e4a3063
5 changed files with 5 additions and 156 deletions

View File

@ -95,16 +95,9 @@ export class NoAAStrategy extends AntialiasingStrategy {
return 1;
}
private renderTargetColorTextures: WebGLTexture[];
private renderTargetDepthTextures: WebGLTexture[];
private renderTargetFramebuffers: WebGLFramebuffer[];
constructor(level: number, subpixelAA: SubpixelAAType) {
super();
this.framebufferSize = glmatrix.vec2.create();
this.renderTargetColorTextures = [];
this.renderTargetDepthTextures = [];
this.renderTargetFramebuffers = [];
}
attachMeshes(renderer: Renderer) {}
@ -131,50 +124,12 @@ export class NoAAStrategy extends AntialiasingStrategy {
const renderContext = renderer.renderContext;
const gl = renderContext.gl;
if (renderer.usesIntermediateRenderTargets &&
(renderer.renderTaskTypeForObject(objectIndex) === 'clip' ||
renderer.compositingOperationForObject(objectIndex) != null)) {
if (this.renderTargetColorTextures[objectIndex] == null) {
this.renderTargetColorTextures[objectIndex] =
createFramebufferColorTexture(gl,
this.framebufferSize,
renderContext.colorAlphaFormat);
}
if (this.renderTargetDepthTextures[objectIndex] == null) {
this.renderTargetDepthTextures[objectIndex] =
createFramebufferDepthTexture(gl, this.framebufferSize);
}
if (this.renderTargetFramebuffers[objectIndex] == null) {
this.renderTargetFramebuffers[objectIndex] =
createFramebuffer(gl,
this.renderTargetColorTextures[objectIndex],
this.renderTargetDepthTextures[objectIndex]);
}
gl.bindFramebuffer(gl.FRAMEBUFFER, this.renderTargetFramebuffers[objectIndex]);
} else {
gl.bindFramebuffer(gl.FRAMEBUFFER, renderer.destFramebuffer);
}
gl.bindFramebuffer(gl.FRAMEBUFFER, renderer.destFramebuffer);
gl.viewport(0, 0, this.framebufferSize[0], this.framebufferSize[1]);
gl.disable(gl.SCISSOR_TEST);
}
finishDirectlyRenderingObject(renderer: Renderer, objectIndex: number): void {
if (!renderer.usesIntermediateRenderTargets)
return;
const compositingOperation = renderer.compositingOperationForObject(objectIndex);
if (compositingOperation == null)
return;
const gl = renderer.renderContext.gl;
gl.bindFramebuffer(gl.FRAMEBUFFER, renderer.destFramebuffer);
gl.viewport(0, 0, renderer.destAllocatedSize[0], renderer.destAllocatedSize[1]);
gl.disable(gl.DEPTH_TEST);
gl.disable(gl.BLEND);
compositingOperation.composite(renderer, objectIndex, this.renderTargetColorTextures);
}
finishDirectlyRenderingObject(renderer: Renderer, objectIndex: number): void {}
antialiasObject(renderer: Renderer, objectIndex: number): void {}

View File

@ -64,10 +64,6 @@ export abstract class Renderer {
return glmatrix.vec4.clone([1.0, 1.0, 1.0, 1.0]);
}
get usesIntermediateRenderTargets(): boolean {
return false;
}
get meshesAttached(): boolean {
return this.meshes != null && this.meshData != null;
}
@ -346,10 +342,6 @@ export abstract class Renderer {
return 'color';
}
compositingOperationForObject(objectIndex: number): CompositingOperation | null {
return null;
}
meshIndexForObject(objectIndex: number): number {
return objectIndex;
}

View File

@ -36,9 +36,6 @@ export default class SSAAStrategy extends AntialiasingStrategy {
private supersampledColorTexture: WebGLTexture;
private supersampledDepthTexture: WebGLTexture;
private supersampledFramebuffer: WebGLFramebuffer;
private renderTargetColorTextures: WebGLTexture[];
private renderTargetDepthTextures: WebGLTexture[];
private renderTargetFramebuffers: WebGLFramebuffer[];
constructor(level: number, subpixelAA: SubpixelAAType) {
super();
@ -47,10 +44,6 @@ export default class SSAAStrategy extends AntialiasingStrategy {
this.subpixelAA = subpixelAA;
this.destFramebufferSize = glmatrix.vec2.create();
this.supersampledFramebufferSize = glmatrix.vec2.create();
this.renderTargetColorTextures = [];
this.renderTargetDepthTextures = [];
this.renderTargetFramebuffers = [];
}
attachMeshes(renderer: Renderer): void {}
@ -114,30 +107,7 @@ export default class SSAAStrategy extends AntialiasingStrategy {
const renderContext = renderer.renderContext;
const gl = renderContext.gl;
if (renderer.usesIntermediateRenderTargets &&
(renderer.renderTaskTypeForObject(objectIndex) === 'clip' ||
renderer.compositingOperationForObject(objectIndex) != null)) {
if (this.renderTargetColorTextures[objectIndex] == null) {
this.renderTargetColorTextures[objectIndex] =
createFramebufferColorTexture(gl,
this.supersampledFramebufferSize,
renderContext.colorAlphaFormat);
}
if (this.renderTargetDepthTextures[objectIndex] == null) {
this.renderTargetDepthTextures[objectIndex] =
createFramebufferDepthTexture(gl, this.supersampledFramebufferSize);
}
if (this.renderTargetFramebuffers[objectIndex] == null) {
this.renderTargetFramebuffers[objectIndex] =
createFramebuffer(gl,
this.renderTargetColorTextures[objectIndex],
this.renderTargetDepthTextures[objectIndex]);
}
gl.bindFramebuffer(gl.FRAMEBUFFER, this.renderTargetFramebuffers[objectIndex]);
} else {
gl.bindFramebuffer(gl.FRAMEBUFFER, this.supersampledFramebuffer);
}
gl.bindFramebuffer(gl.FRAMEBUFFER, this.supersampledFramebuffer);
gl.viewport(0,
0,
this.supersampledFramebufferSize[0],
@ -145,25 +115,7 @@ export default class SSAAStrategy extends AntialiasingStrategy {
gl.disable(gl.SCISSOR_TEST);
}
finishDirectlyRenderingObject(renderer: Renderer, objectIndex: number): void {
if (!renderer.usesIntermediateRenderTargets)
return;
const compositingOperation = renderer.compositingOperationForObject(objectIndex);
if (compositingOperation == null)
return;
const gl = renderer.renderContext.gl;
gl.bindFramebuffer(gl.FRAMEBUFFER, this.supersampledFramebuffer);
gl.viewport(0,
0,
this.supersampledFramebufferSize[0],
this.supersampledFramebufferSize[1]);
gl.disable(gl.DEPTH_TEST);
gl.disable(gl.BLEND);
compositingOperation.composite(renderer, objectIndex, this.renderTargetColorTextures);
}
finishDirectlyRenderingObject(renderer: Renderer, objectIndex: number): void {}
antialiasObject(renderer: Renderer): void {}

View File

@ -66,10 +66,6 @@ export abstract class SVGRenderer extends Renderer {
return this.destAllocatedSize;
}
get usesIntermediateRenderTargets(): boolean {
return true;
}
get backgroundColor(): glmatrix.vec4 {
return glmatrix.vec4.clone([1.0, 1.0, 1.0, 1.0]);
}

View File

@ -56,10 +56,6 @@ export abstract class XCAAStrategy extends AntialiasingStrategy {
protected aaDepthTexture: WebGLTexture | null;
protected aaFramebuffer: WebGLFramebuffer | null;
protected renderTargetColorTextures: WebGLTexture[];
protected renderTargetDepthTextures: WebGLTexture[];
protected renderTargetFramebuffers: WebGLFramebuffer[];
constructor(level: number, subpixelAA: SubpixelAAType) {
super();
@ -67,10 +63,6 @@ export abstract class XCAAStrategy extends AntialiasingStrategy {
this.supersampledFramebufferSize = glmatrix.vec2.create();
this.destFramebufferSize = glmatrix.vec2.create();
this.renderTargetColorTextures = [];
this.renderTargetDepthTextures = [];
this.renderTargetFramebuffers = [];
}
init(renderer: Renderer): void {
@ -172,21 +164,6 @@ export abstract class XCAAStrategy extends AntialiasingStrategy {
this.setAdditionalStateForResolveIfNecessary(renderer, resolveProgram, 1);
gl.drawElements(renderContext.gl.TRIANGLES, 6, gl.UNSIGNED_BYTE, 0);
renderContext.vertexArrayObjectExt.bindVertexArrayOES(null);
// Resolve render target if necessary.
if (!renderer.usesIntermediateRenderTargets)
return;
const compositingOperation = renderer.compositingOperationForObject(objectIndex);
if (compositingOperation == null)
return;
gl.bindFramebuffer(gl.FRAMEBUFFER, renderer.destFramebuffer);
gl.viewport(0, 0, this.destFramebufferSize[0], this.destFramebufferSize[1]);
gl.disable(gl.DEPTH_TEST);
gl.disable(gl.BLEND);
compositingOperation.composite(renderer, objectIndex, this.renderTargetColorTextures);
}
resolve(pass: number, renderer: Renderer): void {}
@ -271,30 +248,7 @@ export abstract class XCAAStrategy extends AntialiasingStrategy {
const renderContext = renderer.renderContext;
const gl = renderContext.gl;
if (renderer.usesIntermediateRenderTargets &&
(renderer.renderTaskTypeForObject(objectIndex) === 'clip' ||
renderer.compositingOperationForObject(objectIndex) != null)) {
if (this.renderTargetColorTextures[objectIndex] == null) {
this.renderTargetColorTextures[objectIndex] =
createFramebufferColorTexture(gl,
this.supersampledFramebufferSize,
renderContext.colorAlphaFormat);
}
if (this.renderTargetDepthTextures[objectIndex] == null) {
this.renderTargetDepthTextures[objectIndex] =
createFramebufferDepthTexture(gl, this.supersampledFramebufferSize);
}
if (this.renderTargetFramebuffers[objectIndex] == null) {
this.renderTargetFramebuffers[objectIndex] =
createFramebuffer(gl,
this.renderTargetColorTextures[objectIndex],
this.renderTargetDepthTextures[objectIndex]);
}
gl.bindFramebuffer(gl.FRAMEBUFFER, this.renderTargetFramebuffers[objectIndex]);
} else {
gl.bindFramebuffer(gl.FRAMEBUFFER, renderer.destFramebuffer);
}
gl.bindFramebuffer(gl.FRAMEBUFFER, renderer.destFramebuffer);
gl.viewport(0, 0, this.destFramebufferSize[0], this.destFramebufferSize[1]);
gl.disable(gl.SCISSOR_TEST);
}