fix dithergen
This commit is contained in:
@@ -16,11 +16,12 @@ void DitherGen(DitherData& data, int32_t recursion)
|
||||
for (int32_t i = 0; i < data.BrightnessBucketCount; ++i)
|
||||
data.BrightnessBuckets[i] = 0;
|
||||
|
||||
for (int32_t recursionLevel = 0; recursionLevel < recursion; ++recursionLevel)
|
||||
// add "subdivided" beyer matrix layers
|
||||
for (int32_t recursionLevel = 0; recursionLevel < recursion - 1; ++recursionLevel)
|
||||
{
|
||||
int32_t startCount = data.PointCount;
|
||||
float offset = bx::pow(0.5f, recursionLevel + 1);
|
||||
for (int32_t i = 0; i < 4; ++i)
|
||||
for (int32_t i = 1; i < 4; ++i)
|
||||
{
|
||||
for (int32_t j = 0; j < startCount; ++j)
|
||||
{
|
||||
@@ -30,6 +31,7 @@ void DitherGen(DitherData& data, int32_t recursion)
|
||||
}
|
||||
}
|
||||
|
||||
// Texture info setup
|
||||
uint64_t dotsPerSide = bx::round(bx::pow(2, recursion));
|
||||
data.DitherTexDepth = dotsPerSide * dotsPerSide;
|
||||
data.DitherTexWH = 16 * dotsPerSide;
|
||||
@@ -41,6 +43,7 @@ void DitherGen(DitherData& data, int32_t recursion)
|
||||
return;
|
||||
}
|
||||
|
||||
// What does this do?
|
||||
float invRes = 1.0f / data.DitherTexWH;
|
||||
for (int32_t z = 0; z < data.DitherTexDepth; ++z)
|
||||
{
|
||||
@@ -48,7 +51,7 @@ void DitherGen(DitherData& data, int32_t recursion)
|
||||
float dotArea = 0.5f / dotCount;
|
||||
float dotRadius = bx::sqrt(dotArea / bx::kPi);
|
||||
|
||||
int zOffset = z * data.DitherTexWH * data.DitherTexWH;
|
||||
int32_t zOffset = z * data.DitherTexWH * data.DitherTexWH;
|
||||
for (int32_t y = 0; y < data.DitherTexWH; ++y)
|
||||
{
|
||||
int32_t yOffset = y * data.DitherTexWH;
|
||||
@@ -59,7 +62,9 @@ void DitherGen(DitherData& data, int32_t recursion)
|
||||
for (int32_t i = 0; i < dotCount; ++i)
|
||||
{
|
||||
Vec2 vec = point - data.Points[i];
|
||||
Vec2 wrappedVec{bx::mod(vec.x + 0.5f, 1.0f) - 0.5f, bx::mod(vec.y + 0.5f, 1.0f) - 0.5f};
|
||||
float wrapX = bx::wrap(vec.x + 0.5f, 1.0f) - 0.5f;
|
||||
float wrapY = bx::wrap(vec.y + 0.5f, 1.0f) - 0.5f;
|
||||
Vec2 wrappedVec = {wrapX, wrapY};
|
||||
float curDist = Magnitude(wrappedVec);
|
||||
dist = bx::min(dist, curDist);
|
||||
}
|
||||
@@ -67,7 +72,6 @@ void DitherGen(DitherData& data, int32_t recursion)
|
||||
dist = dist / (dotRadius * 2.4f);
|
||||
float val = bx::clamp(1.0f - dist, 0.0f, 1.0f);
|
||||
data.DitherTex[x + yOffset + zOffset] = Vec4{val, val, val, 1.0f};
|
||||
// data.DitherTex[x + yOffset + zOffset] = Vec4{1.0, 0.0f, 0.0f, 1.0f};
|
||||
int32_t bucket = bx::clamp(
|
||||
uint32_t(val * DitherData::BrightnessBucketCount), 0, DitherData::BrightnessBucketCount - 1);
|
||||
data.BrightnessBuckets[bucket] += 1;
|
||||
|
||||
@@ -103,7 +103,7 @@ namespace Game
|
||||
uint32_t ResetFlags = BGFX_RESET_VSYNC;
|
||||
uint16_t MainViewID = 10;
|
||||
float LastShaderLoadTime = 0.0f;
|
||||
int32_t DitherRecursion = 1;
|
||||
int32_t DitherRecursion = 3;
|
||||
|
||||
public:
|
||||
void Setup(const RenderingSetup& setup);
|
||||
|
||||
Reference in New Issue
Block a user