summaryrefslogtreecommitdiff
path: root/gfx/gl/glTexture.cpp
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2026-03-10 01:33:39 +0000
committerDan Goodliffe <dan@randomdan.homeip.net>2026-03-10 01:33:39 +0000
commit61d6b49d5a4c5f58a2922a19a360e078a0aeacba (patch)
treec192508c15d880ccb84003f3494aa2e26d36324b /gfx/gl/glTexture.cpp
parentSpecialise glTexture::savePosition (diff)
downloadilt-61d6b49d5a4c5f58a2922a19a360e078a0aeacba.tar.bz2
ilt-61d6b49d5a4c5f58a2922a19a360e078a0aeacba.tar.xz
ilt-61d6b49d5a4c5f58a2922a19a360e078a0aeacba.zip
Switch to floating point, camera relative position buffer
Diffstat (limited to 'gfx/gl/glTexture.cpp')
-rw-r--r--gfx/gl/glTexture.cpp15
1 files changed, 7 insertions, 8 deletions
diff --git a/gfx/gl/glTexture.cpp b/gfx/gl/glTexture.cpp
index 0bc3d62..51a27ed 100644
--- a/gfx/gl/glTexture.cpp
+++ b/gfx/gl/glTexture.cpp
@@ -159,18 +159,17 @@ Impl::glTextureDims<Dims>::savePosition(const char * path) const
.size = {size.x, (area / static_cast<size_t>(size.x))},
};
glPixelStorei(GL_PACK_ALIGNMENT, 1);
- std::vector<GlobalPosition3D> raw {area};
- glGetTextureImage(
- name, 0, GL_BGR_INTEGER, GL_INT, static_cast<GLsizei>(sizeof(GlobalPosition3D) * area), raw.data());
- using Comp = GlobalPosition3D (*)(const GlobalPosition3D &, const GlobalPosition3D &);
- auto notZero = std::views::filter([](const GlobalPosition3D & pos) {
- return pos != GlobalPosition3D {};
+ std::vector<RelativePosition3D> raw {area};
+ glGetTextureImage(name, 0, GL_BGR, GL_FLOAT, static_cast<GLsizei>(sizeof(GlobalPosition3D) * area), raw.data());
+ using Comp = RelativePosition3D (*)(const RelativePosition3D &, const RelativePosition3D &);
+ auto notZero = std::views::filter([](const RelativePosition3D & pos) {
+ return pos != RelativePosition3D {};
});
const auto minPos = *std::ranges::fold_left_first(raw | notZero, static_cast<Comp>(&glm::min));
const auto maxPos = *std::ranges::fold_left_first(raw | notZero, static_cast<Comp>(&glm::max));
const auto rangePos = difference(maxPos, minPos);
- std::ranges::transform(raw, outTga->data, [minPos, rangePos](const GlobalPosition3D & pos) {
- return GlobalPosition3D(255.F * (difference(pos, minPos) / rangePos));
+ std::ranges::transform(raw, outTga->data, [minPos, rangePos](const auto & pos) {
+ return 255.F * ((pos - minPos) / rangePos);
});
tga.msync(MS_ASYNC);
}