164 lines
4 KiB
C++
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;
|
|
}
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|