gzdoom/src/swrenderer/viewport/r_drawerargs.cpp

86 lines
2.7 KiB
C++

//-----------------------------------------------------------------------------
//
// Copyright 1993-1996 id Software
// Copyright 1999-2016 Randy Heit
// Copyright 2016 Magnus Norddahl
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see http://www.gnu.org/licenses/
//
//-----------------------------------------------------------------------------
#include <stddef.h>
#include "r_drawerargs.h"
namespace swrenderer
{
void DrawerArgs::SetLight(FSWColormap *base_colormap, float light, int shade)
{
mBaseColormap = base_colormap;
assert(mBaseColormap->Maps != nullptr);
mLight = light;
mShade = shade;
}
void DrawerArgs::SetTranslationMap(lighttable_t *translation)
{
mTranslation = translation;
}
uint8_t *DrawerArgs::Colormap(RenderViewport *viewport) const
{
if (mBaseColormap)
{
if (viewport->RenderTarget->IsBgra())
return mBaseColormap->Maps;
else
return mBaseColormap->Maps + (GETPALOOKUP(mLight, mShade) << COLORMAPSHIFT);
}
else
{
return mTranslation;
}
}
ShadeConstants DrawerArgs::ColormapConstants() const
{
ShadeConstants shadeConstants;
if (mBaseColormap)
{
shadeConstants.light_red = mBaseColormap->Color.r * 256 / 255;
shadeConstants.light_green = mBaseColormap->Color.g * 256 / 255;
shadeConstants.light_blue = mBaseColormap->Color.b * 256 / 255;
shadeConstants.light_alpha = mBaseColormap->Color.a * 256 / 255;
shadeConstants.fade_red = mBaseColormap->Fade.r;
shadeConstants.fade_green = mBaseColormap->Fade.g;
shadeConstants.fade_blue = mBaseColormap->Fade.b;
shadeConstants.fade_alpha = mBaseColormap->Fade.a;
shadeConstants.desaturate = MIN(abs(mBaseColormap->Desaturate), 255) * 255 / 256;
shadeConstants.simple_shade = (mBaseColormap->Color.d == 0x00ffffff && mBaseColormap->Fade.d == 0x00000000 && mBaseColormap->Desaturate == 0);
}
else
{
shadeConstants.light_red = 256;
shadeConstants.light_green = 256;
shadeConstants.light_blue = 256;
shadeConstants.light_alpha = 256;
shadeConstants.fade_red = 0;
shadeConstants.fade_green = 0;
shadeConstants.fade_blue = 0;
shadeConstants.fade_alpha = 256;
shadeConstants.desaturate = 0;
shadeConstants.simple_shade = true;
}
return shadeConstants;
}
}