86 lines
1.7 KiB
C++
86 lines
1.7 KiB
C++
#include "pch.cpp"
|
|
#pragma hdrstop
|
|
|
|
#include "d3drend.h"
|
|
#include "util.h"
|
|
|
|
D3dMaterial::D3dMaterial(void)
|
|
{
|
|
_pdmat = NULL;
|
|
}
|
|
|
|
BOOL D3dMaterial::Initialize(LPDIRECT3D pd3d, LPDIRECT3DDEVICE pd3dev,
|
|
UINT nColorEntries)
|
|
{
|
|
D3DCOLORVALUE dcol;
|
|
|
|
_pd3dev = pd3dev;
|
|
hrLast = pd3d->CreateMaterial(&_pdmat, NULL);
|
|
if (hrLast != D3D_OK)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
memset(&_dmat, 0, sizeof(_dmat));
|
|
_dmat.dwSize = sizeof(_dmat);
|
|
dcol.r = D3DVAL(1);
|
|
dcol.g = D3DVAL(1);
|
|
dcol.b = D3DVAL(1);
|
|
dcol.a = D3DVAL(1);
|
|
_dmat.dcvDiffuse = dcol;
|
|
_dmat.dcvAmbient = dcol;
|
|
_dmat.dcvSpecular = dcol;
|
|
_dmat.dwRampSize = nColorEntries;
|
|
hrLast = _pdmat->SetMaterial(&_dmat);
|
|
return hrLast == D3D_OK;
|
|
}
|
|
|
|
D3dMaterial::~D3dMaterial(void)
|
|
{
|
|
_pdmat->Release();
|
|
}
|
|
|
|
void D3dMaterial::Release(void)
|
|
{
|
|
delete this;
|
|
}
|
|
|
|
D3DMATERIALHANDLE D3dMaterial::Handle(void)
|
|
{
|
|
D3DMATERIALHANDLE dmath;
|
|
|
|
hrLast = _pdmat->GetHandle(_pd3dev, &dmath);
|
|
if (hrLast != D3D_OK)
|
|
{
|
|
return NULL;
|
|
}
|
|
return dmath;
|
|
}
|
|
|
|
void D3dMaterial::SetDiffuse(D3DCOLORVALUE* pdcol)
|
|
{
|
|
_dmat.dcvAmbient = *pdcol;
|
|
_dmat.dcvDiffuse = *pdcol;
|
|
hrLast = _pdmat->SetMaterial(&_dmat);
|
|
}
|
|
|
|
void D3dMaterial::SetSpecular(D3DCOLORVALUE* pdcol, float fPower)
|
|
{
|
|
_dmat.dcvSpecular = *pdcol;
|
|
_dmat.dvPower = D3DVAL(fPower);
|
|
hrLast = _pdmat->SetMaterial(&_dmat);
|
|
}
|
|
|
|
void D3dMaterial::SetTexture(RendTexture *prtex)
|
|
{
|
|
if (prtex != NULL)
|
|
{
|
|
_dmat.hTexture = prtex->Handle();
|
|
}
|
|
else
|
|
{
|
|
_dmat.hTexture = NULL;
|
|
}
|
|
hrLast = _pdmat->SetMaterial(&_dmat);
|
|
}
|