You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
102 lines
2.8 KiB
102 lines
2.8 KiB
/*==========================================================================;
|
|
*
|
|
* Copyright (C) 1995 Microsoft Corporation. All Rights Reserved.
|
|
*
|
|
* File: halmat.c
|
|
* Content: Direct3D HAL material handler
|
|
*@@BEGIN_MSINTERNAL
|
|
*
|
|
* $Id: halmat.c,v 1.1 1995/11/21 15:12:40 sjl Exp $
|
|
*
|
|
* History:
|
|
* Date By Reason
|
|
* ==== == ======
|
|
* 07/11/95 stevela Initial rev.
|
|
*@@END_MSINTERNAL
|
|
*
|
|
***************************************************************************/
|
|
|
|
#include "pch.cpp"
|
|
#pragma hdrstop
|
|
|
|
extern HRESULT SetMaterial(LPDIRECT3DDEVICEI lpDevI, D3DMATERIALHANDLE hMat);
|
|
|
|
HRESULT
|
|
D3DHAL_MaterialCreate(LPDIRECT3DDEVICEI lpDevI,
|
|
LPD3DMATERIALHANDLE lphMat,
|
|
LPD3DMATERIAL lpMat)
|
|
{
|
|
LPD3DFE_MATERIAL lpNewMat;
|
|
|
|
D3DMalloc((void**)&lpNewMat, sizeof(D3DFE_MATERIAL));
|
|
if (!lpNewMat)
|
|
return D3DERR_MATERIAL_CREATE_FAILED;
|
|
lpNewMat->mat = *lpMat;
|
|
LIST_INSERT_ROOT(&lpDevI->materials, lpNewMat, link);
|
|
*lphMat = (DWORD)((ULONG_PTR)lpNewMat);
|
|
|
|
// continue for ramp only - need to munge ramp handles and call ramp
|
|
// service with material info
|
|
return CallRampService(lpDevI, RAMP_SERVICE_CREATEMAT,
|
|
(ULONG_PTR) lpNewMat, 0);
|
|
}
|
|
|
|
HRESULT
|
|
D3DHAL_MaterialDestroy(LPDIRECT3DDEVICEI lpDevI, D3DMATERIALHANDLE hMat)
|
|
{
|
|
HRESULT hr;
|
|
|
|
if(hMat==0)
|
|
{
|
|
return D3DERR_MATERIAL_DESTROY_FAILED;
|
|
}
|
|
|
|
if (lpDevI->lighting.hMat == hMat)
|
|
lpDevI->lighting.hMat = 0;
|
|
|
|
hr = CallRampService(lpDevI, RAMP_SERVICE_DESTORYMAT, (DWORD) hMat, 0);
|
|
|
|
LPD3DFE_MATERIAL lpMat = (LPD3DFE_MATERIAL)ULongToPtr(hMat);
|
|
LIST_DELETE(lpMat, link);
|
|
D3DFree(lpMat);
|
|
return (hr);
|
|
}
|
|
|
|
HRESULT
|
|
D3DHAL_MaterialSetData(LPDIRECT3DDEVICEI lpDevI,
|
|
D3DMATERIALHANDLE hMat,
|
|
LPD3DMATERIAL lpMat)
|
|
{
|
|
if(hMat==0)
|
|
return D3DERR_MATERIAL_SETDATA_FAILED;
|
|
|
|
LPD3DFE_MATERIAL mat = (LPD3DFE_MATERIAL)ULongToPtr(hMat);
|
|
mat->mat = *lpMat;
|
|
if (hMat == lpDevI->lighting.hMat)
|
|
SetMaterial(lpDevI, hMat);
|
|
|
|
// continue for ramp only - need to munge ramp handles and call ramp
|
|
// service with material info
|
|
if(lpDevI->pfnRampService != NULL)
|
|
return CallRampService(lpDevI, RAMP_SERVICE_SETMATDATA,
|
|
(ULONG_PTR) hMat, 0, TRUE);
|
|
else
|
|
return D3D_OK;
|
|
}
|
|
|
|
HRESULT
|
|
D3DHAL_MaterialGetData(LPDIRECT3DDEVICEI lpDevI,
|
|
D3DMATERIALHANDLE hMat,
|
|
LPD3DMATERIAL lpMat)
|
|
{
|
|
|
|
if(hMat==0)
|
|
{
|
|
memset(lpMat,0,sizeof(D3DMATERIAL));
|
|
return D3DERR_MATERIAL_GETDATA_FAILED;
|
|
}
|
|
|
|
LPD3DFE_MATERIAL mat = (LPD3DFE_MATERIAL)ULongToPtr(hMat);
|
|
*lpMat = mat->mat;
|
|
return (D3D_OK);
|
|
}
|