Indirect 3D Specifications

Editor's comments

Editor:Alex Mizrahi
Last update:29.11.2001
If you think something is missing here, mail me- I'll make FAQ
Before reading this, you should read Overview and Brief concepts
All declarations are in Delphi-style. I think C++ programmers will understand them too. There are translated headers.

General

IIND3DObject

Indirect 3D object is an implementation of IIND3DObj interface. Objects in Indirect3D are managed hierarchycally. Root object is Renderer. Object may be linked statically or as DLL file.
IIND3DObj methods are:

Event Model

Indirect3D uses special event/trigger model for interobject and app-object interaction. Events are posted by objects(and not only by them) to State.newmsgs message list(See TIND3DState) in response to some internal factors - time expiration, mouse click or other. Each such Event has a unique for object name - like "OnClick". If object was clicked, it will post event with msgid associated with OnClick event(if it's 0 message willnt be posted).
Triggers represents actions that object may do in responce to event. They are also named(like Enable, Disable). During ProcessMessages objects scans event list of messages with same msgids as msgid associated with triggers. If it finds any, it executes trigger.
Additional 4-byte data can be passed in message in "data" field. It's message-dependent. Sometimes it's interface pointer of sender. If message needs to transfer more data, it should use MemoryBlock technique. Simply passing pointer is NOT recomended - otherwise event will not work properly in Distribution.

Structures and misc declarations

ServiceList

Services are dynamic extensions. Actually they are specific interface implementations. Services are keeped in ServiceList object, that is IIND3DServiceList interface implementation:

IIND3DServiceList = interface(IUnknown)
['{D5AE4CA0-5F2B-11D5-BD4C-D5586A2D4803}']
procedure  AddService(Service : IUnknown);
procedure  DeleteService(Service : IUnknown);
function   QueryService(const IID: TGUID; out Obj): HResult;
end;
QueryService procedure is similar to QueryInterface. It returns interface in Obj and returns S_OK=0 if successful. Services are quered by GUID.

Indirect3D Streaming

IND3DArray

OpenStream

Indirect3D Standart caps