440 lines
17 KiB
C++
440 lines
17 KiB
C++
|
#include "pch.h"
|
||
|
#include "SampleSW.h"
|
||
|
#pragma hdrstop
|
||
|
|
||
|
const D3DCAPS8 CMyDriver::c_D3DCaps=
|
||
|
{
|
||
|
// Indicates this is software rasterizer.
|
||
|
/*D3DDEVTYPE_HAL|| D3DDEVTYPE_REF||*/ D3DDEVTYPE_SW,
|
||
|
|
||
|
// Adapter ordinal (isn't used to report anything).
|
||
|
0,
|
||
|
|
||
|
// Caps (See ddraw.h & d3d8caps.h for details of each CAP).
|
||
|
/*DDCAPS_3D| DDCAPS_ALIGNBOUNDARYDEST| DDCAPS_ALIGNSIZEDEST|
|
||
|
DDCAPS_ALIGNBOUNDARYSRC| DDCAPS_ALIGNSIZESRC| DDCAPS_ALIGNSTRIDE|
|
||
|
DDCAPS_BLT| DDCAPS_BLTQUEUE| DDCAPS_BLTFOURCC| DDCAPS_BLTSTRETCH|
|
||
|
DDCAPS_GDI| DDCAPS_OVERLAY| DDCAPS_OVERLAYCANTCLIP| DDCAPS_OVERLAYFOURCC|
|
||
|
DDCAPS_OVERLAYSTRETCH| DDCAPS_PALETTE| DDCAPS_PALETTEVSYNC|
|
||
|
DDCAPS_READSCANLINE| DDCAPS_VBI| DDCAPS_ZBLTS| DDCAPS_ZOVERLAYS|
|
||
|
DDCAPS_COLORKEY| DDCAPS_ALPHA| DDCAPS_COLORKEYHWASSIST| DDCAPS_NOHARDWARE|
|
||
|
DDCAPS_BLTCOLORFILL| DDCAPS_BANKSWITCHED| DDCAPS_BLTDEPTHFILL|
|
||
|
DDCAPS_CANCLIP| DDCAPS_CANCLIPSTRETCHED| DDCAPS_CANBLTSYSMEM|
|
||
|
D3DCAPS_READ_SCANLINE|*/ 0,
|
||
|
|
||
|
// Caps2
|
||
|
/*DDCAPS2_CERTIFIED| DDCAPS2_NO2DDURING3DSCENE| DDCAPS2_VIDEOPORT|
|
||
|
DDCAPS2_AUTOFLIPOVERLAY| DDCAPS2_CANBOBINTERLEAVED|
|
||
|
DDCAPS2_CANBOBNONINTERLEAVED| DDCAPS2_COLORCONTROLOVERLAY|
|
||
|
DDCAPS2_COLORCONTROLPRIMARY|*/ DDCAPS2_CANDROPZ16BIT|
|
||
|
/*DDCAPS2_NONLOCALVIDMEM| DDCAPS2_NONLOCALVIDMEMCAPS|
|
||
|
DDCAPS2_NOPAGELOCKREQUIRED|*/ DDCAPS2_WIDESURFACES|
|
||
|
/*DDCAPS2_CANFLIPODDEVEN| DDCAPS2_CANBOBHARDWARE| DDCAPS2_COPYFOURCC|
|
||
|
DDCAPS2_PRIMARYGAMMA|*/ DDCAPS2_CANRENDERWINDOWED|
|
||
|
/*DDCAPS2_CANCALIBRATEGAMMA| DDCAPS2_FLIPINTERVAL|
|
||
|
DDCAPS2_FLIPNOVSYNC| DDCAPS2_CANMANAGETEXTURE|
|
||
|
DDCAPS2_TEXMANINNONLOCALVIDMEM| DDCAPS2_STEREO|
|
||
|
DDCAPS2_SYSTONONLOCAL_AS_SYSTOLOCAL| D3DCAPS2_NO2DDURING3DSCENE|
|
||
|
D3DCAPS2_FULLSCREENGAMMA|*/ D3DCAPS2_CANRENDERWINDOWED|
|
||
|
/*D3DCAPS2_CANCALIBRATEGAMMA|*/ 0,
|
||
|
|
||
|
// Caps3
|
||
|
0,
|
||
|
// Presentation Intervals
|
||
|
0,
|
||
|
// Cursor Caps
|
||
|
0,
|
||
|
|
||
|
// DevCaps (See d3d8caps.h & d3dhal.h)
|
||
|
// The SDDI driver should keep D3DDEVCAPS_TEXTUREVIDEOMEMORY enabled. The
|
||
|
// runtime does not behave correctly if the driver does not enable and
|
||
|
// support this cap. In other words, all textures must be able to be
|
||
|
// vid mem (driver allocated) textures, at least.
|
||
|
D3DDEVCAPS_EXECUTESYSTEMMEMORY| /*D3DDEVCAPS_EXECUTEVIDEOMEMORY|*/
|
||
|
D3DDEVCAPS_TLVERTEXSYSTEMMEMORY| /*D3DDEVCAPS_TLVERTEXVIDEOMEMORY|*/
|
||
|
D3DDEVCAPS_TEXTURESYSTEMMEMORY| D3DDEVCAPS_TEXTUREVIDEOMEMORY|
|
||
|
D3DDEVCAPS_DRAWPRIMTLVERTEX| /*D3DDEVCAPS_CANRENDERAFTERFLIP|
|
||
|
D3DDEVCAPS_TEXTURENONLOCALVIDMEM| D3DDEVCAPS_DRAWPRIMITIVES2|*/
|
||
|
/*D3DDEVCAPS_SEPARATETEXTUREMEMORIES|*/ D3DDEVCAPS_DRAWPRIMITIVES2EX|
|
||
|
/*D3DDEVCAPS_HWTRANSFORMANDLIGHT| D3DDEVCAPS_CANBLTSYSTONONLOCAL|*/
|
||
|
D3DDEVCAPS_HWRASTERIZATION| /*D3DDEVCAPS_PUREDEVICE|
|
||
|
D3DDEVCAPS_QUINTICRTPATCHES| D3DDEVCAPS_RTPATCHES|
|
||
|
D3DDEVCAPS_RTPATCHHANDLEZERO| D3DDEVCAPS_NPATCHES|
|
||
|
D3DDEVCAPS_HWVERTEXBUFFER| D3DDEVCAPS_HWINDEXBUFFER|*/ 0,
|
||
|
|
||
|
// Primitive Misc Caps
|
||
|
D3DPMISCCAPS_MASKZ| D3DPMISCCAPS_LINEPATTERNREP| D3DPMISCCAPS_CULLNONE|
|
||
|
D3DPMISCCAPS_CULLCW| D3DPMISCCAPS_CULLCCW| D3DPMISCCAPS_COLORWRITEENABLE|
|
||
|
/*D3DPMISCCAPS_CLIPPLANESCALEDPOINTS| D3DPMISCCAPS_CLIPTLVERTS|*/
|
||
|
D3DPMISCCAPS_TSSARGTEMP| D3DPMISCCAPS_BLENDOP| 0,
|
||
|
|
||
|
// Raster Caps
|
||
|
/*D3DPRASTERCAPS_DITHER| D3DPRASTERCAPS_ROP2| D3DPRASTERCAPS_XOR|
|
||
|
D3DPRASTERCAPS_PAT|*/ D3DPRASTERCAPS_ZTEST| /*D3DPRASTERCAPS_FOGVERTEX|
|
||
|
D3DPRASTERCAPS_FOGTABLE| D3DPRASTERCAPS_ANTIALIASEDGES|
|
||
|
D3DPRASTERCAPS_MIPMAPLODBIAS| D3DPRASTERCAPS_ZBIAS|
|
||
|
D3DPRASTERCAPS_ZBUFFERLESSHSR| D3DPRASTERCAPS_FOGRANGE|
|
||
|
D3DPRASTERCAPS_ANISOTROPY| D3DPRASTERCAPS_WBUFFER|
|
||
|
D3DPRASTERCAPS_WFOG| D3DPRASTERCAPS_ZFOG|
|
||
|
D3DPRASTERCAPS_COLORPERSPECTIVE| D3DPRASTERCAPS_STRETCHBLTMULTISAMPLE|
|
||
|
*/ 0,
|
||
|
|
||
|
// Z Compare Caps
|
||
|
D3DPCMPCAPS_NEVER| D3DPCMPCAPS_LESS| D3DPCMPCAPS_EQUAL|
|
||
|
D3DPCMPCAPS_LESSEQUAL| D3DPCMPCAPS_GREATER| D3DPCMPCAPS_NOTEQUAL|
|
||
|
D3DPCMPCAPS_GREATEREQUAL| D3DPCMPCAPS_ALWAYS| 0,
|
||
|
|
||
|
// Src Blend Caps
|
||
|
D3DPBLENDCAPS_ZERO| D3DPBLENDCAPS_ONE| D3DPBLENDCAPS_SRCCOLOR|
|
||
|
D3DPBLENDCAPS_INVSRCCOLOR| D3DPBLENDCAPS_SRCALPHA|
|
||
|
D3DPBLENDCAPS_INVSRCALPHA| D3DPBLENDCAPS_DESTALPHA|
|
||
|
D3DPBLENDCAPS_INVDESTALPHA| D3DPBLENDCAPS_DESTCOLOR|
|
||
|
D3DPBLENDCAPS_INVDESTCOLOR| D3DPBLENDCAPS_SRCALPHASAT|
|
||
|
D3DPBLENDCAPS_BOTHSRCALPHA| D3DPBLENDCAPS_BOTHINVSRCALPHA| 0,
|
||
|
|
||
|
// Dest Blend Caps
|
||
|
D3DPBLENDCAPS_ZERO| D3DPBLENDCAPS_ONE| D3DPBLENDCAPS_SRCCOLOR|
|
||
|
D3DPBLENDCAPS_INVSRCCOLOR| D3DPBLENDCAPS_SRCALPHA|
|
||
|
D3DPBLENDCAPS_INVSRCALPHA| D3DPBLENDCAPS_DESTALPHA|
|
||
|
D3DPBLENDCAPS_INVDESTALPHA| D3DPBLENDCAPS_DESTCOLOR|
|
||
|
D3DPBLENDCAPS_INVDESTCOLOR| D3DPBLENDCAPS_SRCALPHASAT| 0,
|
||
|
|
||
|
// Alpha Compare Caps
|
||
|
D3DPCMPCAPS_NEVER| D3DPCMPCAPS_LESS| D3DPCMPCAPS_EQUAL|
|
||
|
D3DPCMPCAPS_LESSEQUAL| D3DPCMPCAPS_GREATER| D3DPCMPCAPS_NOTEQUAL|
|
||
|
D3DPCMPCAPS_GREATEREQUAL| D3DPCMPCAPS_ALWAYS| 0,
|
||
|
|
||
|
// Shade Caps
|
||
|
D3DPSHADECAPS_COLORGOURAUDRGB| D3DPSHADECAPS_SPECULARGOURAUDRGB|
|
||
|
D3DPSHADECAPS_ALPHAGOURAUDBLEND| D3DPSHADECAPS_FOGGOURAUD| 0,
|
||
|
|
||
|
// Texture Caps
|
||
|
D3DPTEXTURECAPS_PERSPECTIVE| /*D3DPTEXTURECAPS_POW2|*/
|
||
|
D3DPTEXTURECAPS_ALPHA| /*D3DPTEXTURECAPS_SQUAREONLY|*/
|
||
|
D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE| D3DPTEXTURECAPS_ALPHAPALETTE|
|
||
|
/*D3DPTEXTURECAPS_NONPOW2CONDITIONAL|*/ D3DPTEXTURECAPS_PROJECTED|
|
||
|
D3DPTEXTURECAPS_CUBEMAP| D3DPTEXTURECAPS_VOLUMEMAP|
|
||
|
D3DPTEXTURECAPS_MIPMAP| D3DPTEXTURECAPS_MIPVOLUMEMAP|
|
||
|
D3DPTEXTURECAPS_MIPCUBEMAP| /*D3DPTEXTURECAPS_CUBEMAP_POW2|
|
||
|
D3DPTEXTURECAPS_VOLUMEMAP_POW2|*/ 0,
|
||
|
|
||
|
// Texture Filter Caps
|
||
|
D3DPTFILTERCAPS_MINFPOINT| D3DPTFILTERCAPS_MINFLINEAR|
|
||
|
D3DPTFILTERCAPS_MINFANISOTROPIC| D3DPTFILTERCAPS_MIPFPOINT|
|
||
|
D3DPTFILTERCAPS_MIPFLINEAR| D3DPTFILTERCAPS_MAGFPOINT|
|
||
|
D3DPTFILTERCAPS_MAGFLINEAR| D3DPTFILTERCAPS_MAGFANISOTROPIC|
|
||
|
D3DPTFILTERCAPS_MAGFAFLATCUBIC| D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC| 0,
|
||
|
|
||
|
// Cube Texture Filter Caps
|
||
|
D3DPTFILTERCAPS_MINFPOINT| D3DPTFILTERCAPS_MINFLINEAR|
|
||
|
D3DPTFILTERCAPS_MINFANISOTROPIC| D3DPTFILTERCAPS_MIPFPOINT|
|
||
|
D3DPTFILTERCAPS_MIPFLINEAR| D3DPTFILTERCAPS_MAGFPOINT|
|
||
|
D3DPTFILTERCAPS_MAGFLINEAR| D3DPTFILTERCAPS_MAGFANISOTROPIC|
|
||
|
D3DPTFILTERCAPS_MAGFAFLATCUBIC| D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC| 0,
|
||
|
|
||
|
// Volume Texture Filter Caps
|
||
|
D3DPTFILTERCAPS_MINFPOINT| D3DPTFILTERCAPS_MINFLINEAR|
|
||
|
D3DPTFILTERCAPS_MINFANISOTROPIC| D3DPTFILTERCAPS_MIPFPOINT|
|
||
|
D3DPTFILTERCAPS_MIPFLINEAR| D3DPTFILTERCAPS_MAGFPOINT|
|
||
|
D3DPTFILTERCAPS_MAGFLINEAR| D3DPTFILTERCAPS_MAGFANISOTROPIC|
|
||
|
D3DPTFILTERCAPS_MAGFAFLATCUBIC| D3DPTFILTERCAPS_MAGFGAUSSIANCUBIC| 0,
|
||
|
|
||
|
// Texture Address Caps
|
||
|
D3DPTADDRESSCAPS_WRAP| D3DPTADDRESSCAPS_MIRROR|
|
||
|
D3DPTADDRESSCAPS_CLAMP| D3DPTADDRESSCAPS_BORDER|
|
||
|
D3DPTADDRESSCAPS_INDEPENDENTUV| D3DPTADDRESSCAPS_MIRRORONCE| 0,
|
||
|
|
||
|
// Volume Texture Address Caps
|
||
|
D3DPTADDRESSCAPS_WRAP| D3DPTADDRESSCAPS_MIRROR|
|
||
|
D3DPTADDRESSCAPS_CLAMP| D3DPTADDRESSCAPS_BORDER|
|
||
|
D3DPTADDRESSCAPS_INDEPENDENTUV| D3DPTADDRESSCAPS_MIRRORONCE| 0,
|
||
|
|
||
|
// Line Caps
|
||
|
D3DLINECAPS_TEXTURE| D3DLINECAPS_ZTEST| D3DLINECAPS_BLEND|
|
||
|
D3DLINECAPS_ALPHACMP| D3DLINECAPS_FOG| 0,
|
||
|
|
||
|
// Max Texture Width, Height, Volume Extent
|
||
|
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF,
|
||
|
|
||
|
// Max Texture Repeat, Texture Aspect Ratio, Anisotropy
|
||
|
0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFF,
|
||
|
|
||
|
// Max VertexW
|
||
|
1.0e10f,
|
||
|
|
||
|
// Guard Band left, top, right, bottom
|
||
|
-32768.0f, -32768.0f, 32767.0f, 32767.0f,
|
||
|
|
||
|
// Extents Adjust
|
||
|
0.0f,
|
||
|
|
||
|
// Stencil Caps
|
||
|
D3DSTENCILCAPS_KEEP| D3DSTENCILCAPS_ZERO| D3DSTENCILCAPS_REPLACE|
|
||
|
D3DSTENCILCAPS_INCRSAT| D3DSTENCILCAPS_DECRSAT| D3DSTENCILCAPS_INVERT|
|
||
|
D3DSTENCILCAPS_INCR| D3DSTENCILCAPS_DECR| 0,
|
||
|
|
||
|
// FVF Caps
|
||
|
(8& D3DFVFCAPS_TEXCOORDCOUNTMASK)| D3DFVFCAPS_DONOTSTRIPELEMENTS|
|
||
|
D3DFVFCAPS_PSIZE| 0,
|
||
|
|
||
|
// TextureOpCaps
|
||
|
D3DTEXOPCAPS_DISABLE| D3DTEXOPCAPS_SELECTARG1| D3DTEXOPCAPS_SELECTARG2|
|
||
|
D3DTEXOPCAPS_MODULATE| D3DTEXOPCAPS_MODULATE2X|
|
||
|
D3DTEXOPCAPS_MODULATE4X| D3DTEXOPCAPS_ADD| D3DTEXOPCAPS_ADDSIGNED|
|
||
|
D3DTEXOPCAPS_ADDSIGNED2X| D3DTEXOPCAPS_SUBTRACT|
|
||
|
D3DTEXOPCAPS_ADDSMOOTH| D3DTEXOPCAPS_BLENDDIFFUSEALPHA|
|
||
|
D3DTEXOPCAPS_BLENDTEXTUREALPHA| D3DTEXOPCAPS_BLENDFACTORALPHA|
|
||
|
D3DTEXOPCAPS_BLENDTEXTUREALPHAPM| D3DTEXOPCAPS_BLENDCURRENTALPHA|
|
||
|
D3DTEXOPCAPS_PREMODULATE| D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR|
|
||
|
D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA|
|
||
|
D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR|
|
||
|
D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA| D3DTEXOPCAPS_BUMPENVMAP|
|
||
|
D3DTEXOPCAPS_BUMPENVMAPLUMINANCE| D3DTEXOPCAPS_DOTPRODUCT3|
|
||
|
D3DTEXOPCAPS_MULTIPLYADD| D3DTEXOPCAPS_LERP| 0,
|
||
|
|
||
|
// Max Texture Blend Stages, Simulatenous Textures
|
||
|
D3DHAL_TSS_MAXSTAGES, D3DHAL_TSS_MAXSTAGES,
|
||
|
|
||
|
// Vertex Processing Caps
|
||
|
/*D3DVTXPCAPS_TEXGEN| D3DVTXPCAPS_MATERIALSOURCE7|
|
||
|
D3DVTXPCAPS_DIRECTIONALLIGHTS| D3DVTXPCAPS_POSITIONALLIGHTS|
|
||
|
D3DVTXPCAPS_LOCALVIEWER| D3DVTXPCAPS_TWEENING|*/ 0,
|
||
|
|
||
|
// Max Active Lights, User Clip Planes, Vertex Blend Matrices
|
||
|
0, 0, 0,
|
||
|
|
||
|
// Max Vertex Blend Matrix Index, Point Size, Primitive Count
|
||
|
0, 1.0f, 0xFFFFFFFF,
|
||
|
|
||
|
// Max Vertex Index, Streams, Stream Stride,
|
||
|
0xFFFFFFFF, 1, 256,
|
||
|
|
||
|
// Vertex Shader version, Max Vertex Shader Const
|
||
|
D3DVS_VERSION(0,0), 0,
|
||
|
|
||
|
// Pixel Shader version, Max Pixel Shader Value
|
||
|
D3DPS_VERSION(1,0), 16.0f,
|
||
|
};
|
||
|
|
||
|
const CMyDriver::CSurfaceCapWrap CMyDriver::c_aSurfaces[]=
|
||
|
{
|
||
|
// Tex, VTex, CTex, OffSTarg, SameFmtTarg, Z/S, Z/SWColor, SameFmtToA, 3D
|
||
|
CSurfaceCapWrap( D3DFMT_A4R4G4B4,
|
||
|
true, false, false, false, false, false, false, false, false),
|
||
|
CSurfaceCapWrap( D3DFMT_R5G6B5,
|
||
|
true, false, false, false, false, false, false, false, false),
|
||
|
CSurfaceCapWrap( D3DFMT_A8R8G8B8,
|
||
|
true, false, false, true, true, false, false, false, true),
|
||
|
CSurfaceCapWrap( D3DFMT_X8R8G8B8,
|
||
|
true, false, false, true, true, false, false, false, true),
|
||
|
CSurfaceCapWrap( D3DFMT_D16_LOCKABLE,
|
||
|
false, false, false, false, false, true, true, false, false),
|
||
|
/* CSurfaceCapWrap( D3DFMT_D32,
|
||
|
false, false, false, false, false, true, true, false, false),*/
|
||
|
};
|
||
|
|
||
|
CMyDriver::CMyDriver():
|
||
|
CMinimalDriver< CMyDriver, CMyRasterizer>( c_aSurfaces,
|
||
|
c_aSurfaces+ sizeof(c_aSurfaces)/ sizeof(c_aSurfaces[0]))
|
||
|
{
|
||
|
}
|
||
|
/*
|
||
|
const CMyContext::TDP2CmdBind CMyContext::c_aDP2Bindings[]=
|
||
|
{
|
||
|
TDP2CmdBind( D3DDP2OP_VIEWPORTINFO, DP2ViewportInfo),
|
||
|
TDP2CmdBind( D3DDP2OP_WINFO, DP2WInfo),
|
||
|
TDP2CmdBind( D3DDP2OP_RENDERSTATE, DP2RenderState),
|
||
|
TDP2CmdBind( D3DDP2OP_TEXTURESTAGESTATE, DP2TextureStageState),
|
||
|
TDP2CmdBind( D3DDP2OP_CLEAR, DP2Clear),
|
||
|
TDP2CmdBind( D3DDP2OP_SETVERTEXSHADER, DP2SetVertexShader),
|
||
|
TDP2CmdBind( D3DDP2OP_SETSTREAMSOURCE, DP2SetStreamSource),
|
||
|
TDP2CmdBind( D3DDP2OP_SETINDICES, DP2SetIndices),
|
||
|
TDP2CmdBind( D3DDP2OP_DRAWPRIMITIVE2, DP2DrawPrimitive2),
|
||
|
TDP2CmdBind( D3DDP2OP_DRAWPRIMITIVE, DP2DrawPrimitive),
|
||
|
TDP2CmdBind( D3DDP2OP_SETRENDERTARGET, DP2SetRenderTarget)
|
||
|
};
|
||
|
|
||
|
const CMyContext::TDP2CmdBind* CMyContext::GetDP2Bindings( unsigned int& iBindings)
|
||
|
{
|
||
|
iBindings= sizeof(c_aDP2Bindings)/ sizeof(c_aDP2Bindings[0]);
|
||
|
return c_aDP2Bindings;
|
||
|
}
|
||
|
|
||
|
HRESULT CMyContext::DP2DrawPrimitive( TDP2Data& DP2Data, const D3DHAL_DP2COMMAND* pCmd,
|
||
|
const void* pP)
|
||
|
{
|
||
|
const D3DHAL_DP2DRAWPRIMITIVE* pParam=
|
||
|
reinterpret_cast< const D3DHAL_DP2DRAWPRIMITIVE*>(pP);
|
||
|
|
||
|
const D3DHAL_DP2VIEWPORTINFO& ViewportInfo= (*this);
|
||
|
const D3DHAL_DP2VERTEXSHADER& VertexShader= (*this);
|
||
|
const D3DHAL_DP2SETSTREAMSOURCE& StreamSource= (*this);
|
||
|
const D3DHAL_DP2SETINDICES& Indices= (*this);
|
||
|
|
||
|
LPDDRAWI_DDRAWSURFACE_LCL pVBuffer= m_pGblDriver->SurfaceDBFind(
|
||
|
m_pAssociatedDDraw, StreamSource.dwVBHandle);
|
||
|
assert( pVBuffer!= NULL);
|
||
|
|
||
|
if((VertexShader.dwHandle& D3DFVF_POSITION_MASK)!= D3DFVF_XYZRHW)
|
||
|
return D3DERR_COMMAND_UNPARSED;
|
||
|
|
||
|
const UINT8* pData= reinterpret_cast< const UINT8*>(
|
||
|
pVBuffer->lpGbl->fpVidMem);
|
||
|
pData+= pParam->VStart* StreamSource.dwStride;
|
||
|
|
||
|
WORD wPrimitiveCount( pCmd->wPrimitiveCount);
|
||
|
if( wPrimitiveCount) do
|
||
|
{
|
||
|
assert( pParam->primType== D3DPT_TRIANGLELIST);
|
||
|
|
||
|
DWORD dwPrimCount( pParam->PrimitiveCount);
|
||
|
if( dwPrimCount) do
|
||
|
{
|
||
|
const float* pfXYZ= reinterpret_cast<const float*>(pData);
|
||
|
int iX( pfXYZ[0]);
|
||
|
int iY( pfXYZ[1]);
|
||
|
|
||
|
// TODO: Fix.
|
||
|
if( iX>= 0 && iX< ViewportInfo.dwWidth &&
|
||
|
iY>= 0 && iY< ViewportInfo.dwHeight)
|
||
|
{
|
||
|
DWORD* pPixel= reinterpret_cast<DWORD*>(
|
||
|
reinterpret_cast<UINT8*>(m_pDDSLcl->lpGbl->fpVidMem)+
|
||
|
(m_pDDSLcl->lpGbl->lPitch)* iY+ sizeof( DWORD)* iX);
|
||
|
|
||
|
*pPixel= 0xFFFFFFFF;
|
||
|
}
|
||
|
|
||
|
pData+= StreamSource.dwStride;
|
||
|
|
||
|
pfXYZ= reinterpret_cast<const float*>(pData);
|
||
|
iX= pfXYZ[0];
|
||
|
iY= pfXYZ[1];
|
||
|
|
||
|
// TODO: Fix.
|
||
|
if( iX>= 0 && iX< ViewportInfo.dwWidth &&
|
||
|
iY>= 0 && iY< ViewportInfo.dwHeight)
|
||
|
{
|
||
|
DWORD* pPixel= reinterpret_cast<DWORD*>(
|
||
|
reinterpret_cast<UINT8*>(m_pDDSLcl->lpGbl->fpVidMem)+
|
||
|
(m_pDDSLcl->lpGbl->lPitch)* iY+ sizeof( DWORD)* iX);
|
||
|
|
||
|
*pPixel= 0xFFFFFFFF;
|
||
|
}
|
||
|
|
||
|
pData+= StreamSource.dwStride;
|
||
|
|
||
|
pfXYZ= reinterpret_cast<const float*>(pData);
|
||
|
iX= pfXYZ[0];
|
||
|
iY= pfXYZ[1];
|
||
|
|
||
|
// TODO: Fix.
|
||
|
if( iX>= 0 && iX< ViewportInfo.dwWidth &&
|
||
|
iY>= 0 && iY< ViewportInfo.dwHeight)
|
||
|
{
|
||
|
DWORD* pPixel= reinterpret_cast<DWORD*>(
|
||
|
reinterpret_cast<UINT8*>(m_pDDSLcl->lpGbl->fpVidMem)+
|
||
|
(m_pDDSLcl->lpGbl->lPitch)* iY+ sizeof( DWORD)* iX);
|
||
|
|
||
|
*pPixel= 0xFFFFFFFF;
|
||
|
}
|
||
|
|
||
|
pData+= StreamSource.dwStride;
|
||
|
|
||
|
} while( --dwPrimCount);
|
||
|
|
||
|
pParam++;
|
||
|
} while( --wPrimitiveCount);
|
||
|
|
||
|
return DD_OK;
|
||
|
}
|
||
|
|
||
|
HRESULT CMyContext::DP2DrawPrimitive2( TDP2Data& DP2Data, const D3DHAL_DP2COMMAND* pCmd,
|
||
|
const void* pP)
|
||
|
{
|
||
|
const D3DHAL_DP2DRAWPRIMITIVE2* pParam=
|
||
|
reinterpret_cast< const D3DHAL_DP2DRAWPRIMITIVE2*>(pP);
|
||
|
|
||
|
const D3DHAL_DP2VIEWPORTINFO& ViewportInfo= (*this);
|
||
|
const D3DHAL_DP2VERTEXSHADER& VertexShader= (*this);
|
||
|
const D3DHAL_DP2SETSTREAMSOURCE& StreamSource= (*this);
|
||
|
const D3DHAL_DP2SETINDICES& Indices= (*this);
|
||
|
|
||
|
LPDDRAWI_DDRAWSURFACE_LCL pVBuffer= m_pGblDriver->SurfaceDBFind(
|
||
|
m_pAssociatedDDraw, StreamSource.dwVBHandle);
|
||
|
assert( pVBuffer!= NULL);
|
||
|
|
||
|
assert((VertexShader.dwHandle& D3DFVF_POSITION_MASK)== D3DFVF_XYZRHW);
|
||
|
|
||
|
const UINT8* pData= reinterpret_cast< const UINT8*>(
|
||
|
pVBuffer->lpGbl->fpVidMem);
|
||
|
pData+= pParam->FirstVertexOffset;
|
||
|
|
||
|
WORD wPrimitiveCount( pCmd->wPrimitiveCount);
|
||
|
if( wPrimitiveCount) do
|
||
|
{
|
||
|
assert( pParam->primType== D3DPT_TRIANGLELIST);
|
||
|
|
||
|
DWORD dwPrimCount( pParam->PrimitiveCount);
|
||
|
if( dwPrimCount) do
|
||
|
{
|
||
|
const float* pfXYZ= reinterpret_cast<const float*>(pData);
|
||
|
int iX( pfXYZ[0]);
|
||
|
int iY( pfXYZ[1]);
|
||
|
|
||
|
// TODO: Fix.
|
||
|
if( iX>= 0 && iX< ViewportInfo.dwWidth &&
|
||
|
iY>= 0 && iY< ViewportInfo.dwHeight)
|
||
|
{
|
||
|
DWORD* pPixel= reinterpret_cast<DWORD*>(
|
||
|
reinterpret_cast<UINT8*>(m_pDDSLcl->lpGbl->fpVidMem)+
|
||
|
(m_pDDSLcl->lpGbl->lPitch)* iY+ sizeof( DWORD)* iX);
|
||
|
|
||
|
*pPixel= 0xFFFFFFFF;
|
||
|
}
|
||
|
|
||
|
pData+= StreamSource.dwStride;
|
||
|
|
||
|
pfXYZ= reinterpret_cast<const float*>(pData);
|
||
|
iX= pfXYZ[0];
|
||
|
iY= pfXYZ[1];
|
||
|
|
||
|
// TODO: Fix.
|
||
|
if( iX>= 0 && iX< ViewportInfo.dwWidth &&
|
||
|
iY>= 0 && iY< ViewportInfo.dwHeight)
|
||
|
{
|
||
|
DWORD* pPixel= reinterpret_cast<DWORD*>(
|
||
|
reinterpret_cast<UINT8*>(m_pDDSLcl->lpGbl->fpVidMem)+
|
||
|
(m_pDDSLcl->lpGbl->lPitch)* iY+ sizeof( DWORD)* iX);
|
||
|
|
||
|
*pPixel= 0xFFFFFFFF;
|
||
|
}
|
||
|
|
||
|
pData+= StreamSource.dwStride;
|
||
|
|
||
|
pfXYZ= reinterpret_cast<const float*>(pData);
|
||
|
iX= pfXYZ[0];
|
||
|
iY= pfXYZ[1];
|
||
|
|
||
|
// TODO: Fix.
|
||
|
if( iX>= 0 && iX< ViewportInfo.dwWidth &&
|
||
|
iY>= 0 && iY< ViewportInfo.dwHeight)
|
||
|
{
|
||
|
DWORD* pPixel= reinterpret_cast<DWORD*>(
|
||
|
reinterpret_cast<UINT8*>(m_pDDSLcl->lpGbl->fpVidMem)+
|
||
|
(m_pDDSLcl->lpGbl->lPitch)* iY+ sizeof( DWORD)* iX);
|
||
|
|
||
|
*pPixel= 0xFFFFFFFF;
|
||
|
}
|
||
|
|
||
|
pData+= StreamSource.dwStride;
|
||
|
|
||
|
} while( --dwPrimCount);
|
||
|
|
||
|
pParam++;
|
||
|
} while( --wPrimitiveCount);
|
||
|
|
||
|
return DD_OK;
|
||
|
}
|
||
|
*/
|