Skip to content
bg2 engine

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(renderer: Renderer)

The render queue is created internally when the renderer initializes it.

Set the current camera matrices used by all queued render states:

rq.viewMatrix = camera.viewMatrix;
rq.projectionMatrix = camera.projectionMatrix;

Array of light data (light + transform) added via addLight():

const lights = rq.lights; // LightData[]

Internal array of QueueItem structures, one per render layer:

const queues = rq.queues;

Reference back to the owning Renderer:

const renderer = rq.renderer;

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);

Disables the queue for a given layer (sets enabled to false):

rq.disableQueue(RenderLayer.OPAQUE_DEFAULT);

Note: The current implementation sets enabled = true in 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);

Returns the QueueItem for a given layer, or undefined:

const queue = rq.getQueue(RenderLayer.OPAQUE_DEFAULT);

Clears all item queues and lights at the start of each frame:

rq.newFrame(); // Call once per frame before adding items

addPolyList() — 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 cullBackFace pipeline
  • false → uses cullFaceDisabled pipeline

Adds a light entry for shadow mapping. The depth texture is cleared each frame:

rq.addLight(light, lightTransformMatrix);

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