NSWTL.INFO
Switch Torrent Library
Oberon Object Tiler
NSWTL GAMEHUB
Games Index

Oberon — Object Tiler

Oberon Object Tiler — Overview and practical guide

Oberon Object Tiler (commonly shortened to “Object Tiler”) is a tool and a design approach for arranging graphical objects (tiles) on a 2‑D surface based on the concepts from the Oberon family of languages and user‑interface toolkits. It’s used where predictable, programmatic layout of repeated or varying tiles is needed: GUIs, map editors, CAD-like visual editors, game UI debug views, and rapid UI prototyping. Below I explain concepts, architecture, usage patterns, implementation notes, and practical tips for designing and using an Object Tiler effectively.

What it is

Oberon Object Tiler is a technique/tool for dividing complex Oberon-system data structures (objects, records, modules) into manageable, cache-friendly, or displayable tiles—useful for memory layout, incremental rendering, or editor views in Oberon-like languages and systems. Oberon Object Tiler

What is the Oberon Object Tiler?

At its core, the Oberon Object Tiler is a software and hardware-accelerated memory management and rendering technique inspired by the design principles of the Oberon operating system (developed by Niklaus Wirth and his associates at ETH Zurich). However, the modern interpretation goes beyond the original OS. Oberon Object Tiler — Overview and practical guide

The "Object Tiler" refers to a specialized allocator and screen-space partitioner that treats every visual element as a first-class object. Unlike traditional renderers that push vertices in a linear stream, the Oberon Object Tiler organizes the screen into dynamic tiles (typically 32x32 or 64x64 pixel blocks). Each object is assigned to the specific tiles it intersects. This tiling occurs not at the application level, but deep within the rendering pipeline, often leveraging GPU compute shaders. What object is being drawn

In essence, the Oberon Object Tiler answers three questions simultaneously:

  1. What object is being drawn?
  2. Which tile(s) on the screen does it occupy?
  3. Why should that object be drawn before or after its neighbors?

7. Implementation in Oberon-2

A simplified fragment of the tiler’s split procedure (from System.Tool in ETH Oberon):

PROCEDURE SplitViewer*(V: Viewer; x, y: INTEGER);
  VAR newV: Viewer; splitX: INTEGER;
BEGIN
  splitX := x;
  IF (splitX > V.frame.X) & (splitX < V.frame.X + V.frame.W) THEN
    NEW(newV);
    newV.frame.X := splitX;
    newV.frame.Y := V.frame.Y;
    newV.frame.W := V.frame.X + V.frame.W - splitX;
    newV.frame.H := V.frame.H;
    V.frame.W := splitX - V.frame.X;
    newV.obj := V.obj;   (* same object, different view *)
    InsertViewer(V, newV);
    Restore(V);
    Restore(newV)
  END
END SplitViewer;