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

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