mirror of
https://github.com/AquariaOSE/Aquaria.git
synced 2024-11-25 17:53:47 +00:00
68b3c61852
This will eventually handle all mutable state during rendering
49 lines
799 B
C++
49 lines
799 B
C++
#include "RenderState.h"
|
|
#include "Base.h"
|
|
#include "RenderBase.h"
|
|
|
|
|
|
RenderState::RenderState(GPUState &gpu)
|
|
: gpu(gpu), color(1,1,1), alpha(1)
|
|
{
|
|
}
|
|
|
|
|
|
struct BlendParams
|
|
{
|
|
GLenum src, dst;
|
|
};
|
|
static const BlendParams s_blendParams[] =
|
|
{
|
|
{ GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA },
|
|
{ GL_SRC_ALPHA, GL_ONE },
|
|
{ GL_ZERO, GL_SRC_ALPHA },
|
|
{ GL_ZERO, GL_SRC_COLOR },
|
|
};
|
|
|
|
|
|
GPUState::GPUState()
|
|
: _blendType(BLEND_DISABLED)
|
|
{
|
|
setBlend(BLEND_DEFAULT);
|
|
}
|
|
|
|
void GPUState::setBlend(BlendType bt)
|
|
{
|
|
compile_assert(Countof(s_blendParams) == _BLEND_MAXSIZE);
|
|
if(_blendType == bt)
|
|
return;
|
|
|
|
_blendType = bt;
|
|
if (bt >= BLEND_DEFAULT)
|
|
{
|
|
glEnable(GL_BLEND);
|
|
const BlendParams& bp = s_blendParams[bt];
|
|
glBlendFunc(bp.src, bp.dst);
|
|
}
|
|
else
|
|
{
|
|
glDisable(GL_BLEND);
|
|
glDisable(GL_ALPHA_TEST);
|
|
}
|
|
}
|