Skip to content

Commit

Permalink
fixed off-by-one error in the pixel height calculation
Browse files Browse the repository at this point in the history
It should be max index / max size because 4096 / 4096 + 1 = 2, which means that two rows are allocated when a LUT1D with a size of 4096 fits in a 1D texture of 4096 pixels.

Signed-off-by: Hannes Vernooij <[email protected]>
  • Loading branch information
hannes-vernooij committed Nov 17, 2023
1 parent 4f4f30e commit 730e315
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions src/OpenColorIO/ops/lut1d/Lut1DOpGPU.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,13 +154,13 @@ void GetLut1DGPUShaderProgram(GpuShaderCreatorRcPtr & shaderCreator,

const unsigned long length = lutData->getArray().getLength();
const unsigned long width = std::min(length, defaultMaxWidth);
const unsigned long height = (length / defaultMaxWidth) + 1;
const unsigned long height = ((length - 1) / defaultMaxWidth) + 1;
const unsigned long numChannels = lutData->getArray().getNumColorComponents();

// Note: The 1D LUT needs a GPU texture for the Look-up table implementation.
// Note: The 1D LUT needs a GPU texture for the Look-up table implementation.
// However, the texture type & content may vary based on the number of channels
// i.e. when all channels are identical a F32 Red GPU texture is enough.

const bool singleChannel = (numChannels == 1);

// Adjust LUT texture to allow for correct 2d linear interpolation, if needed.
Expand Down Expand Up @@ -335,13 +335,13 @@ void GetLut1DGPUShaderProgram(GpuShaderCreatorRcPtr & shaderCreator,
{
const std::string str = name + "_computePos(" + shaderCreator->getPixelName();

ss.newLine() << shaderCreator->getPixelName() << ".r = "
ss.newLine() << shaderCreator->getPixelName() << ".r = "
<< ss.sampleTex2D(name, str + ".r)") << ".r;";

ss.newLine() << shaderCreator->getPixelName() << ".g = "
<< ss.sampleTex2D(name, str + ".g)") << (singleChannel ? ".r;" : ".g;");

ss.newLine() << shaderCreator->getPixelName() << ".b = "
ss.newLine() << shaderCreator->getPixelName() << ".b = "
<< ss.sampleTex2D(name, str + ".b)") << (singleChannel ? ".r;" : ".b;");
}
else
Expand Down

0 comments on commit 730e315

Please sign in to comment.