Skip to content
bg2 engine

Renderer

Base class for renderers. Represents the graphics rendering target (typically a canvas). The renderer provides a factory interface to create rendering objects (PolyListRenderer, MaterialRenderer, TextureRenderer, Pipeline, etc.).

The base class defines abstract methods that are implemented by concrete renderers. The current implementation is WebGL-based.

import Renderer from "bg2e-js/ts/render/Renderer.ts";

See also webgl/Renderer.js for the WebGL implementation (WebGLRenderer).

Defines supported rendering features:

import { EngineFeatures } from "bg2e-js/ts/render/Renderer.ts";
const supportsRTT = renderer.supportsFeatures(EngineFeatures.RENDER_TARGET_TEXTURES);
  • RENDER_TARGET_TEXTURES (0x1 << 0) — Supports render-to-texture via WebGL extensions.
  • RENDER_TARGET_FLOAT (0x1 << 1) — Supports floating-point render targets.
  • RENDER_TARGET_DEPTH (0x1 << 2) — Supports depth render targets.
constructor(identifier: string)
  • identifier — A string identifier for the renderer (e.g., “webgl”).
  • frameBuffer — Returns the FrameBuffer instance associated with this renderer.
  • canvas — Returns the Canvas linked to this renderer.
  • factory — Returns a RendererFactory interface for creating rendering objects.

Methods (WebGL Implementation: WebGLRenderer)

Section titled “Methods (WebGL Implementation: WebGLRenderer)”
import WebGLRenderer from "bg2e-js/ts/render/webgl/Renderer.js";
const renderer = new WebGLRenderer();

Initializes the renderer with a canvas. Creates the WebGL context internally.

Returns the raw WebGLRenderingContext object (WebGL1). Used for direct WebGL API calls from custom shaders.

Returns the WebGLFrameBuffer instance. Use frameBuffer.clear() to clear buffers.

set viewport(vp: Vec) / get viewport(): Vec

Section titled “set viewport(vp: Vec) / get viewport(): Vec”

Set/get the viewport dimensions. Typically called in reshape() and synced with canvas size on every frame update.

Returns a unique identifier for this renderer instance (string).

Returns the type name, "WebGL".

postReshape(width: number, height: number): void

Section titled “postReshape(width: number, height: number): void”

Called when the canvas is resized. Should forward to renderer.state.viewport = new Vec(width, height).

Triggers a redraw in the next frame.

supportsFeatures(feature: number): boolean

Section titled “supportsFeatures(feature: number): boolean”

Checks if a specific EngineFeature is supported. Returns true/false.

Returns the maximum number of simultaneous render targets. Typically 1 for WebGL1.

Clears the current frame buffer (equivalent to calling state.clear()).

Returns the State object, which provides access to WebGL rendering parameters (clearColor, viewport, depthTestEnabled, etc.).

Returns true if WebGL debugging is enabled. Debugging can be enabled by appending ?debug=true to the URL.

The factory creates all rendering-specific objects:

const factory = renderer.factory;
MethodReturnsDescription
factory.polyList(plist)PolyListRendererWraps a PolyList with a renderer
factory.material(material)MaterialRendererWraps a Material with a renderer
factory.texture(texture)TextureRendererWraps a Texture for rendering operations
factory.renderBuffer()RenderBufferCreates a new RenderBuffer for RTT/cubemap operations
factory.skySphere()SkySphereCreates a new SkySphere instance
factory.skyCube()SkyCubeCreates a new SkyCube instance
factory.environment()EnvironmentCreates an Environment for IBL
factory.textureMerger()TextureMergerRendererCreates a TextureMerger for merging channels from multiple textures
factory.pipeline()PipelineCreates a new Pipeline for configuring blend state, depth/cull settings
factory.scene()SceneRendererCreates a new SceneRenderer for scene-graph rendering
factory.shadowRenderer()ShadowRendererCreates a ShadowRenderer for shadow map generation

The base Renderer defines the following methods. Concrete renderers must override them:

  • polyListFactory(plist: PolyList): PolyListRenderer — Creates the renderer wrapper for a polylist.
  • materialFactory(material: Material): MaterialRenderer — Creates the renderer wrapper for a material.
  • textureFactory(texture: Texture): TextureRenderer — Creates a texture renderer wrapper.
  • renderBufferFactory(): RenderBuffer — Creates a render buffer.
  • skySphereFactory(): SkySphere / skyCubeFactory(): SkyCube — Creates sky geometry instances.
  • pipelineFactory(): Pipeline — Creates a new pipeline.
  • sceneRendererFactory(): SceneRenderer — Creates the scene renderer.
  • shadowRendererFactory(): ShadowRenderer — Creates a shadow renderer.