Stop calling `getParameter` and `getBufferParameter`.

They're incredibly slow in Chrome.
This commit is contained in:
Patrick Walton 2017-10-25 19:38:41 -07:00
parent 77f135a4ba
commit f8c950d39a
2 changed files with 18 additions and 14 deletions

View File

@ -163,11 +163,9 @@ export abstract class Renderer {
}
setFramebufferSizeUniform(uniforms: UniformMap) {
const renderContext = this.renderContext;
const currentViewport = renderContext.gl.getParameter(renderContext.gl.VIEWPORT);
renderContext.gl.uniform2i(uniforms.uFramebufferSize,
currentViewport[2],
currentViewport[3]);
this.renderContext.gl.uniform2i(uniforms.uFramebufferSize,
this.destAllocatedSize[0],
this.destAllocatedSize[1]);
}
setTransformAndTexScaleUniformsForDest(uniforms: UniformMap): void {
@ -307,7 +305,7 @@ export abstract class Renderer {
if (instanceRange.isEmpty)
continue;
const meshes = this.meshes[objectIndex];
const meshData = this.meshData[objectIndex];
// Set up implicit cover state.
gl.depthFunc(this.depthFunction);
@ -333,8 +331,7 @@ export abstract class Renderer {
this.setPathColorsUniform(objectIndex, directInteriorProgram.uniforms, 0);
this.pathTransformBufferTextures[objectIndex]
.bind(gl, directInteriorProgram.uniforms, 1);
let indexCount = gl.getBufferParameter(gl.ELEMENT_ARRAY_BUFFER, gl.BUFFER_SIZE) /
UINT32_SIZE;
let indexCount = meshData.coverInteriorIndices.byteLength / UINT32_SIZE;
if (!this.pathIDsAreInstanced) {
gl.drawElements(gl.TRIANGLES, indexCount, gl.UNSIGNED_INT, 0);
} else {
@ -369,8 +366,7 @@ export abstract class Renderer {
if (renderingMode === 'color')
this.setPathColorsUniform(objectIndex, directCurveProgram.uniforms, 0);
this.pathTransformBufferTextures[objectIndex].bind(gl, directCurveProgram.uniforms, 1);
indexCount = gl.getBufferParameter(gl.ELEMENT_ARRAY_BUFFER, gl.BUFFER_SIZE) /
UINT32_SIZE;
indexCount = meshData.coverCurveIndices.byteLength / UINT32_SIZE;
if (!this.pathIDsAreInstanced) {
gl.drawElements(gl.TRIANGLES, indexCount, gl.UNSIGNED_INT, 0);
} else {

View File

@ -179,8 +179,12 @@ export abstract class XCAAStrategy extends AntialiasingStrategy {
protected setAAUniforms(renderer: Renderer, uniforms: UniformMap) {
const renderContext = renderer.renderContext;
const gl = renderContext.gl;
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);
this.pathBoundsBufferTexture.bind(renderContext.gl, uniforms, 1);
renderer.setHintsUniform(uniforms);
@ -206,7 +210,9 @@ export abstract class XCAAStrategy extends AntialiasingStrategy {
const resolveProgram = this.getResolveProgram(renderContext);
gl.useProgram(resolveProgram.program);
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.bindTexture(renderContext.gl.TEXTURE_2D, this.aaAlphaTexture);
gl.uniform1i(resolveProgram.uniforms.uAAAlpha, 0);
@ -1078,9 +1084,11 @@ export class MCAAMulticolorStrategy extends MCAAStrategy {
// Resolve.
const resolveProgram = this.getResolveProgram(renderContext);
renderContext.gl.useProgram(resolveProgram.program);
gl.useProgram(resolveProgram.program);
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.bindTexture(renderContext.gl.TEXTURE_2D, this.aaAlphaTexture);
renderContext.gl.uniform1i(resolveProgram.uniforms.uAAAlpha, 0);