KWin
Loading...
Searching...
No Matches
gllut.cpp
Go to the documentation of this file.
1/*
2 KWin - the KDE window manager
3 This file is part of the KDE project.
4
5 SPDX-FileCopyrightText: 2023 Xaver Hugl <xaver.hugl@gmail.com>
6
7 SPDX-License-Identifier: GPL-2.0-or-later
8*/
9#include "gllut.h"
10
11#include <vector>
12
13namespace KWin
14{
15
16GlLookUpTable::GlLookUpTable(GLuint handle, size_t size)
17 : m_handle(handle)
18 , m_size(size)
19{
20}
21
23{
24 glDeleteTextures(1, &m_handle);
25}
26
28{
29 return m_handle;
30}
31
32size_t GlLookUpTable::size() const
33{
34 return m_size;
35}
36
38{
39 glBindTexture(GL_TEXTURE_2D, m_handle);
40}
41
42std::unique_ptr<GlLookUpTable> GlLookUpTable::create(const std::function<QVector3D(size_t value)> &func, size_t size)
43{
44 GLuint handle = 0;
45 glGenTextures(1, &handle);
46 if (!handle) {
47 return nullptr;
48 }
49 // this uses 2D textures because OpenGL ES doesn't support 1D textures
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());
65 data.push_back(1);
66 }
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);
70}
71
72}
GLuint handle() const
Definition gllut.cpp:27
static std::unique_ptr< GlLookUpTable > create(const std::function< QVector3D(size_t value)> &func, size_t size)
Definition gllut.cpp:42
GlLookUpTable(GLuint handle, size_t size)
Definition gllut.cpp:16
size_t size() const
Definition gllut.cpp:32