windows-nt/Source/XPSP1/NT/multimedia/directx/dxvb/dx7vb/d3dvertexbuffer7obj.cpp
2020-09-26 16:20:57 +08:00

164 lines
4 KiB
C++

//+-------------------------------------------------------------------------
//
// 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;
}
/////////////////////////////////////////////////////////////////////////////