Interfaces: OpenGL Pipeline interface: pgl -> gl2 state machine & pipeline (OPENGL.DLL -> GL2PIPE.DLL) D3D Pipeline interface: D3D interface -> D3D core state machine & pipeline (D3D version dlls -> D3DPIPE.DLL) 3D Emitter interface: gl2 and D3D state machine & pipeline (GL2PIPE.DLL & D3DPIPE.DLL -> EMIT3D.DLL) 3D implementation tester interface: 3d primitive emitter -> 3D driver (EMIT3D.DLL -> TST3DDRV.DLL) Device driver/Driver memory management interface: 3d primitive emitter -> 3D driver (EMIT3D.DLL -> HW3D.DLL) Memory management interface: Compositor -> Memory manager (BUFFCOMB.DLL -> EMIT3D.DLL) Buffer management interface: 2d client driver, pgl, & D3D -> compositor (GRE2GL.DLL, OPENGL.DLL, & D3D api -> BUFFCOMB.DLL) PDD interface: pdd <-> 3D driver (when necessary; interface specifics are left to driver implementer) Targets: GL2D.DLL: ****** NOT STARTED ****** This module is the interface between the presentation manager graphics engine (PMGRE.DLL) & the rest of the GL/2 system. It operates as a 2d driver which draws to a display buffer provided through the compositing layer (BUFFCOMB.DLL). OPENGL.DLL: ****** MOSTLY FINISHED ****** All this really consists of is the pgl codebase & the GLU library from SGI. With the pgl.h header that's included with the openwatcom package, I should have all that I need for a starting point. I'll grab as much as I can about PGL from all available sources & put together a PGL module that's able to load a graphics pipeline driver. PGL does not implement any of the OpenGL spec, it's imported from GL2PIPE.DLL; so this will be the easiest part of the ddk. Still hard, just easy in relativity to the other parts. The device independent portion of context management lives here. GL2PIPE.DLL: ****** WORK STARTED ****** This module manages the OpenGL state machine and arranges 3d commands & data for the submittion to EMIT3D.DLL. All of the specified behaviors that are expected of an OpenGL implementation are handled here. D3D version dlls: ****** NOT STARTED ****** ****** OPTIONAL ****** ****** NOT AN OFFICIAL GOAL ****** All of the Direct3D interface objects are handled here. This module manages Direct3D requests from various versions of various D3D interfaces and structures them into a common intermediate form that's suitable for submission to D3DPIPE.DLL. D3DPIPE.DLL: ****** NOT STARTED ****** ****** OPTIONAL ****** ****** NOT AN OFFICIAL GOAL ****** This module manages the Direct3D state machine and arranges 3d commands & data for the submittion to EMIT3D.DLL. The core functionality of the Direct3D framework is handled here. BUFFCOMB.DLL: ****** NOT STARTED ****** This module consists of the compositing layer. It's purpose is to manage & maintain all drawing buffers. It composes all of the visible buffers into one scene in the main display back buffer & does a buffer swap with the display front buffer. All buffer objects for each graphic's library will be allocated from here; however, the actual coordinates for each drawing area will be updated by each graphic's library based on values obtained from the app's window. If the app is a full screen app, then the entire screen's coordinate values will be used. EMIT3D.DLL: ****** WORK STARTED ****** This module takes nugget streams of generic 3d data and commands from client pipeline modules & sends them to the 3d component driver HW3D.DLL (or whatever the vendor names their 3d driver). This module also handles memory management by allocating from & shuffling memory between system RAM, AGP aperture memory, & onboard video RAM. This module should be able to allow multiple, different pipelines to render 3d images to the screen concurrently. The memory management uses a plugin interface at the backend, to allow additional memory drivers to be added in the future. The only plugins that are included by default under the GL/2 project are the AGPGART backend (MMAGP.DLL), the system ram backend (MMSYSRAM.DLL), & possible a virtual memory backend (MMVMEM.DLL) to allow lesser used graphics data to be swapped out. In addition, each hardware driver may contain a memory manager plugin. TST3DDRV.DLL: ****** NOT STARTED ****** ****** ONLY USED FOR GL/2 DEVELOPMENTAL TESTING PURPOSES ****** This is a software backend to EMIT3D.DLL and is only used solely to test the functionality of the GL/2 3D system rendering. It handles the basic requirements of a 3d driver by relying on the presentation manager (PM) for all drawing operations. All of it's memory management features are allocated via bitmap. HW3D.DLL: ****** NOT STARTED ****** This is the actual hardware accelerated 3d driver. It interfaces directly with the 3d emitter. This driver supersedes all other video drivers; it's existance & usage is mutually exclusive. If this driver relies on being able to access the video hardware directly, then it may be accomplanied by an OS/2 PPD driver to do so. GRE2GL.DLL ****** NOT STARTED ****** This is the replacement for the standard OS/2 2d driver. Normally, it is implemented in as a direct driver, as a driver that uses the GRADD wrapper, or a driver that uses another wrapper (such as SNAP). This driver takes the PM Graphics Engine requests & converts them into OpenGL requests. It's OpenGL requests are fed into GL2PIPE.DLL, however, it's buffer requirements are handled by the compositor (BUFFCOMB.DLL). Whereas, in the past, the 2d driver had to be implemented for each distinct piece of video hardware, GRE2GL.DLL only has to be implemented once. After it's implemented & installed, there will never be another reason to replace this driver for hardware reasons. This driver should only be replaced for software updating purposes.