OpenGL ++ ARB Interest Subcomittee Meeting Notes

June 4-6, 1997



Henri Warren Digital
Feng Xie Intel
Suzy Deffeyes IBM
Richard Wright Real3D
David Blythe SGI
Mark Segal SGI


* How low do we go?
* OpenGL is too high for some people
* Want to try to span as large as range possible
* Core & vertical extensions
* Should being able to write VRML browser be a goal?

Do we provide Java bindings? Probably.

How do we handle differing results on diverse platforms?
Should we provide behavior support? It might be good to get scene
graph only defined
Should work from setup (or at least keep it in mind) to high-end.


Sharon Clay: Perfomer Presentation

* Toolkit not API in sense that API gets broken when necessary
* Provides diagnostics
* MP sorting:
- runtime decisions for scalability
* libpf/libpr:
- distinction between low-level rendering and s.g., allows efficiency
* GeoSets:
- packed/interlaced formats not supported at same level as separatedcoordinate sets.
- more flexibility in indexing would be good.
* GeoStates:
- Overrides aren't too fine-grained because state sorting requirestheir consideration.
* Display Lists
* MP - app/cull/draw model
* Dynamic data & frame accuracy

* How different is code across machines?
- libpr: state sorting, texturing
- libpf: fewer changes, some for multipipe

* Things to be done better
- Extensibility -> need benchmarking framework
- Indexes
- Notification is missing, especially for UIs
- MP - fork model vs. sproc
- Multibuffering & subclassying frame accurate or not is hard
* Behavior Support
- Mechanism not policy
- Different databases have different behavior
- Code as part of database: callbacks can be included ; call into dsos.
* Nodes are approx. 1-10% of data
- geostates are bulk of it -> node duplication is "OK"
* Error checking on configuration, not during operation
* Runtime Statistics
* Culling Algorithm
- View frustum culling: spheres @ nodes, boxes @ geosets.
- Callbacks in culling allowed
- Culling and chunking are somewhat at odds - scene graph modeling issue?
- Editing an in?? tstri p is bad
* LOD: lots of automatic stuff
- Bounding box & sphere overrides
* Collision: Intersection traversal: segment intersections

Kevin Rushforth: Java3D
* Behavior as extensibility
* Synchronization of behavior with drawing?

>>> Kevin presented about a dozen viewgraphs, which I don't reproduce here.

Feng: Intel Scene Manager
* Performance, targeted to games
* Toolkit, not API
* Cross platform not a concern
- What level of 3D cards do you run it on?
* No scene graph processing (e.g. spatialization)
- Does do state sorting
* Provides BSP node/Gridsort action
* Action object
- Simple: action run before next frame is drawn; behavior mechanism
* Simple view/Camera model
- Camera is separate from the scene graph
* Flattening similar to Performer
- Immediate & retained modes
- No compiled mode
* No callbacks
* All parts of scene graph are modifiable
* Nodes can have multiple parents
* No occlusion culling
- But have an app-culled flag
* 2.0 adds more primitives (a la Java3D/OpenGL++)
- Adopting fields for MP protection
- behavior: VRML & Java3D behaviors
* Discussion of behaviors: What is the use?
- Useful for storing behavior with databases a la VRML
- No one uses ISM behaviors
* Collision detection
- No global detection, but you can check for it.
* precompute bounding boxes & flatten xforms
* Every node (including shape) has xform information
* Spatialized audio
- uses RSX
* Distributed support
- Events (only) transmitted across network
- Multicast / TCP/IP (reliable, server established when game starts)
- Data duplicated, not distributed
* switch LOD
- Multiplication factor in camera

Peter Birch: Inventor

>>> Peter presented a half-dozen slides which are omitted here.

Goals Discussion
* Multiple contexts means multiple pipes/windows
* Describe lower level framework
- Minimal functionality with nodes to do more complex stuff
- How should higher-level stuff be packaged?
- Want something useful, but better to provide less that's right than
more that people don't want.
* Performance vs. Flexibility vs. Ease-Of-Use
- Tradeoffs
* A Specific Feature
- Frame rate control
* Lessons from Optimizer on C3D
- Extensibility of nodes/actions
- File r/w extensibility
- MP support
- Single vs. double
* Take 1st issue - set/get
- e.g. Transform:
setMatrix, getMatrix (bloats API "file reader issue")
container based API
- Vertices: field-based, vertex.get, vertex.set
for notification, requires container pointer
(container API has a profusion of methods)
- Gets: In MP case, where is the storage?
Lazy write? Multiple copies?


Should we ship a toolkit with OpenGL++ to, e.g., do windowing/events?
Richard says no.
David suggests that we provide enough to write a basic program.

More set/get Container discussion

container.setField container.field.set
- API bloat - need ptr to container
- field storage hidden (for notification)
- need way to get field handle - field impl. more exposed
- must avoid =

Use get method to retrieve data members

Reasons for fields
- hide MP stuff
- hide impl. details
e.g. dirty bits; notification schemes

Avoid operator overloading
but if not provided, people tend to add it themselves
so keep it at reasonable level - can lead to possible performance problems

Issue: ISM does pure fields

possible meanings:
add new containers (scene graph objects)
subclass existing containers
add new field types
add new traversals

app writer | extender | library maintainer
( no source code ) ( source code )

fields should be easy to add; just templates with set/get

chance to decide which things are hard/easy to extend

extension times:
- compile time
- dynamic library
- on the file (e.g. reading a file)

adding traversals:
only lib maintainer can extend container traversal unless duplicated

traversal extesibility so people can work over the scene graph themselves
- can do w/RTTI on containers
- action table

For, e.g. file reading, need creation by name (or id)
e.g. switch(name) {
case material:
new material;
case transform:
new transform;
but need code to extend

runtime id
creation id
string to id


Error checking
do as much as we can with minimal performance impact
debug library or not?
two version -> differing behavior
spec should be clear about what's an error and what's not
out-of-memory errors: what kind? OpenGL or other?
extendible errors

How does COM fit in?

Can get Java wrappers automatically, maybe
Java issue: e.g. getNode must tell Java what node type it is through,
e.g., RTTI
garbage collection can garbage collect things unexpectedly;
implications for performance predictability

Doubles vs. floats
Digital is concerned about doubles

Other data type issues
- what do we really nedd doubles for?
some geometry
- bytes & floats for colors

want to be able to be specific,
but also let library pick best thing for machine
conflicts between alpha blending in appearance and transparency
in material ISSUE

same or similar issue for texture

runtime extensibility
on the fly extension is painful
-> can macroize, but can't ad new methods when reading a file
Inventor/Performer style dso/dll loading requires initialization

runtime field addtion seems like overkill

Support Inventor/Performer style dll loading

Extending containers & traversals can pose problems with multiple
extension sewed together: they may not be compatible and we won't
address this.

method executed per container during traversal
container-specific operations
traversals: string together several or combine into one

make intermediate results exposed
-> can avoid this in many cases
if node methods are virtual, can add node-level behavior during
but there's pressure from Performer,
e.g. calligraphic lights
possible other algorithms
static appearance sorting is an option: sort once up front

exposure introduces synchronization, protection concerns

How are things exposed? Not clear?

Need to build intermediate representations
Flag nodes?
Build new graph over nodes?
Appearance: can't change these for deltas
use bitvectors to say what's important?

Separate "nodes" from a (general) graph structure that points to nodes?

LOD has an issue in this scheme
Treat LOD "node" as a special "scene graph" node

Doesn't solve problem of where to put intermediate data from traversals

Maybe Liquid Reality did this?


Binary format discussion

special mechanism for r/w binary formats
putting r/w support in fields w/ virtual functions is bloaty

leave out support for this?
Too important for debugging and transmission in network environment

There are things outside the scene graph that may be separate
e.g. view/camera

but camera may ned to be tied to the s.g. but it may also want to be
not in the s.g., esp. if there are multiple scene graphs to render.

not clear if camera should be saved/read or not

do all objects need to be derived from a single object?
not necessarily

Basic types

Make basic types OpenGL types

Basic types are OK
make same as OpenGL basic types, but different prefixes
Enums: same as OpenGL

Composite types

math functions too limited
how much to put in there?
-> in any case, fix the current stuff

Bitmask is arbitrary length: needs fixing

Merge atomic and composite fields


Are bounds an object that is extensible?

make around, etc. take general (unspecialized) bounds

not ref counted, so need to copy

merge single/multiple object builders in API

change pt1, pt2 to ray object

Other bound types:
non-axis aligned box, convex hull, ellipsiod, cylinder for reg group

Ref counting
need it, but it's annoying
pick one, e.g. COM: auto delete when go to zero



Image class

Texture format
- internal
- external
- relationship to images

Support for picking
- more general intersection / specific picking traversal

- look at Optimizer
- multipass questions

Transforms with multiple parents & MP traversal

Clarify lack of order for traversal of children


Animated texture support
- may tie in w/morphing

Transform node
ways to set/get

error checking
performance analysis tools
Java/C bindings

antialiasing is missing
-may interact w/transparency

face culling rendering modes
-where? vs.
point/line size missing object properties

specular/emissive defaults wrong

- traversals

group state
should texgen, etc. be separate
extensibility by addition

Environment node
- bounding volume

Alpha in colors
descriptive vs. procedural
transparency vs. alpha blending

LOD issues
texture, geometry, image, behavior

cleanup basic types
class hierarchy diagram
indexed_set vs indexedset_

- display list
- caching


2D or 3D

Decoupling of graph from nodes

VRML support

Packaging non-core stuff


Time & media
- frame rate control

Engines & routes

Resource management


- 3D
- drivers


motion & velocity
operator overloading

database paging

benchmark frameworks
(tied to conformance)

compressed geometry (LOD)

overlapping multiresolution representation


Should OpenGL++ have its own context?
Performer has state shadowing

Need both billboard style 2D text and extruded text?
Seems like 2D text that isn't a texture would be good

Changes to one node affect changes to others
or done by modifying nodes

Framework for efficient scene graph updates
- when is a good time to modify?

Divorce routes from core
- need notification anyway

Sensor nodes notify too

Register interest in a field or container

mechanism: callback
or list that's queriable
efficiency/spece tradeoff

update lists vs. cycle buffers
update lists for sparse changes
cycle buffers for big changes
SGI investigating a third model for asynchrony

Asynchrony required for potentially unbounded processor computations

Need to be concerned with 1-4 processor machines

May do something different with few processors vs. many

Keep a list of things to solve with notification

VRML notification

nodes are different for impl. efficiency in OGL++

support for modelers:
can be hard to map modeler's data structures
if nodes aren't identical
applications burden to keep track of differences
user data pointer

adds work: routes & engines

proto nodes can be trouble if done as more than macros

How important is it? Should we support/provide a VRML loader?

Asynchronous vs. synchronous notification

Richard will investigate threads/contexts on PC (Windows)

Course grain MT rendering, e.g. 2 parts of a window, we should handle
Finer grain is for OpenGL

Testing & Conformance
Keep a justification document
Make a scene graph page

Binary compatibility discussion
Try to reduce number of incompatible releases
ISV qualification issue

Media & Time

video/audio APIs differ
Is there an issue?
Controls that would be present in s.g. seem pretty generic
but is there more to it?

Java3D's method (e.g.) w/ a single clock should work fine,
but not if there are multiple asynchronous clocks

Windowing & Events
Event traversal
Nodes express interest in events

List of things that would be layered (incomplete):
VRML toolkit
Performance analysis
Viewer/Manipulator toolkit (but there might be some simple basic stuff)
File loaders: geometry, images, movies, sounds ; binary file format
MP policy layer