//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1998 - 1999 // // File: d3dvertexbuffer7obj.cpp // //-------------------------------------------------------------------------- // d3dMaterialObj.cpp : Implementation of CDirectApp and DLL registration. #include "stdafx.h" #include "Direct.h" #include "dms.h" #include "d3dVertexBuffer7Obj.h" CONSTRUCTOR(_dxj_Direct3dVertexBuffer7, {m_pData=NULL;m_vertSize=0;}); DESTRUCTOR(_dxj_Direct3dVertexBuffer7, {}); GETSET_OBJECT(_dxj_Direct3dVertexBuffer7); ///////////////////////////////////////////////////////////////////////////// STDMETHODIMP C_dxj_Direct3dVertexBuffer7Object::getVertexBufferDesc( /* [out][in] */ D3dVertexBufferDesc __RPC_FAR *desc) { HRESULT hr; ((D3DVERTEXBUFFERDESC*)desc)->dwSize=sizeof(D3DVERTEXBUFFERDESC); hr=m__dxj_Direct3dVertexBuffer7->GetVertexBufferDesc((D3DVERTEXBUFFERDESC*)desc); return hr; } ///////////////////////////////////////////////////////////////////////////// STDMETHODIMP C_dxj_Direct3dVertexBuffer7Object::processVertices( /* [in] */ long vertexOp, /* [in] */ long destIndex, /* [in] */ long count, /* [in] */ I_dxj_Direct3dVertexBuffer7 __RPC_FAR *srcBuffer, /* [in] */ long srcIndex, /* [in] */ I_dxj_Direct3dDevice7 __RPC_FAR *dev, long flags ) { HRESULT hr; if (!srcBuffer) return E_INVALIDARG; if (!dev) return E_INVALIDARG; DO_GETOBJECT_NOTNULL( LPDIRECT3DVERTEXBUFFER7, realBuffer, srcBuffer); DO_GETOBJECT_NOTNULL( LPDIRECT3DDEVICE7, realDev, dev); hr=m__dxj_Direct3dVertexBuffer7->ProcessVertices( (DWORD) vertexOp, (DWORD) destIndex, (DWORD) count, realBuffer, (DWORD) srcIndex, realDev, (DWORD) flags); return hr; } ///////////////////////////////////////////////////////////////////////////// STDMETHODIMP C_dxj_Direct3dVertexBuffer7Object::lock( /* [in] */ long flags) { HRESULT hr; hr=m__dxj_Direct3dVertexBuffer7->Lock((DWORD) flags, &m_pData,NULL); return hr; } ///////////////////////////////////////////////////////////////////////////// STDMETHODIMP C_dxj_Direct3dVertexBuffer7Object::setVertexSize( /* [in] */ long n) { m_vertSize=(DWORD)n; return S_OK; } ///////////////////////////////////////////////////////////////////////////// STDMETHODIMP C_dxj_Direct3dVertexBuffer7Object::unlock() { HRESULT hr; hr=m__dxj_Direct3dVertexBuffer7->Unlock(); m_pData=NULL; return hr; } ///////////////////////////////////////////////////////////////////////////// STDMETHODIMP C_dxj_Direct3dVertexBuffer7Object::optimize( /* [in] */ I_dxj_Direct3dDevice7 __RPC_FAR *dev ) { HRESULT hr; if (!dev) return E_INVALIDARG; DO_GETOBJECT_NOTNULL( LPDIRECT3DDEVICE7, realdev, dev); hr=m__dxj_Direct3dVertexBuffer7->Optimize(realdev,(DWORD) 0); return hr; } ///////////////////////////////////////////////////////////////////////////// STDMETHODIMP C_dxj_Direct3dVertexBuffer7Object::setVertices( /* [in] */ long startIndex, /* [in] */ long count, /* [in] */ void __RPC_FAR *verts) { if (!m_vertSize) return E_FAIL; if (!m_pData) return E_FAIL; if (!verts) return E_INVALIDARG; __try { memcpy(&(((char*)m_pData) [startIndex*m_vertSize]),verts,count*m_vertSize); } __except(1,1){ return E_FAIL; } return S_OK; } ///////////////////////////////////////////////////////////////////////////// STDMETHODIMP C_dxj_Direct3dVertexBuffer7Object::getVertices( /* [in] */ long startIndex, /* [in] */ long count, /* [in] */ void __RPC_FAR *verts) { if (!m_vertSize) { return E_FAIL; } if (!m_pData) { return E_FAIL; } if (!verts) return E_INVALIDARG; __try { memcpy(verts,&( ((char*)m_pData) [startIndex*m_vertSize]),count*m_vertSize); } __except(1,1){ return E_FAIL; } return S_OK; } /////////////////////////////////////////////////////////////////////////////