# Module `graphics3d` - A library for programming simple 3D graphics in occam-pi

A library for programming simple 3D graphics in occam-pi.

This library provides for simple 3D graphics in occam-pi, using simple rasters.

Note: the general [serial] techniques/algorithms used in this library are based on code from lightsrc.cpp and glenz.cpp by Marcus Lindblom.

## Index

- Protocol `G3D.ALL.CONTROL` - Overall control for graphics pipeline
  - Tag `reset.all` - Reset all components to default state
- Protocol `G3D.GEN.CONTROL` - Polygon points generator control
  - Tag `add.scale` - Add to the current scale
  - Tag `add.trans` - Add to the current translation
  - Tag `reset` - Reset generator to default state
  - Tag `set.scale` - Absolutely set the scale
  - Tag `set.trans` - Absolutely set the translation
  - Tag `set.trigger` - Set trigger control
- Constant `G3D.MAX.POLY.POINTS` - Maximum number of points in a polygon (see )
- Constant `G3D.MAX.SCAN.HEIGHT` - Maximum height of any particular polygon
- Protocol `G3D.PGN.CONTROL` - Polygon generator control
  - Tag `reset` - Reset polygon generator to default state
  - Tag `set.backfaces` - Whether back faces of solid objects should be generated
  - Tag `set.face.colour` - Set individual face colour
  - Tag `set.face.colours` - Set all face colours
  - Tag `set.trimap` - Generate triangular polygons only
- Record `G3D.POINT2` - Integer point in 2D space
- Record `G3D.POINT2.3` - Integer point in 2D space, retains original Z as a REAL32
- Record `G3D.POINT3` - Real point in 3D space (REAL32s)
- Record `G3D.POLY` - General polygon in 2D space, retails original Z as REAL32s
- Record `G3D.POLY.SCAN` - Scan-line converted polygon in 2D space
- Protocol `G3D.PRJ.CONTROL` - Polygon points 3D-to-2D projection control
  - Tag `reset` - Reset projector to default state
  - Tag `set.2dshift` - Set 2D translation
  - Tag `set.3dshift` - Set 3D translation (applied before projection)
  - Tag `set.scaling` - Set 2D scaling
  - Tag `set.zdepth` - Set Z depth offset (pushes scene away from camera)
- Protocol `G3D.PSC.CONTROL` - Polygon scan-line generator control
  - Tag `reset` - Resets scan-line generator to default state
- Protocol `G3D.RDR.CONTROL` - Polygon render (shader) control
  - Tag `reset` - Resets shader to default state
  - Tag `set.mode` - Set shader mode (see )
- Protocol `G3D.RENDER.ENGINE.LINK` - Graphics pipeline link protocol
  - Tag `raster` - Raster to render on and forward
  - Tag `set.next` - Set the next renderer in the pipeline
- Group `G3D.RENDER.MODE` - polygon rendering modes
  - Constant `G3D.RENDER.MODE.GLENZ` - Glenz-effect shading
  - Constant `G3D.RENDER.MODE.NONE` - Constant shading
  - Constant `G3D.RENDER.MODE.NORM` - Normal vector based shading
- Protocol `G3D.ROT.CONTROL` - Points rotation control
  - Tag `add.increment` - Add to the increment
  - Tag `reset` - Reset rotation to default state
  - Tag `set.angle` - Absolutely set the angle of rotation
  - Tag `set.increment` - Absolutely set the increment
  - Tag `set.mode` - Set the rotation mode (see )
- Group `G3D.ROTATE.MODE` - point/polygon rotation modes
  - Constant `G3D.ROTATE.MODE.DEMO` - Demo-effect rotations
  - Constant `G3D.ROTATE.MODE.NONE` - No rotation
  - Constant `G3D.ROTATE.MODE.NX` - Negative rotate on X axis
  - Constant `G3D.ROTATE.MODE.NY` - Negative rotate on Y axis
  - Constant `G3D.ROTATE.MODE.NZ` - Negative rotate on Z axis
  - Constant `G3D.ROTATE.MODE.X` - Rotate on X axis
  - Constant `G3D.ROTATE.MODE.Y` - Rotate on Y axis
  - Constant `G3D.ROTATE.MODE.Z` - Rotate on Z axis
- Protocol `G3D.TMR.CONTROL` - Graphics pipeline speed control
  - Tag `faster` - Go faster
  - Tag `pause` - Pause/unpause the rasters flowing through the network
  - Tag `reset` - Resets the timer control
  - Tag `set.fps` - Set frames-per-second absolutely
  - Tag `slower` - Go slower
- Channel type `G3D.TRIG` - Generator trigger channel-type
- Process `cubepoints.generator` - Cube point generator
- Process `cubify.points` - Generates cube polygons from cube points
- Process `fbypoints.generator` - Inmos butterfly logo generator
- Process `flutterby.points` - Generates polygons representing the Inmos style butterfly logo
- Process `g3d.gen.control.delta` - Delta for protocol
- Process `g3d.pgn.control.delta` - Delta for protocol
- Process `g3d.point2.3.delta` - Delta for mobile arrays of the type
- Process `g3d.point2.delta` - Delta for mobile arrays of the type
- Process `g3d.point3.delta` - Delta for mobile arrays of the type
- Process `g3d.poly.delta` - Delta for mobile arrays of the type
- Process `g3d.poly.scan.delta` - Delta for mobile arrays of the type
- Process `g3d.prj.control.delta` - Delta for protocol
- Process `g3d.psc.control.delta` - Delta for protocol
- Process `g3d.rdr.control.delta` - Delta for protocol
- Process `g3d.rot.control.delta` - Delta for protocol
- Process `glenz.network` - Implements a basic "Glenz cube"
- Process `glenz.network.spawn` - Dynamically spawns a new 'glenz.network'
- Process `glenz.network2` - Implements a basic "Glenz cube"
- Variable `link?` - Link channel
- Process `planar.path` - Moves a 3D object around a plane following an elliptical path
- Process `points.3d.to.2d3` - Projects 3D points into 2D, preserves Z information
- Process `points3d.rotate` - Point rotator
- Process `poly.scanlines` - Converts polygons to scan-line data
- Process `raster.buffer` - Simple raster buffer
- Process `raster.chain` - Implements raster render chain
- Process `raster.chain.head` - Head of the raster render chain
- Process `raster.chain.tail` - Tail of the raster render chain
- Process `raster.clearer` - Clears rasters
- Process `raster.fader` - Fades rasters
- Process `raster.timed.buffer` - Timed raster buffer
- Process `render.polyframe` - Renders polygons as a series of lines (wireframe)
- Process `render.polyscans` - Renders polygon scan-line data onto a raster
- Process `rotate.orchestra1` - Orchestrates components

## Declarations

### `graphics3d.inc`:41Constant `G3D.MAX.POLY.POINTS`

`VAL INT G3D.MAX.POLY.POINTS`

Maximum number of points in a polygon (see `G3D.POLY`).

### `graphics3d.inc`:44Constant `G3D.MAX.SCAN.HEIGHT`

`VAL INT G3D.MAX.SCAN.HEIGHT`

Maximum height of any particular polygon.

### `graphics3d.inc`:46Group `G3D.RENDER.MODE`

``

polygon rendering modes.

### `graphics3d.inc`:47Constant `G3D.RENDER.MODE.NONE`

`VAL INT G3D.RENDER.MODE.NONE`

Constant shading.

### `graphics3d.inc`:48Constant `G3D.RENDER.MODE.GLENZ`

`VAL INT G3D.RENDER.MODE.GLENZ`

Glenz-effect shading.

### `graphics3d.inc`:49Constant `G3D.RENDER.MODE.NORM`

`VAL INT G3D.RENDER.MODE.NORM`

Normal vector based shading.

### `graphics3d.inc`:51Group `G3D.ROTATE.MODE`

``

point/polygon rotation modes.

### `graphics3d.inc`:52Constant `G3D.ROTATE.MODE.NONE`

`VAL INT G3D.ROTATE.MODE.NONE`

No rotation.

### `graphics3d.inc`:53Constant `G3D.ROTATE.MODE.DEMO`

`VAL INT G3D.ROTATE.MODE.DEMO`

Demo-effect rotations.

### `graphics3d.inc`:54Constant `G3D.ROTATE.MODE.X`

`VAL INT G3D.ROTATE.MODE.X`

Rotate on X axis.

### `graphics3d.inc`:55Constant `G3D.ROTATE.MODE.NX`

`VAL INT G3D.ROTATE.MODE.NX`

Negative rotate on X axis.

### `graphics3d.inc`:56Constant `G3D.ROTATE.MODE.Y`

`VAL INT G3D.ROTATE.MODE.Y`

Rotate on Y axis.

### `graphics3d.inc`:57Constant `G3D.ROTATE.MODE.NY`

`VAL INT G3D.ROTATE.MODE.NY`

Negative rotate on Y axis.

### `graphics3d.inc`:58Constant `G3D.ROTATE.MODE.Z`

`VAL INT G3D.ROTATE.MODE.Z`

Rotate on Z axis.

### `graphics3d.inc`:59Constant `G3D.ROTATE.MODE.NZ`

`VAL INT G3D.ROTATE.MODE.NZ`

Negative rotate on Z axis.

### `graphics3d.inc`:65Record `G3D.POINT3`

`DATA TYPE G3D.POINT3`

Real point in 3D space (REAL32s).

### `graphics3d.inc`:71Record `G3D.POINT2.3`

`DATA TYPE G3D.POINT2.3`

Integer point in 2D space, retains original Z as a REAL32.

### `graphics3d.inc`:78Record `G3D.POINT2`

`DATA TYPE G3D.POINT2`

Integer point in 2D space.

### `graphics3d.inc`:85Record `G3D.POLY`

`DATA TYPE G3D.POLY`

General polygon in 2D space, retails original Z as REAL32s.

### `graphics3d.inc`:96Record `G3D.POLY.SCAN`

`DATA TYPE G3D.POLY.SCAN`

Scan-line converted polygon in 2D space.

### `graphics3d.inc`:109Channel type `G3D.TRIG`

`CHAN TYPE G3D.TRIG`

Generator trigger channel-type.

### `graphics3d.inc`:115Protocol `G3D.GEN.CONTROL`

`PROTOCOL G3D.GEN.CONTROL`

Polygon points generator control.

### `graphics3d.inc`:117Tag `reset`

`reset`

Reset generator to default state.

### `graphics3d.inc`:118Tag `add.scale`

`add.scale; [3]REAL32`

Add to the current scale.

### `graphics3d.inc`:119Tag `set.scale`

`set.scale; [3]REAL32`

Absolutely set the scale.

### `graphics3d.inc`:120Tag `add.trans`

`add.trans; [3]REAL32`

Add to the current translation.

### `graphics3d.inc`:121Tag `set.trans`

`set.trans; [3]REAL32`

Absolutely set the translation.

### `graphics3d.inc`:122Tag `set.trigger`

`set.trigger; BOOL; G3D.TRIG?`

Set trigger control.

### `graphics3d.inc`:126Protocol `G3D.ROT.CONTROL`

`PROTOCOL G3D.ROT.CONTROL`

Points rotation control.

### `graphics3d.inc`:128Tag `reset`

`reset`

Reset rotation to default state.

### `graphics3d.inc`:129Tag `add.increment`

`add.increment; REAL32`

Add to the increment.

### `graphics3d.inc`:130Tag `set.increment`

`set.increment; REAL32`

Absolutely set the increment.

### `graphics3d.inc`:131Tag `set.angle`

`set.angle; REAL32`

Absolutely set the angle of rotation.

### `graphics3d.inc`:132Tag `set.mode`

`set.mode; INT`

Set the rotation mode (see `G3D.ROTATE.MODE`).

### `graphics3d.inc`:136Protocol `G3D.PRJ.CONTROL`

`PROTOCOL G3D.PRJ.CONTROL`

Polygon points 3D-to-2D projection control.

### `graphics3d.inc`:138Tag `reset`

`reset`

Reset projector to default state.

### `graphics3d.inc`:139Tag `set.scaling`

`set.scaling; [2]REAL32`

Set 2D scaling.

### `graphics3d.inc`:140Tag `set.zdepth`

`set.zdepth; REAL32`

Set Z depth offset (pushes scene away from camera).

### `graphics3d.inc`:141Tag `set.2dshift`

`set.2dshift; [2]INT`

Set 2D translation.

### `graphics3d.inc`:142Tag `set.3dshift`

`set.3dshift; [3]REAL32`

Set 3D translation (applied before projection).

### `graphics3d.inc`:146Protocol `G3D.PGN.CONTROL`

`PROTOCOL G3D.PGN.CONTROL`

Polygon generator control.

### `graphics3d.inc`:148Tag `reset`

`reset`

Reset polygon generator to default state.

### `graphics3d.inc`:149Tag `set.trimap`

`set.trimap; BOOL`

Generate triangular polygons only.

### `graphics3d.inc`:150Tag `set.backfaces`

`set.backfaces; BOOL`

Whether back faces of solid objects should be generated.

### `graphics3d.inc`:151Tag `set.face.colour`

`set.face.colour; INT; INT`

Set individual face colour.

### `graphics3d.inc`:152Tag `set.face.colours`

`set.face.colours; MOBILE []INT`

Set all face colours.

### `graphics3d.inc`:156Protocol `G3D.PSC.CONTROL`

`PROTOCOL G3D.PSC.CONTROL`

Polygon scan-line generator control.

### `graphics3d.inc`:158Tag `reset`

`reset`

Resets scan-line generator to default state.

### `graphics3d.inc`:162Protocol `G3D.RDR.CONTROL`

`PROTOCOL G3D.RDR.CONTROL`

Polygon render (shader) control.

### `graphics3d.inc`:164Tag `reset`

`reset`

Resets shader to default state.

### `graphics3d.inc`:165Tag `set.mode`

`set.mode; INT`

Set shader mode (see `G3D.RENDER.MODE`).

### `graphics3d.inc`:169Protocol `G3D.ALL.CONTROL`

`PROTOCOL G3D.ALL.CONTROL`

Overall control for graphics pipeline.

### `graphics3d.inc`:171Tag `reset.all`

`reset.all`

Reset all components to default state.

### `graphics3d.inc`:175Protocol `G3D.TMR.CONTROL`

`PROTOCOL G3D.TMR.CONTROL`

Graphics pipeline speed control.

### `graphics3d.inc`:177Tag `reset`

`reset`

Resets the timer control.

### `graphics3d.inc`:178Tag `pause`

`pause`

Pause/unpause the rasters flowing through the network.

### `graphics3d.inc`:179Tag `faster`

`faster`

Go faster.

### `graphics3d.inc`:180Tag `slower`

`slower`

Go slower.

### `graphics3d.inc`:181Tag `set.fps`

`set.fps; INT`

Set frames-per-second absolutely.

### `graphics3d.inc`:190Protocol `G3D.RENDER.ENGINE.LINK`

`PROTOCOL G3D.RENDER.ENGINE.LINK`

Graphics pipeline link protocol.

### `graphics3d.inc`:192Tag `raster`

`raster; RASTER`

Raster to render on and forward.

### `graphics3d.inc`:193Tag `set.next`

`set.next; INT; G3D.RENDER.ENGINE!`

Set the next renderer in the pipeline.

### `graphics3d.inc`:200Variable `link?`

`CHAN G3D.RENDER.ENGINE.LINK`

Link channel.

### `rasterutil.occ`:30Process `raster.buffer`

`PROC raster.buffer (CHAN RASTER in?, out!)`

Simple raster buffer. Basic raster buffer process.

#### Parameters:

`CHAN RASTER` | `in` | Rasters in
`CHAN RASTER` | `out` | Rasters out

### `rasterutil.occ`:46Process `raster.timed.buffer`

`PROC raster.timed.buffer (CHAN RASTER in?, out!, VAL INT fps, CHAN G3D.TMR.CONTROL ctrl?)`

Timed raster buffer. Basic raster buffer process, but limits speed through at specified number of frames-per-second.

#### Parameters:

`CHAN RASTER` | `in` | Rasters in
`CHAN RASTER` | `out` | Rasters out
`VAL INT` | `fps` | Frames per second
`CHAN G3D.TMR.CONTROL` | `ctrl` | Control channel

### `rasterutil.occ`:104Process `raster.fader`

`PROC raster.fader (CHAN RASTER in?, out!)`

Fades rasters. Raster buffer that reduces the colour level of each of the components.

#### Parameters:

`CHAN RASTER` | `in` | Rasters in
`CHAN RASTER` | `out` | Rasters out

### `rasterutil.occ`:126Process `raster.clearer`

`PROC raster.clearer (CHAN RASTER in?, out!)`

Clears rasters. Raster buffer that clears rasters as they go through.

#### Parameters:

`CHAN RASTER` | `in` | Rasters in
`CHAN RASTER` | `out` | Rasters out

### `g3dnets.occ`:35Process `rotate.orchestra1`

`PROC rotate.orchestra1 (CHAN G3D.ROT.CONTROL rot.out!)`

Orchestrates components.

#### Parameters:

`CHAN G3D.ROT.CONTROL` | `rot.out` | Rotation control out.

### `g3dnets.occ`:71Process `planar.path`

`PROC planar.path (CHAN G3D.PRJ.CONTROL out!, VAL REAL32 xrad, zrad, pangle, iangle, VAL INT islow, VAL [3]REAL32 pos)`

Moves a 3D object around a plane following an elliptical path.

#### Parameters:

`CHAN G3D.PRJ.CONTROL` | `out` | Projection control.
`VAL REAL32` | `xrad` | X-radius of path.
`VAL REAL32` | `zrad` | Z-radius of path.
`VAL REAL32` | `pangle` | Tilt in XY plane of the path.
`VAL REAL32` | `iangle` | Tilt in XZ plane of the path.
`VAL INT` | `islow` | Slow-down setting
`VAL [3]REAL32` | `pos` | Initial position.

### `g3dnets.occ`:101Process `glenz.network`

`PROC glenz.network (G3D.RENDER.ENGINE? rlink.in, VAL INT width, height)`

Implements a basic "Glenz cube".

#### Parameters:

`G3D.RENDER.ENGINE?` | `rlink.in` | Render link.
`VAL INT` | `width` | Width of raster.
`VAL INT` | `height` | Height of raster.

### `g3dnets.occ`:137Process `glenz.network.spawn`

`PROC glenz.network.spawn (VAL INT width, height, CHAN G3D.RENDER.ENGINE! new.link!)`

Dynamically spawns a new 'glenz.network'.

#### Parameters:

`VAL INT` | `width` | Raster width.
`VAL INT` | `height` | Raster height.
`CHAN G3D.RENDER.ENGINE!` | `new.link` | Channel to communicate new object link.

### `g3dnets.occ`:153Process `glenz.network2`

`PROC glenz.network2 (G3D.RENDER.ENGINE? rlink.in, VAL INT width, height)`

Implements a basic "Glenz cube".

#### Parameters:

`G3D.RENDER.ENGINE?` | `rlink.in` | Render link.
`VAL INT` | `width` | Width of raster.
`VAL INT` | `height` | Height of raster.

### `graphics3d.occ`:88Process `cubepoints.generator`

`PROC cubepoints.generator (CHAN MOBILE []G3D.POINT3 out!, CHAN G3D.GEN.CONTROL ctrl?)`

Cube point generator. Generates a constant stream of points that represent a cube in 3D space.

#### Parameters:

`CHAN MOBILE []G3D.POINT3` | `out` | Points generated.
`CHAN G3D.GEN.CONTROL` | `ctrl` | Control channel.

### `graphics3d.occ`:172Process `fbypoints.generator`

`PROC fbypoints.generator (CHAN MOBILE []G3D.POINT3 out!, CHAN G3D.GEN.CONTROL ctrl?)`

Inmos butterfly logo generator. The pixel positions were generated by tracing from an Inmos promotional video showing the butterflies running on a Transputer network.

#### Parameters:

`CHAN MOBILE []G3D.POINT3` | `out` | Points generated.
`CHAN G3D.GEN.CONTROL` | `ctrl` | Control channel.

### `graphics3d.occ`:371Process `points3d.rotate`

`PROC points3d.rotate (CHAN MOBILE []G3D.POINT3 in?, out!, CHAN G3D.ROT.CONTROL ctrl?)`

Point rotator. Rotates an arbitrary set of points around the origin, such that it passes through the same sequence of moves repeatedly (e.g. for a spinning cube). Can also be used for static rotation when set with a zero increment.

#### Parameters:

`CHAN MOBILE []G3D.POINT3` | `in` | 3D points in.
`CHAN MOBILE []G3D.POINT3` | `out` | 3D points out.
`CHAN G3D.ROT.CONTROL` | `ctrl` | Control channel.

### `graphics3d.occ`:501Process `points.3d.to.2d3`

`PROC points.3d.to.2d3 (CHAN MOBILE []G3D.POINT3 in?, CHAN MOBILE []G3D.POINT2.3 out!, CHAN G3D.PRJ.CONTROL ctrl?)`

Projects 3D points into 2D, preserves Z information. Maps a set of 3D points down into a set of 2D points, preserving the Z depth information for later operations.

#### Parameters:

`CHAN MOBILE []G3D.POINT3` | `in` | 3D points in.
`CHAN MOBILE []G3D.POINT2.3` | `out` | 2D3 points out.
`CHAN G3D.PRJ.CONTROL` | `ctrl` | Control channel.

### `graphics3d.occ`:753Process `cubify.points`

`PROC cubify.points (CHAN MOBILE []G3D.POINT2.3 in?, CHAN MOBILE []G3D.POLY out!, CHAN G3D.PGN.CONTROL ctrl?)`

Generates cube polygons from cube points. Expects to receive 8 points at a time, and from these generates a set of polygons that represent a cube. Characteristics are controllable through the control channel (e.g. skip hidden surfaces).

#### Parameters:

`CHAN MOBILE []G3D.POINT2.3` | `in` | Points in (2D with Z-depth).
`CHAN MOBILE []G3D.POLY` | `out` | Polygons out.
`CHAN G3D.PGN.CONTROL` | `ctrl` | Control channel.

### `graphics3d.occ`:773Process `flutterby.points`

`PROC flutterby.points (CHAN MOBILE []G3D.POINT2.3 in?, CHAN MOBILE []G3D.POLY out!, CHAN G3D.PGN.CONTROL ctrl?)`

Generates polygons representing the Inmos style butterfly logo. Expects to receive 30 points at a time, and from these generates a set of polygons that represent the butterfly. Only the colour is controllable through the `ctrl?` channel.

#### Parameters:

`CHAN MOBILE []G3D.POINT2.3` | `in` | Points in (2D with Z-depth).
`CHAN MOBILE []G3D.POLY` | `out` | Polygons out.
`CHAN G3D.PGN.CONTROL` | `ctrl` | Control channel.

### `graphics3d.occ`:1013Process `poly.scanlines`

`PROC poly.scanlines (CHAN MOBILE []G3D.POLY in?, CHAN MOBILE []G3D.POLY.SCAN out!, CHAN G3D.PSC.CONTROL ctrl?)`

Converts polygons to scan-line data. Expects to receive sets of polygons on its input, which it then transforms into a set of G3D.POLY.SCAN structures.

#### Parameters:

`CHAN MOBILE []G3D.POLY` | `in` | Polygons input.
`CHAN MOBILE []G3D.POLY.SCAN` | `out` | Scan-line data output.
`CHAN G3D.PSC.CONTROL` | `ctrl` | Control channel.

### `graphics3d.occ`:1300Process `render.polyscans`

`PROC render.polyscans (CHAN MOBILE []G3D.POLY.SCAN data?, G3D.RENDER.ENGINE? rlink.in, CHAN G3D.RDR.CONTROL ctrl?)`

Renders polygon scan-line data onto a raster.

#### Parameters:

`CHAN MOBILE []G3D.POLY.SCAN` | `data` | Polygon scan-line data input.
`G3D.RENDER.ENGINE?` | `rlink.in` | Raster I/O.
`CHAN G3D.RDR.CONTROL` | `ctrl` | Control channel.

### `graphics3d.occ`:1317Process `render.polyframe`

`PROC render.polyframe (CHAN MOBILE []G3D.POLY data?, G3D.RENDER.ENGINE? rlink.in, CHAN G3D.RDR.CONTROL ctrl?)`

Renders polygons as a series of lines (wireframe).

#### Parameters:

`CHAN MOBILE []G3D.POLY` | `data` | Polygons input.
`G3D.RENDER.ENGINE?` | `rlink.in` | Raster I/O.
`CHAN G3D.RDR.CONTROL` | `ctrl` | Control channel.

### `graphics3d.occ`:1540Process `raster.chain.head`

`PROC raster.chain.head (CHAN RASTER in?, G3D.RENDER.ENGINE! head, CHAN G3D.RENDER.ENGINE! new.link?, VAL BOOL fade)`

Head of the raster render chain.

#### Parameters:

`CHAN RASTER` | `in` | Rasters in.
`G3D.RENDER.ENGINE!` | `head` | Head of raster render chain.
`CHAN G3D.RENDER.ENGINE!` | `new.link` | Channel on which new rendering engines are added.
`VAL BOOL` | `fade` | Whether to fade (TRUE) or clear (FALSE) rasters.

### `graphics3d.occ`:1582Process `raster.chain.tail`

`PROC raster.chain.tail (CHAN RASTER out!, G3D.RENDER.ENGINE? tail)`

Tail of the raster render chain.

#### Parameters:

`CHAN RASTER` | `out` | Rasters out.
`G3D.RENDER.ENGINE?` | `tail` | Tail of raster render chain.

### `graphics3d.occ`:1603Process `raster.chain`

`PROC raster.chain (CHAN RASTER in?, out!, CHAN G3D.RENDER.ENGINE! new.link?, VAL BOOL fade)`

Implements raster render chain.

#### Parameters:

`CHAN RASTER` | `in` | Rasters in.
`CHAN RASTER` | `out` | Rasters out.
`CHAN G3D.RENDER.ENGINE!` | `new.link` | Channel on which new rendering engines are added.
`VAL BOOL` | `fade` | Whether to fade (TRUE) or clear (FALSE) rasters.

### `g3dutil.occ`:32Process `g3d.point3.delta`

`PROC g3d.point3.delta (CHAN MOBILE []G3D.POINT3 in?, out.0!, out.1!)`

Delta for mobile arrays of the `G3D.POINT3` type.

#### Parameters:

`CHAN MOBILE []G3D.POINT3` | `in` | Points in.
`CHAN MOBILE []G3D.POINT3` | `out.0` | Points out.
`CHAN MOBILE []G3D.POINT3` | `out.1` | Points out.

### `g3dutil.occ`:49Process `g3d.point2.3.delta`

`PROC g3d.point2.3.delta (CHAN MOBILE []G3D.POINT2.3 in?, out.0!, out.1!)`

Delta for mobile arrays of the `G3D.POINT2.3` type.

#### Parameters:

`CHAN MOBILE []G3D.POINT2.3` | `in` | Points in.
`CHAN MOBILE []G3D.POINT2.3` | `out.0` | Points out.
`CHAN MOBILE []G3D.POINT2.3` | `out.1` | Points out.

### `g3dutil.occ`:65Process `g3d.point2.delta`

`PROC g3d.point2.delta (CHAN MOBILE []G3D.POINT2 in?, out.0!, out.1!)`

Delta for mobile arrays of the `G3D.POINT2` type.

#### Parameters:

`CHAN MOBILE []G3D.POINT2` | `in` | Points in.
`CHAN MOBILE []G3D.POINT2` | `out.0` | Points out.
`CHAN MOBILE []G3D.POINT2` | `out.1` | Points out.

### `g3dutil.occ`:81Process `g3d.poly.delta`

`PROC g3d.poly.delta (CHAN MOBILE []G3D.POLY in?, out.0!, out.1!)`

Delta for mobile arrays of the `G3D.POLY` type.

#### Parameters:

`CHAN MOBILE []G3D.POLY` | `in` | Polygons in.
`CHAN MOBILE []G3D.POLY` | `out.0` | Polygons out.
`CHAN MOBILE []G3D.POLY` | `out.1` | Polygons out.

### `g3dutil.occ`:97Process `g3d.poly.scan.delta`

`PROC g3d.poly.scan.delta (CHAN MOBILE []G3D.POLY.SCAN in?, out.0!, out.1!)`

Delta for mobile arrays of the `G3D.POLY.SCAN` type.

#### Parameters:

`CHAN MOBILE []G3D.POLY.SCAN` | `in` | Polygon scans in.
`CHAN MOBILE []G3D.POLY.SCAN` | `out.0` | Polygon scans out.
`CHAN MOBILE []G3D.POLY.SCAN` | `out.1` | Polygon scans out.

### `g3dutil.occ`:114Process `g3d.gen.control.delta`

`PROC g3d.gen.control.delta (CHAN G3D.GEN.CONTROL in?, out.0!, out.1!)`

Delta for `G3D.GEN.CONTROL` protocol.

#### Parameters:

`CHAN G3D.GEN.CONTROL` | `in` | Commands in.
`CHAN G3D.GEN.CONTROL` | `out.0` | Commands out.
`CHAN G3D.GEN.CONTROL` | `out.1` | Commands out.

### `g3dutil.occ`:161Process `g3d.rot.control.delta`

`PROC g3d.rot.control.delta (CHAN G3D.ROT.CONTROL in?, out.0!, out.1!)`

Delta for `G3D.ROT.CONTROL` protocol.

#### Parameters:

`CHAN G3D.ROT.CONTROL` | `in` | Commands in.
`CHAN G3D.ROT.CONTROL` | `out.0` | Commands out.
`CHAN G3D.ROT.CONTROL` | `out.1` | Commands out.

### `g3dutil.occ`:197Process `g3d.prj.control.delta`

`PROC g3d.prj.control.delta (CHAN G3D.PRJ.CONTROL in?, out.0!, out.1!)`

Delta for `G3D.PRJ.CONTROL` protocol.

#### Parameters:

`CHAN G3D.PRJ.CONTROL` | `in` | Commands in.
`CHAN G3D.PRJ.CONTROL` | `out.0` | Commands out.
`CHAN G3D.PRJ.CONTROL` | `out.1` | Commands out.

### `g3dutil.occ`:233Process `g3d.pgn.control.delta`

`PROC g3d.pgn.control.delta (CHAN G3D.PGN.CONTROL in?, out.0!, out.1!)`

Delta for `G3D.PGN.CONTROL` protocol.

#### Parameters:

`CHAN G3D.PGN.CONTROL` | `in` | Commands in.
`CHAN G3D.PGN.CONTROL` | `out.0` | Commands out.
`CHAN G3D.PGN.CONTROL` | `out.1` | Commands out.

### `g3dutil.occ`:269Process `g3d.psc.control.delta`

`PROC g3d.psc.control.delta (CHAN G3D.PSC.CONTROL in?, out.0!, out.1!)`

Delta for `G3D.PSC.CONTROL` protocol.

#### Parameters:

`CHAN G3D.PSC.CONTROL` | `in` | Commands in.
`CHAN G3D.PSC.CONTROL` | `out.0` | Commands out.
`CHAN G3D.PSC.CONTROL` | `out.1` | Commands out.

### `g3dutil.occ`:285Process `g3d.rdr.control.delta`

`PROC g3d.rdr.control.delta (CHAN G3D.RDR.CONTROL in?, out.0!, out.1!)`

Delta for `G3D.RDR.CONTROL` protocol.

#### Parameters:

`CHAN G3D.RDR.CONTROL` | `in` | Commands in.
`CHAN G3D.RDR.CONTROL` | `out.0` | Commands out.
`CHAN G3D.RDR.CONTROL` | `out.1` | Commands out.