summaryrefslogtreecommitdiff
path: root/gfx
diff options
context:
space:
mode:
Diffstat (limited to 'gfx')
-rw-r--r--gfx/gl/billboardPainter.cpp11
-rw-r--r--gfx/gl/glTexture.h15
-rw-r--r--gfx/gl/sceneRenderer.cpp6
-rw-r--r--gfx/gl/shadowMapper.cpp10
-rw-r--r--gfx/gl/shadowStenciller.cpp8
-rw-r--r--gfx/models/texture.cpp18
6 files changed, 40 insertions, 28 deletions
diff --git a/gfx/gl/billboardPainter.cpp b/gfx/gl/billboardPainter.cpp
index d021efb..3b03c87 100644
--- a/gfx/gl/billboardPainter.cpp
+++ b/gfx/gl/billboardPainter.cpp
@@ -1,5 +1,4 @@
#include "billboardPainter.h"
-#include "gl_traits.h"
#include "gldebug.h"
#include "maths.h"
#include <gfx/gl/shaders/billboardPainter-frag.h>
@@ -44,12 +43,12 @@ BillboardPainter::configureBillBoardTextures(glTextures<3> & textures, GLsizei w
glDebugScope _ {0};
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- const auto configuregdata = [width, height](const auto & texture, const GLint iformat, const GLenum format) {
+ const auto configuregdata = [width, height](Impl::glTexture & texture, const GLint iformat, const GLenum format) {
texture.bind(GL_TEXTURE_2D_ARRAY);
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ texture.parameter(GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ texture.parameter(GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ texture.parameter(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ texture.parameter(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, iformat, width, height, VIEW_ANGLES<GLint>, 0, format, GL_BYTE, nullptr);
};
configuregdata(textures[0], GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT);
diff --git a/gfx/gl/glTexture.h b/gfx/gl/glTexture.h
index c482198..5e5c838 100644
--- a/gfx/gl/glTexture.h
+++ b/gfx/gl/glTexture.h
@@ -2,12 +2,27 @@
#include "config/types.h"
#include "glArrays.h"
+#include "gl_traits.h"
namespace Impl {
// NOLINTNEXTLINE(readability-identifier-naming)
struct glTexture : Detail::glNamed {
[[nodiscard]] TextureDimensions getSize() const;
void bind(GLenum type = GL_TEXTURE_2D, GLenum unit = GL_TEXTURE0) const;
+
+ template<has_glTextureParameter T>
+ void
+ parameter(GLenum pname, T param)
+ {
+ (*gl_traits<T>::glTextureParameterFunc)(name, pname, param);
+ }
+
+ template<glm::length_t L, has_glTextureParameterv T, glm::qualifier Q>
+ void
+ parameter(GLenum pname, const glm::vec<L, T, Q> & param)
+ {
+ (*gl_traits<T>::glTextureParametervFunc)(name, pname, glm::value_ptr(param));
+ }
};
}
diff --git a/gfx/gl/sceneRenderer.cpp b/gfx/gl/sceneRenderer.cpp
index e67711b..d4812df 100644
--- a/gfx/gl/sceneRenderer.cpp
+++ b/gfx/gl/sceneRenderer.cpp
@@ -23,11 +23,11 @@ SceneRenderer::SceneRenderer(ScreenAbsCoord s, GLuint o, glDebugScope) :
shader.setViewPort({0, 0, size.x, size.y});
displayVAO.configure().addAttribs<glm::i8vec4>(0, displayVBO, displayVAOdata);
- const auto configuregdata = [this](const auto & data, const std::initializer_list<GLint> iformats,
+ const auto configuregdata = [this](glTexture & data, const std::initializer_list<GLint> iformats,
const GLenum format, const GLenum attachment) {
data.bind();
- glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameter(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ data.parameter(GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ data.parameter(GL_TEXTURE_MAG_FILTER, GL_NEAREST);
for (const auto iformat : iformats) {
glTexImage2D(GL_TEXTURE_2D, 0, iformat, size.x, size.y, 0, format, GL_BYTE, nullptr);
diff --git a/gfx/gl/shadowMapper.cpp b/gfx/gl/shadowMapper.cpp
index 03851f5..fb57668 100644
--- a/gfx/gl/shadowMapper.cpp
+++ b/gfx/gl/shadowMapper.cpp
@@ -35,12 +35,12 @@ ShadowMapper::ShadowMapper(const TextureAbsCoord & s) :
depthMap.bind(GL_TEXTURE_2D_ARRAY);
glTexImage3D(
GL_TEXTURE_2D_ARRAY, 0, GL_DEPTH_COMPONENT, size.x, size.y, 4, 0, GL_DEPTH_COMPONENT, GL_FLOAT, nullptr);
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
+ depthMap.parameter(GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ depthMap.parameter(GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ depthMap.parameter(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER);
+ depthMap.parameter(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER);
static constexpr RGBA border {std::numeric_limits<RGBA::value_type>::infinity()};
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_BORDER_COLOR, border);
+ depthMap.parameter(GL_TEXTURE_BORDER_COLOR, border);
glBindFramebuffer(GL_FRAMEBUFFER, depthMapFBO);
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, depthMap, 0);
diff --git a/gfx/gl/shadowStenciller.cpp b/gfx/gl/shadowStenciller.cpp
index 3625524..a5f9d68 100644
--- a/gfx/gl/shadowStenciller.cpp
+++ b/gfx/gl/shadowStenciller.cpp
@@ -42,10 +42,10 @@ ShadowStenciller::configureStencilTexture(glTexture & stencil, GLsizei width, GL
stencil.bind(GL_TEXTURE_2D_ARRAY);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameter(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ stencil.parameter(GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+ stencil.parameter(GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+ stencil.parameter(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ stencil.parameter(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_DEPTH_COMPONENT, width, height, STENCIL_ANGLES<GLint>, 0,
GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, nullptr);
diff --git a/gfx/models/texture.cpp b/gfx/models/texture.cpp
index 46bdff8..d175b34 100644
--- a/gfx/models/texture.cpp
+++ b/gfx/models/texture.cpp
@@ -43,11 +43,10 @@ Texture::Texture(GLsizei width, GLsizei height, const void * data, TextureOption
m_texture.bind(type);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
- glTexParameter(type, GL_TEXTURE_WRAP_S, TextureOptions::glMapMode(to.wrapU));
- glTexParameter(type, GL_TEXTURE_WRAP_T, TextureOptions::glMapMode(to.wrapV));
-
- glTexParameter(type, GL_TEXTURE_MIN_FILTER, to.minFilter);
- glTexParameter(type, GL_TEXTURE_MAG_FILTER, to.magFilter);
+ m_texture.parameter(GL_TEXTURE_WRAP_S, TextureOptions::glMapMode(to.wrapU));
+ m_texture.parameter(GL_TEXTURE_WRAP_T, TextureOptions::glMapMode(to.wrapV));
+ m_texture.parameter(GL_TEXTURE_MIN_FILTER, to.minFilter);
+ m_texture.parameter(GL_TEXTURE_MAG_FILTER, to.magFilter);
glTexImage2D(type, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
auto isMimmap = [](auto value) {
auto eqAnyOf = [value](auto... test) {
@@ -122,11 +121,10 @@ TextureAtlas::TextureAtlas(GLsizei width, GLsizei height, GLuint count) : Textur
{
m_atlas.bind(GL_TEXTURE_RECTANGLE);
- glTexParameter(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
- glTexParameter(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-
- glTexParameter(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
- glTexParameter(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ m_atlas.parameter(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ m_atlas.parameter(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+ m_atlas.parameter(GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ m_atlas.parameter(GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RGBA16UI, 2, static_cast<GLsizei>(count), 0, GL_RGBA_INTEGER,
GL_UNSIGNED_BYTE, nullptr);
}