Stop calling `getParameter` and `getBufferParameter`.
They're incredibly slow in Chrome.
This commit is contained in:
parent
77f135a4ba
commit
f8c950d39a
|
@ -163,11 +163,9 @@ export abstract class Renderer {
|
||||||
}
|
}
|
||||||
|
|
||||||
setFramebufferSizeUniform(uniforms: UniformMap) {
|
setFramebufferSizeUniform(uniforms: UniformMap) {
|
||||||
const renderContext = this.renderContext;
|
this.renderContext.gl.uniform2i(uniforms.uFramebufferSize,
|
||||||
const currentViewport = renderContext.gl.getParameter(renderContext.gl.VIEWPORT);
|
this.destAllocatedSize[0],
|
||||||
renderContext.gl.uniform2i(uniforms.uFramebufferSize,
|
this.destAllocatedSize[1]);
|
||||||
currentViewport[2],
|
|
||||||
currentViewport[3]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
setTransformAndTexScaleUniformsForDest(uniforms: UniformMap): void {
|
setTransformAndTexScaleUniformsForDest(uniforms: UniformMap): void {
|
||||||
|
@ -307,7 +305,7 @@ export abstract class Renderer {
|
||||||
if (instanceRange.isEmpty)
|
if (instanceRange.isEmpty)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const meshes = this.meshes[objectIndex];
|
const meshData = this.meshData[objectIndex];
|
||||||
|
|
||||||
// Set up implicit cover state.
|
// Set up implicit cover state.
|
||||||
gl.depthFunc(this.depthFunction);
|
gl.depthFunc(this.depthFunction);
|
||||||
|
@ -333,8 +331,7 @@ export abstract class Renderer {
|
||||||
this.setPathColorsUniform(objectIndex, directInteriorProgram.uniforms, 0);
|
this.setPathColorsUniform(objectIndex, directInteriorProgram.uniforms, 0);
|
||||||
this.pathTransformBufferTextures[objectIndex]
|
this.pathTransformBufferTextures[objectIndex]
|
||||||
.bind(gl, directInteriorProgram.uniforms, 1);
|
.bind(gl, directInteriorProgram.uniforms, 1);
|
||||||
let indexCount = gl.getBufferParameter(gl.ELEMENT_ARRAY_BUFFER, gl.BUFFER_SIZE) /
|
let indexCount = meshData.coverInteriorIndices.byteLength / UINT32_SIZE;
|
||||||
UINT32_SIZE;
|
|
||||||
if (!this.pathIDsAreInstanced) {
|
if (!this.pathIDsAreInstanced) {
|
||||||
gl.drawElements(gl.TRIANGLES, indexCount, gl.UNSIGNED_INT, 0);
|
gl.drawElements(gl.TRIANGLES, indexCount, gl.UNSIGNED_INT, 0);
|
||||||
} else {
|
} else {
|
||||||
|
@ -369,8 +366,7 @@ export abstract class Renderer {
|
||||||
if (renderingMode === 'color')
|
if (renderingMode === 'color')
|
||||||
this.setPathColorsUniform(objectIndex, directCurveProgram.uniforms, 0);
|
this.setPathColorsUniform(objectIndex, directCurveProgram.uniforms, 0);
|
||||||
this.pathTransformBufferTextures[objectIndex].bind(gl, directCurveProgram.uniforms, 1);
|
this.pathTransformBufferTextures[objectIndex].bind(gl, directCurveProgram.uniforms, 1);
|
||||||
indexCount = gl.getBufferParameter(gl.ELEMENT_ARRAY_BUFFER, gl.BUFFER_SIZE) /
|
indexCount = meshData.coverCurveIndices.byteLength / UINT32_SIZE;
|
||||||
UINT32_SIZE;
|
|
||||||
if (!this.pathIDsAreInstanced) {
|
if (!this.pathIDsAreInstanced) {
|
||||||
gl.drawElements(gl.TRIANGLES, indexCount, gl.UNSIGNED_INT, 0);
|
gl.drawElements(gl.TRIANGLES, indexCount, gl.UNSIGNED_INT, 0);
|
||||||
} else {
|
} else {
|
||||||
|
|
|
@ -179,8 +179,12 @@ export abstract class XCAAStrategy extends AntialiasingStrategy {
|
||||||
|
|
||||||
protected setAAUniforms(renderer: Renderer, uniforms: UniformMap) {
|
protected setAAUniforms(renderer: Renderer, uniforms: UniformMap) {
|
||||||
const renderContext = renderer.renderContext;
|
const renderContext = renderer.renderContext;
|
||||||
|
const gl = renderContext.gl;
|
||||||
|
|
||||||
renderer.setTransformSTUniform(uniforms, 0);
|
renderer.setTransformSTUniform(uniforms, 0);
|
||||||
renderer.setFramebufferSizeUniform(uniforms);
|
gl.uniform2i(uniforms.uFramebufferSize,
|
||||||
|
this.supersampledFramebufferSize[0],
|
||||||
|
this.supersampledFramebufferSize[1]);
|
||||||
renderer.pathTransformBufferTextures[0].bind(renderContext.gl, uniforms, 0);
|
renderer.pathTransformBufferTextures[0].bind(renderContext.gl, uniforms, 0);
|
||||||
this.pathBoundsBufferTexture.bind(renderContext.gl, uniforms, 1);
|
this.pathBoundsBufferTexture.bind(renderContext.gl, uniforms, 1);
|
||||||
renderer.setHintsUniform(uniforms);
|
renderer.setHintsUniform(uniforms);
|
||||||
|
@ -206,7 +210,9 @@ export abstract class XCAAStrategy extends AntialiasingStrategy {
|
||||||
const resolveProgram = this.getResolveProgram(renderContext);
|
const resolveProgram = this.getResolveProgram(renderContext);
|
||||||
gl.useProgram(resolveProgram.program);
|
gl.useProgram(resolveProgram.program);
|
||||||
renderContext.vertexArrayObjectExt.bindVertexArrayOES(this.resolveVAO);
|
renderContext.vertexArrayObjectExt.bindVertexArrayOES(this.resolveVAO);
|
||||||
renderer.setFramebufferSizeUniform(resolveProgram.uniforms);
|
gl.uniform2i(resolveProgram.uniforms.uFramebufferSize,
|
||||||
|
this.destFramebufferSize[0],
|
||||||
|
this.destFramebufferSize[1]);
|
||||||
gl.activeTexture(renderContext.gl.TEXTURE0);
|
gl.activeTexture(renderContext.gl.TEXTURE0);
|
||||||
gl.bindTexture(renderContext.gl.TEXTURE_2D, this.aaAlphaTexture);
|
gl.bindTexture(renderContext.gl.TEXTURE_2D, this.aaAlphaTexture);
|
||||||
gl.uniform1i(resolveProgram.uniforms.uAAAlpha, 0);
|
gl.uniform1i(resolveProgram.uniforms.uAAAlpha, 0);
|
||||||
|
@ -1078,9 +1084,11 @@ export class MCAAMulticolorStrategy extends MCAAStrategy {
|
||||||
|
|
||||||
// Resolve.
|
// Resolve.
|
||||||
const resolveProgram = this.getResolveProgram(renderContext);
|
const resolveProgram = this.getResolveProgram(renderContext);
|
||||||
renderContext.gl.useProgram(resolveProgram.program);
|
gl.useProgram(resolveProgram.program);
|
||||||
renderContext.vertexArrayObjectExt.bindVertexArrayOES(this.resolveVAO);
|
renderContext.vertexArrayObjectExt.bindVertexArrayOES(this.resolveVAO);
|
||||||
renderer.setFramebufferSizeUniform(resolveProgram.uniforms);
|
gl.uniform2i(resolveProgram.uniforms.uFramebufferSize,
|
||||||
|
this.destFramebufferSize[0],
|
||||||
|
this.destFramebufferSize[1]);
|
||||||
renderContext.gl.activeTexture(renderContext.gl.TEXTURE0);
|
renderContext.gl.activeTexture(renderContext.gl.TEXTURE0);
|
||||||
renderContext.gl.bindTexture(renderContext.gl.TEXTURE_2D, this.aaAlphaTexture);
|
renderContext.gl.bindTexture(renderContext.gl.TEXTURE_2D, this.aaAlphaTexture);
|
||||||
renderContext.gl.uniform1i(resolveProgram.uniforms.uAAAlpha, 0);
|
renderContext.gl.uniform1i(resolveProgram.uniforms.uAAAlpha, 0);
|
||||||
|
|
Loading…
Reference in New Issue