63 lines
1.3 KiB
C++
63 lines
1.3 KiB
C++
#include "pch.cpp"
|
|
#pragma hdrstop
|
|
|
|
#include "glrend.h"
|
|
#include "util.h"
|
|
|
|
#define GLMAT_DIFFUSE 0x0001
|
|
#define GLMAT_SPECULAR 0x0002
|
|
|
|
GlMaterial::GlMaterial(void)
|
|
{
|
|
_uiFlags = 0;
|
|
}
|
|
|
|
void GlMaterial::Release(void)
|
|
{
|
|
delete this;
|
|
}
|
|
|
|
D3DMATERIALHANDLE GlMaterial::Handle(void)
|
|
{
|
|
return (D3DMATERIALHANDLE)this;
|
|
}
|
|
|
|
void GlMaterial::SetDiffuse(D3DCOLORVALUE* pdcol)
|
|
{
|
|
_uiFlags |= GLMAT_DIFFUSE;
|
|
_afDiffuse[0] = pdcol->r;
|
|
_afDiffuse[1] = pdcol->g;
|
|
_afDiffuse[2] = pdcol->b;
|
|
_afDiffuse[3] = pdcol->a;
|
|
}
|
|
|
|
void GlMaterial::SetSpecular(D3DCOLORVALUE* pdcol, float fPower)
|
|
{
|
|
_uiFlags |= GLMAT_SPECULAR;
|
|
_afSpecular[0] = pdcol->r;
|
|
_afSpecular[1] = pdcol->g;
|
|
_afSpecular[2] = pdcol->b;
|
|
_afSpecular[3] = pdcol->a;
|
|
_fPower = fPower;
|
|
}
|
|
|
|
void GlMaterial::SetTexture(RendTexture* prtex)
|
|
{
|
|
// Nothing to do
|
|
}
|
|
|
|
void GlMaterial::Apply(void)
|
|
{
|
|
if (_uiFlags & GLMAT_DIFFUSE)
|
|
{
|
|
// ATTENTION - This should be AMBIENT_AND_DIFFUSE but doing so
|
|
// causes complete color overload
|
|
glMaterialfv(GL_FRONT, GL_DIFFUSE, _afDiffuse);
|
|
}
|
|
if (_uiFlags & GLMAT_SPECULAR)
|
|
{
|
|
glMaterialfv(GL_FRONT, GL_SPECULAR, _afSpecular);
|
|
glMaterialf(GL_FRONT, GL_SHININESS, _fPower);
|
|
}
|
|
}
|