42std::unique_ptr<GlLookUpTable>
GlLookUpTable::create(
const std::function<QVector3D(
size_t value)> &func,
size_t size)
50 glBindTexture(GL_TEXTURE_2D,
handle);
51 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
52 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_LOD, 0);
53 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, 0);
54 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
55 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
56 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
57 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
58 std::vector<float> data;
59 data.reserve(4 *
size);
60 for (
size_t i = 0; i <
size; i++) {
61 const auto color = func(i);
62 data.push_back(color.x());
63 data.push_back(color.y());
64 data.push_back(color.z());
67 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F,
size, 1, 0, GL_RGBA, GL_FLOAT, data.data());
68 glBindTexture(GL_TEXTURE_2D, 0);
69 return std::make_unique<GlLookUpTable>(
handle,
size);