summaryrefslogtreecommitdiff
path: root/src/render/gl/GLTexture.hpp
diff options
context:
space:
mode:
authorUjinT34 <41110182+UjinT34@users.noreply.github.com>2026-03-07 00:44:10 +0300
committerGitHub <noreply@github.com>2026-03-06 21:44:10 +0000
commit4152ac76d0813d9d0f67d2f04653a13fa6e17433 (patch)
treec341f1883cf5a182d32e4ad00192ba8786a9bb75 /src/render/gl/GLTexture.hpp
parenta5858018d896e0e0f0db517f893cd9a0936dd881 (diff)
renderer: refactor Texture, Framebuffer and Renderbuffer (#13437)
Part 1 of the renderer refactors
Diffstat (limited to 'src/render/gl/GLTexture.hpp')
-rw-r--r--src/render/gl/GLTexture.hpp49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/render/gl/GLTexture.hpp b/src/render/gl/GLTexture.hpp
new file mode 100644
index 00000000..34510e90
--- /dev/null
+++ b/src/render/gl/GLTexture.hpp
@@ -0,0 +1,49 @@
+#pragma once
+
+#include "../Texture.hpp"
+#include <aquamarine/buffer/Buffer.hpp>
+#include <hyprutils/math/Misc.hpp>
+
+class CGLTexture : public ITexture {
+ public:
+ using ITexture::ITexture;
+
+ CGLTexture(CGLTexture&) = delete;
+ CGLTexture(CGLTexture&&) = delete;
+ CGLTexture(const CGLTexture&&) = delete;
+ CGLTexture(const CGLTexture&) = delete;
+
+ CGLTexture(bool opaque = false);
+ CGLTexture(uint32_t drmFormat, uint8_t* pixels, uint32_t stride, const Vector2D& size, bool keepDataCopy = false, bool opaque = false);
+ CGLTexture(const Aquamarine::SDMABUFAttrs&, void* image, bool opaque = false);
+ CGLTexture(std::span<const float> lut3D, size_t N);
+ ~CGLTexture();
+
+ void allocate(const Vector2D& size, uint32_t drmFormat = 0) override;
+ void update(uint32_t drmFormat, uint8_t* pixels, uint32_t stride, const CRegion& damage) override;
+ void bind() override;
+ void unbind() override;
+ void setTexParameter(GLenum pname, GLint param) override;
+ bool ok() override;
+ bool isDMA() override;
+
+ private:
+ void* m_eglImage = nullptr;
+
+ enum eTextureParam : uint8_t {
+ TEXTURE_PAR_WRAP_S = 0,
+ TEXTURE_PAR_WRAP_T,
+ TEXTURE_PAR_MAG_FILTER,
+ TEXTURE_PAR_MIN_FILTER,
+ TEXTURE_PAR_SWIZZLE_R,
+ TEXTURE_PAR_SWIZZLE_B,
+ TEXTURE_PAR_LAST,
+ };
+
+ GLenum m_target = GL_TEXTURE_2D;
+
+ void swizzle(const std::array<GLint, 4>& colors);
+ constexpr std::optional<size_t> getCacheStateIndex(GLenum pname);
+
+ std::array<std::optional<GLint>, TEXTURE_PAR_LAST> m_cachedStates;
+};