Shader compile thread seperation
This commit is contained in:
@@ -5,10 +5,8 @@
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
#include <cstring>
|
||||
#include <fstream>
|
||||
#include <gdiplus.h>
|
||||
#include <memory>
|
||||
#include <sstream>
|
||||
|
||||
namespace
|
||||
{
|
||||
@@ -163,61 +161,6 @@ std::vector<unsigned char> BuildTextSdfTexture(const std::vector<unsigned char>&
|
||||
return sdf;
|
||||
}
|
||||
|
||||
void WriteTextMaskDebugDump(const std::string& text, const std::vector<unsigned char>& alpha, const std::vector<unsigned char>& sdf, unsigned width, unsigned height)
|
||||
{
|
||||
try
|
||||
{
|
||||
std::filesystem::path debugDir = std::filesystem::current_path() / "runtime";
|
||||
std::filesystem::create_directories(debugDir);
|
||||
|
||||
auto writePgm = [width, height](const std::filesystem::path& path, const std::vector<unsigned char>& gray, std::size_t stride)
|
||||
{
|
||||
std::ofstream out(path, std::ios::binary);
|
||||
if (!out)
|
||||
return;
|
||||
out << "P5\n" << width << " " << height << "\n255\n";
|
||||
for (unsigned y = 0; y < height; ++y)
|
||||
{
|
||||
for (unsigned x = 0; x < width; ++x)
|
||||
out.put(static_cast<char>(gray[(static_cast<std::size_t>(y) * width + x) * stride]));
|
||||
}
|
||||
};
|
||||
|
||||
writePgm(debugDir / "text-mask-alpha-debug.pgm", alpha, 1);
|
||||
writePgm(debugDir / "text-mask-sdf-debug.pgm", sdf, 4);
|
||||
|
||||
unsigned alphaMin = 255;
|
||||
unsigned alphaMax = 0;
|
||||
unsigned sdfMin = 255;
|
||||
unsigned sdfMax = 0;
|
||||
std::size_t alphaLit = 0;
|
||||
std::size_t sdfLit = 0;
|
||||
for (unsigned char value : alpha)
|
||||
{
|
||||
alphaMin = std::min<unsigned>(alphaMin, value);
|
||||
alphaMax = std::max<unsigned>(alphaMax, value);
|
||||
if (value > 0)
|
||||
++alphaLit;
|
||||
}
|
||||
for (std::size_t index = 0; index < sdf.size(); index += 4)
|
||||
{
|
||||
const unsigned char value = sdf[index];
|
||||
sdfMin = std::min<unsigned>(sdfMin, value);
|
||||
sdfMax = std::max<unsigned>(sdfMax, value);
|
||||
if (value > 127)
|
||||
++sdfLit;
|
||||
}
|
||||
|
||||
std::ostringstream message;
|
||||
message << "Text mask debug for '" << text << "': alpha min/max/lit=" << alphaMin << "/" << alphaMax << "/" << alphaLit
|
||||
<< ", sdf min/max/gt127=" << sdfMin << "/" << sdfMax << "/" << sdfLit << "\n";
|
||||
OutputDebugStringA(message.str().c_str());
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
OutputDebugStringA("Failed to write text mask debug dump.\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool RasterizeTextSdf(const std::string& text, const std::filesystem::path& fontPath, std::vector<unsigned char>& sdf, std::string& error)
|
||||
@@ -296,6 +239,5 @@ bool RasterizeTextSdf(const std::string& text, const std::filesystem::path& font
|
||||
}
|
||||
}
|
||||
sdf = BuildTextSdfTexture(alpha, kTextTextureWidth, kTextTextureHeight);
|
||||
WriteTextMaskDebugDump(text, alpha, sdf, kTextTextureWidth, kTextTextureHeight);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user