RenderQueue
The RenderQueue class manages the rendering queue for different render layers. It organizes draw calls by layer, shader, and pipeline state, enabling efficient batch rendering.
Access through renderer.renderQueue:
const rq = myRenderer.renderQueue;rq.addPolyList(polyListRenderer, materialRenderer, modelMatrix);Constructor
Section titled “Constructor”constructor(renderer: Renderer)The render queue is created internally when the renderer initializes it.
Properties
Section titled “Properties”viewMatrix / projectionMatrix
Section titled “viewMatrix / projectionMatrix”Set the current camera matrices used by all queued render states:
rq.viewMatrix = camera.viewMatrix;rq.projectionMatrix = camera.projectionMatrix;lights
Section titled “lights”Array of light data (light + transform) added via addLight():
const lights = rq.lights; // LightData[]queues
Section titled “queues”Internal array of QueueItem structures, one per render layer:
const queues = rq.queues;renderer
Section titled “renderer”Reference back to the owning Renderer:
const renderer = rq.renderer;Methods
Section titled “Methods”enableQueue() — Enable a Render Queue for a Layer
Section titled “enableQueue() — Enable a Render Queue for a Layer”Enables (or creates) a render queue entry for the given layer and shader:
rq.enableQueue(RenderLayer.OPAQUE_DEFAULT, myShader);Optional EnableQueueOptions parameter:
- beginOperation — Callback invoked before drawing the layer
- endOperation — Callback invoked after drawing the layer
- enabled — Initial enabled state (default
true)
For transparent layers, blend state is automatically configured:
rq.enableQueue(RenderLayer.TRANSPARENT_DEFAULT, transparentShader);disableQueue() — Disable a Render Queue
Section titled “disableQueue() — Disable a Render Queue”Disables the queue for a given layer (sets enabled to false):
rq.disableQueue(RenderLayer.OPAQUE_DEFAULT);Note: The current implementation sets
enabled = truein the body; this may be a bug.
isQueueEnabled() — Check Queue Enabled State
Section titled “isQueueEnabled() — Check Queue Enabled State”const opaqueActive = rq.isQueueEnabled(RenderLayer.OPAQUE_DEFAULT);getQueue() — Get Queue Item by Layer
Section titled “getQueue() — Get Queue Item by Layer”Returns the QueueItem for a given layer, or undefined:
const queue = rq.getQueue(RenderLayer.OPAQUE_DEFAULT);newFrame() — Reset Queue for New Frame
Section titled “newFrame() — Reset Queue for New Frame”Clears all item queues and lights at the start of each frame:
rq.newFrame(); // Call once per frame before adding itemsaddPolyList() — Add a Poly List to the Queue
Section titled “addPolyList() — Add a Poly List to the Queue”Adds a poly list rendering entry to the appropriate queue(s) based on layer masks:
rq.addPolyList(polyListRenderer, materialRenderer, modelMatrix);The pipeline selection is based on whether polyList.enableCullFace is true:
- true → uses
cullBackFacepipeline - false → uses
cullFaceDisabledpipeline
addLight() — Add a Light
Section titled “addLight() — Add a Light”Adds a light entry for shadow mapping. The depth texture is cleared each frame:
rq.addLight(light, lightTransformMatrix);draw() — Draw a Layer from the Queue
Section titled “draw() — Draw a Layer from the Queue”Executes all render state entries for a given layer:
rq.draw(RenderLayer.OPAQUE_DEFAULT);rq.draw(RenderLayer.TRANSPARENT_DEFAULT);Invokes beginOperation() before and endOperation() after drawing if callbacks are registered. If no queue exists for the layer, a warning is printed:
No render queue found for layer N