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) {
|
||||
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 {
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue