Skip to content
This repository has been archived by the owner on Oct 20, 2020. It is now read-only.

Performance Todo list

Cedric Pinson edited this page Aug 29, 2017 · 6 revisions

No Change render

  • If only camera and uniform change (no node dirty, no StateAttribute dirty) after a viewer update, just apply last frame glcalls with uniform update. (only the glcalls, no cull, no draw)

Inter Frame Cache

  • CullVisitor Node cache (only compute/transform node with modified children)
  • State Graph Cache: reuse scene previous state attached to geometry, when no change in hierarchy above
  • Store compute bounds dirty flags generalized to visitor with specific flags or a way to tell that this frame not bounds change at all was needed. (shadow compute bound visitor recomputed each frame because specific flags.)
  • Reuse frustum culling info from last frame (coherent culling algorithms)

Reduce pressure on WebGL

  • prune unnecessary calls: glViewport
  • Only bind uniform on Shader program change and/or value Change
  • Only bind texture null if render texture is the texture slot being null Binded
  • Only bind texture if not already Binded
  • Uniform packing
  • Texture unit dynamic binding (using texture unit int uniform)
  • Resources cache: identify duplicate resources (Mesh, Textures, Shader) and reuse them
  • Always enable frustum culling
  • Do not reset states to zero between frames when single viewer #399
  • Fix Vertex Attribute and Material absence of link so that Shader Compiler know really what VA are needed
  • Use/allow Vertex Array Object extension
  • Use/allow UINT index buffer
  • Compress Vertex Atribute (vertex color = 8bits, normal => 16bits, etc.)

Computation Optimizations

  • If Rigid Body Transforms only, enable "Uniform scaling" mode: only Compute and Bind NormalMatrix shader parameter if using non-uniform scaling
  • Shader Program Uniform cache: don't set uniform values if already set.
  • Shader Program Uniform: don't copy, use directly arrays.
  • Cull empty viewport/camera completely (no FrameBuffer binding)

Ensure Zero allocation render loop

  • Intersection Visitors: add matrix stack support #107
  • Double check any mem-leaks and use memory pools whenever possible
  • Enhance getWorldMatrices to getWorldMatrix usage in Examples