61 lines
2.1 KiB
C++
61 lines
2.1 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#include "picture/pict.h"
|
|
#include "math/nmath.h"
|
|
|
|
using namespace GS;
|
|
|
|
|
|
//------------------------------------------------------------------------------
|
|
void Picture::DrawPlot(float x, float y, float r, float g, float b, float a, const Rect <float> *clip_rect)
|
|
{
|
|
// Output validity.
|
|
if (!data || (pxformat.GetBpp() != 32) || pxformat.IsReal())
|
|
return;
|
|
|
|
// Clip primitive.
|
|
if (clip_rect && ((x < clip_rect->sx) || (x >= clip_rect->ex) || (y < clip_rect->sy) || (y >= clip_rect->ey)))
|
|
return;
|
|
|
|
// Draw.
|
|
AlphaCompositePixel(GetDataOffset((uint)x, (uint)y), uchar(r * 255.f), uchar(g * 255.f), uchar(b * 255.f), uchar(a * 255.f));
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
|
|
//------------------------------------------------------------------------------
|
|
void Picture::DrawPlotHQ(float x, float y, float r, float g, float b, float a, const Rect <float> *clip_rect)
|
|
{
|
|
// Output validity.
|
|
if (!data || (pxformat.GetBpp() != 32) || pxformat.IsReal())
|
|
return;
|
|
|
|
// Clip primitive.
|
|
if (clip_rect && ((x < clip_rect->sx) || (x >= (clip_rect->ex - 1)) || (y < clip_rect->sy) || (y >= (clip_rect->ey - 1))))
|
|
return;
|
|
|
|
// Draw.
|
|
uchar ir = uchar(r * 255.f),
|
|
ig = uchar(g * 255.f),
|
|
ib = uchar(b * 255.f),
|
|
ia = uchar(a * 255.f);
|
|
|
|
float xm = Math::Floor(x),
|
|
ym = Math::Floor(y);
|
|
|
|
float a0 = (xm + 1 - x) * (ym + 1 - y),
|
|
a1 = (x - xm) * (ym + 1 - y),
|
|
a2 = (xm + 1 - x) * (y - ym),
|
|
a3 = (x - xm) * (y - ym);
|
|
|
|
uchar *output = GetDataOffset((uint)x, (uint)y);
|
|
AlphaCompositePixel(output, ir, ig, ib, uchar(ia * a0));
|
|
AlphaCompositePixel(output + 4, ir, ig, ib, uchar(ia * a1));
|
|
AlphaCompositePixel(output + width * 4, ir, ig, ib, uchar(ia * a2));
|
|
AlphaCompositePixel(output + (width + 1) * 4, ir, ig, ib, uchar(ia * a3));
|
|
}
|
|
//------------------------------------------------------------------------------
|