|
Implicit Vertex Buffers Under Direct3D
Submitted by |
I thought I would post a little tidbit that may be obvious to some and not
to others regarding implicit vertex buffers in Direct3D. Direct3D uses
implicit vertex buffers when Direct3D does TnL. These implicit vertex
buffers differ from the explicit vertex buffers an application might create
with a IDirect3D7::CreateVertexBuffer call. The API puts the results from
TnL into these buffers and passes them to the device driver. If the vertex
buffer is in video memory, the device driver doesn't ( or shouldn't ) have
to copy the vertex buffer from system to video memory for graphics device
accessibility. Unfortunately, when the API creates implicit vertex buffers
it will create the buffers in system memory if application doesn't disable
clipping ( D3DRENDERSTATE_CLIPPING = FALSE ). The rationale is justified
since clipping requires transformed vertices to be read back in from the
implicit vertex buffer for clipping. The tip is to only enable API clipping
when clipping is required. For those primitives inside the viewport ( or
possibly guardband ) will be transformed directly into video memory avoiding
an extra hidden vertex copy by the driver. Also, if it is feasible, sorting
clipped vs. unclipped primitives (objects) can be helpful. This could be
extended to only enable clipping if primitives are inside the guard band
which can be somewhat risky if device drivers don't implement guard band
clipping correctly.
|
The zip file viewer built into the Developer Toolbox made use
of the zlib library, as well as the zlibdll source additions.
|