173 lines
6.6 KiB
C++
173 lines
6.6 KiB
C++
/*==========================================================================;
|
|
*
|
|
* Copyright (C) 1995-2000 Microsoft Corporation. All Rights Reserved.
|
|
*
|
|
* File: ddi.h
|
|
* Content: Direct3D DDI encapsulation implementations
|
|
*
|
|
*
|
|
***************************************************************************/
|
|
|
|
#ifndef _DDIBASE_H
|
|
#define _DDIBASE_H
|
|
|
|
#include "d3ditype.h"
|
|
#include "d3dhalp.h"
|
|
|
|
extern char *HrToStr(HRESULT hr);
|
|
|
|
class CD3DBase;
|
|
|
|
struct _D3D8_DEVICEDATA;
|
|
typedef struct _D3D8_DEVICEDATA D3D8_DEVICEDATA;
|
|
|
|
class CSurface;
|
|
class D3DFE_PROCESSVERTICES;
|
|
class CBaseTexture;
|
|
class CDriverVertexBuffer;
|
|
struct CVStream;
|
|
struct CVIndexStream;
|
|
class CBaseSurface;
|
|
class CResource;
|
|
class CBuffer;
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// CD3DDDI //
|
|
// //
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
class CD3DDDI
|
|
{
|
|
protected:
|
|
|
|
// DrawIndexedStream params
|
|
UINT m_StartIndex;
|
|
UINT m_MinVertexIndex;
|
|
UINT m_NumVertices;
|
|
int m_BaseVertexIndex;
|
|
|
|
public:
|
|
CD3DDDI();
|
|
virtual ~CD3DDDI();
|
|
|
|
//++++++++++++++ Interface which the PSGP is using ++++++++++++++++++++++++
|
|
//
|
|
// These functions are used when vertices are processed by D3D pipeline.
|
|
|
|
// Internal driver buffers
|
|
// D3D has three driver buffers: TL buffer, which contains primitive
|
|
// vertices, command buffer, where drawing commands are recorded, and clip
|
|
// buffer, where vertices, generated by clipper, are recorded. D3D maintains
|
|
// count of vertices in the TL buffer (TL buffer vertex count) and an index
|
|
// of the first vertex of the current primitive (primitive base). When a
|
|
// drawing command is recorded, D3D records the current primitive base.
|
|
// All drawing commands expect that vertices have already been copied to the
|
|
// TL buffer (excluding DrawClippedPrim).
|
|
//
|
|
// If a flush occurs during recording a command, vertex buffer is not
|
|
// flushed, because m_bWithinPrimitive is set to TRUE. So primitive base
|
|
// and TL vertex count stay the same.
|
|
//
|
|
// When PSGP processes and clip a non-indexed primitive, it should update
|
|
// primitive base and TL vertex count, using SkipVertices and
|
|
// MovePrimitiveBase functions. AddVertices is not used, because DrawPrim()
|
|
// functions calls AddVertices and MovePrimitiveBase inself.
|
|
|
|
// Draw unclipped part of non-indexed primitive
|
|
//
|
|
// Parameters:
|
|
// pv->lpvOut - pointer to the first vertex
|
|
// pv->primType - primitiveType;
|
|
// pv->dwNumVertices - vertexCount
|
|
// pv->dwNumPrimitives - number of primitives
|
|
// Remarks:
|
|
// This function is used when vertices are processed by D3D pipeline.
|
|
// The function inserts a new command to the command buffer.
|
|
// Primitive base is increased by the number of vertices.
|
|
// TL buffer vertex count is increased by the number of vertices.
|
|
//
|
|
virtual void DrawPrim(D3DFE_PROCESSVERTICES* pv) = 0;
|
|
|
|
// Draw unclipped part of an indexed primitive
|
|
//
|
|
// Parameters:
|
|
// pv->lpvOut - pointer to the first vertex of the whole
|
|
// primitive
|
|
// pv->primType - primitiveType
|
|
// pv->dwNumPrimitives - number of primitives
|
|
// pv->lpwIndices - pointer to the first index
|
|
// pv->dwNumIndices - number of indices
|
|
// pv->dwIndexSize - size of an index in bytes (2 or 4)
|
|
// Remarks:
|
|
// Vertices must be already copied to the TL buffer.
|
|
// The function inserts a new command to the command buffer.
|
|
// Indices are copied to the index buffer. Vertices must be in the TL
|
|
// buffer already.
|
|
// Primitive base and TL buffer vertex count are not changed.
|
|
//
|
|
virtual void DrawIndexPrim(D3DFE_PROCESSVERTICES* pv) = 0;
|
|
|
|
// Draw a primitive, generated by clipper
|
|
//
|
|
// Parameters:
|
|
// pv->lpvOut - pointer to the first vertex of the primitive
|
|
// pv->primType - primitiveType
|
|
// pv->dwNumVertices - vertex count
|
|
// pv->dwNumPrimitives - number of primitives
|
|
// Remarks:
|
|
// Vertices are copied to the clipping buffer
|
|
// The function inserts a new command to the command buffer.
|
|
// Primitive base and TL buffer vertex count are not changed.
|
|
//
|
|
virtual void DrawClippedPrim(D3DFE_PROCESSVERTICES* pv) = 0;
|
|
|
|
// Increase TL buffer vertex count
|
|
//
|
|
// The function addes the number of vertices to the current primitive
|
|
// base. So when it is called several times without moving the primitive
|
|
// base, only the last call will have effect.
|
|
// This function should be called after vertices are added to the
|
|
// TL buffer, but before a drawing function is called.
|
|
//
|
|
virtual void AddVertices(UINT NumVertices) = 0;
|
|
|
|
// Decrease TL buffer vertex count
|
|
//
|
|
// This function should be called after vertices are added to the
|
|
// TL buffer, but before a drawing function is called.
|
|
//
|
|
virtual void SubVertices(UINT NumVertices) = 0;
|
|
|
|
// Update primitive base
|
|
//
|
|
// It should be called when some vertices are skipped because of clipping.
|
|
// NumVertices could be negative,
|
|
//
|
|
virtual void MovePrimitiveBase(int NumVertices) = 0;
|
|
|
|
// Update primitive base and TL buffer vertex count
|
|
//
|
|
// Call this function when some vertices in the vertex buffer are used
|
|
// for clipping and should be skipped
|
|
//
|
|
virtual void SkipVertices(DWORD NumVertices) = 0;
|
|
|
|
void SetIndexedPrimParams(UINT StartIndex, UINT MinIndex, UINT NumVertices,
|
|
UINT BaseVertexIndex)
|
|
{
|
|
m_StartIndex = StartIndex;
|
|
m_MinVertexIndex = MinIndex;
|
|
m_NumVertices = NumVertices;
|
|
m_BaseVertexIndex = BaseVertexIndex;
|
|
}
|
|
|
|
// Returns offset in bytes of the start vertex of the current primitive in
|
|
// the current TL stream
|
|
virtual DWORD GetCurrentPrimBase() {return 0;}
|
|
//-------------------- End PSGP functions ---------------------------------
|
|
};
|
|
typedef CD3DDDI *LPD3DDDI;
|
|
|
|
|
|
#endif /* _D3DIBASE_H */
|