commit x64 compilation from lulu cause the other branch dont seems to compile properly at home

This commit is contained in:
2026-07-17 16:08:20 +02:00
parent c0f3eeb00d
commit 0efa4ee6f7
625 changed files with 117283 additions and 4426 deletions

View File

@ -0,0 +1,122 @@
/* -----------------------------------------------------------------------------
GSFramework
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
------------------------------------------------------------------------------*/
#include "picture/pict_tools.h"
#include "picture/pict.h"
using namespace GS;
namespace GS {
namespace PictureTools {
bool Compare(const Picture &a, const Picture &b, float threshold)
{
if ((a.GetWidth() != b.GetWidth()) || (a.GetHeight() != b.GetHeight()))
return false;
float dt = 0.f;
for (uint y = 0; y < a.GetHeight(); ++y)
for (uint x = 0; x < a.GetWidth(); ++x)
for (int c = 0; c < 4; ++c)
dt += (a.GetDataOffset(x, y)[c] - b.GetDataOffset(x, y)[c]) / 255.f;
return asbool(dt <= threshold);
}
} // PictureTools
} // GS
//------------------------------------------------------------------------------
bool Picture::Fill(float r, float g, float b, float a, const iRect *rect, bool lock_alpha)
{
uint *data = (uint *)GetData();
if (GetBpp() != 32)
return false;
if (!data)
return false;
// Convert color.
uint fill = GetPixelFormat().Format(r, g, b, a);
uchar ur = uchar(r * 255),
ug = uchar(g * 255),
ub = uchar(b * 255)/*,
ua = uchar(a * 255)*/;
if (rect)
{
Rect <int> _rect = rect->Intersection(GetRect());
if ((_rect.sy >= _rect.ey) || (_rect.sx >= _rect.ex))
return false;
data += _rect.sx + _rect.sy * width;
for (int y = 0; y < _rect.GetHeight(); ++y)
{
if (lock_alpha)
{
uchar *scan = (uchar *)data;
for (int x = 0; x < _rect.GetWidth(); ++x)
{
scan[GetPixelFormat().rshift >> 3] = ur;
scan[GetPixelFormat().gshift >> 3] = ug;
scan[GetPixelFormat().bshift >> 3] = ub;
// scan[GetPixelFormat().ashift >> 3] = ua;
scan += 4;
}
}
else
{
uint *scan = data;
for (int x = 0; x < _rect.GetWidth(); ++x)
*scan++ = fill;
}
data += width;
}
}
else
{
if (lock_alpha)
{
uchar *scan = (uchar *)data;
for (uint n = 0; n < GetWidth() * GetHeight(); n++)
{
scan[GetPixelFormat().rshift >> 3] = ur;
scan[GetPixelFormat().gshift >> 3] = ug;
scan[GetPixelFormat().bshift >> 3] = ub;
// scan[GetPixelFormat().ashift >> 3] = ua;
scan += 4;
}
}
else
for (uint n = 0; n < GetWidth() * GetHeight(); n++)
data[n] = fill;
}
return true;
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
bool Picture::ToGrayscale()
{
if (!(GetWidth() && GetHeight()))
return false;
if (GetBpp() != 32)
return false;
uchar *ptr = GetData();
for (uint y = 0; y < GetHeight(); y++)
for (uint x = 0; x < GetWidth(); x++)
{
int v = (ptr[0] + ptr[1] + ptr[2]) / 3;
ptr[0] = ptr[1] = ptr[2] = (uchar)v;
ptr += 4;
}
return true;
}
//------------------------------------------------------------------------------