Leaked source code of windows server 2003
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

/*==========================================================================;
*
* 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);
}