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.

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.

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).

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.

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.

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.

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.

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.

Note: See TracRoadmap for help on using the roadmap.