2025-04-27 07:49:33 -04:00

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);
}