]> git.tdb.fi Git - libs/gl.git/commitdiff
Make the TextureCubeFace enum independent of OpenGL constants
authorMikko Rasa <tdb@tdb.fi>
Sat, 18 Sep 2021 12:21:09 +0000 (15:21 +0300)
committerMikko Rasa <tdb@tdb.fi>
Sat, 18 Sep 2021 13:20:18 +0000 (16:20 +0300)
source/core/framebuffer.cpp
source/core/texturecube.cpp
source/core/texturecube.h
source/effects/environmentmap.cpp

index d6fa973960fbe169f0aa31e482fbb2029b084166..a60b437eff6fbe9e4c9a1eec8e2b6012b35395af 100644 (file)
@@ -156,7 +156,7 @@ void Framebuffer::update() const
                                else if(type==GL_TEXTURE_3D)
                                        glFramebufferTexture3D(GL_FRAMEBUFFER, gl_attach_point, type, attch.tex->get_id(), attch.level, attch.layer);
                                else if(type==GL_TEXTURE_CUBE_MAP)
-                                       glFramebufferTexture2D(GL_FRAMEBUFFER, gl_attach_point, TextureCube::enumerate_faces(attch.layer), attch.tex->get_id(), attch.level);
+                                       glFramebufferTexture2D(GL_FRAMEBUFFER, gl_attach_point, get_gl_cube_face(static_cast<TextureCubeFace>(attch.layer)), attch.tex->get_id(), attch.level);
                        }
                        else if(ARB_direct_state_access)
                                glNamedFramebufferTexture(id, gl_attach_point, 0, 0);
@@ -288,7 +288,7 @@ void Framebuffer::attach(FrameAttachment attch, Texture3D &tex, unsigned layer,
 
 void Framebuffer::attach(FrameAttachment attch, TextureCube &tex, TextureCubeFace face, unsigned level)
 {
-       set_attachment(make_typed_attachment(attch, tex.get_format()), tex, level, TextureCube::get_face_index(face), 0);
+       set_attachment(make_typed_attachment(attch, tex.get_format()), tex, level, face, 0);
 }
 
 void Framebuffer::attach_layered(FrameAttachment attch, Texture3D &tex, unsigned level)
index 516dca5209c9e571c7dc1a19093712fdfda201e1..2a15eb1bec3359a3f665e4d48c4f62392644b41f 100644 (file)
@@ -13,16 +13,6 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
-const TextureCubeFace TextureCube::face_order[6] =
-{
-       POSITIVE_X,
-       NEGATIVE_X,
-       POSITIVE_Y,
-       NEGATIVE_Y,
-       POSITIVE_Z,
-       NEGATIVE_Z
-};
-
 const Vector3 TextureCube::directions[6] =
 {
        Vector3(1, 0, 0),
@@ -96,7 +86,7 @@ void TextureCube::storage(PixelFormat fmt, unsigned sz, unsigned lv)
                {
                        unsigned lv_size = get_level_size(i);
                        for(unsigned j=0; j<6; ++j)
-                               glTexImage2D(enumerate_faces(j), i, gl_fmt, lv_size, lv_size, 0, comp, type, 0);
+                               glTexImage2D(get_gl_cube_face(static_cast<TextureCubeFace>(j)), i, gl_fmt, lv_size, lv_size, 0, comp, type, 0);
                }
                glTexParameteri(target, GL_TEXTURE_MAX_LEVEL, levels-1);
        }
@@ -117,14 +107,15 @@ void TextureCube::sub_image(TextureCubeFace face, unsigned level, int x, int y,
        if(level>=levels)
                throw out_of_range("TextureCube::sub_image");
 
+       GLenum gl_face = get_gl_cube_face(face);
        GLenum comp = get_gl_components(get_components(storage_fmt));
        GLenum type = get_gl_type(get_component_type(storage_fmt));
        if(ARB_direct_state_access)
-               glTextureSubImage3D(id, level, x, y, get_face_index(face), wd, ht, 1, comp, type, data);
+               glTextureSubImage3D(id, level, x, y, face, wd, ht, 1, comp, type, data);
        else
        {
                bind_scratch();
-               glTexSubImage2D(face, level, x, y, wd, ht, comp, type, data);
+               glTexSubImage2D(gl_face, level, x, y, wd, ht, comp, type, data);
        }
 }
 
@@ -159,7 +150,7 @@ void TextureCube::image(const Graphics::Image &img, unsigned lv)
        const char *pixels = reinterpret_cast<const char *>(img.get_pixels());
        unsigned face_size = img.get_stride()*size;
        for(unsigned i=0; i<6; ++i)
-               image(enumerate_faces(i), 0, pixels+i*face_size);
+               image(static_cast<TextureCubeFace>(i), 0, pixels+i*face_size);
 }
 
 unsigned TextureCube::get_n_levels() const
@@ -174,40 +165,19 @@ unsigned TextureCube::get_level_size(unsigned level) const
        return size>>level;
 }
 
-TextureCubeFace TextureCube::enumerate_faces(unsigned i)
-{
-       if(i>=6)
-               throw out_of_range("TextureCube::enumerate_faces");
-       return face_order[i];
-}
-
-unsigned TextureCube::get_face_index(TextureCubeFace face)
-{
-       switch(face)
-       {
-       case POSITIVE_X: return 0;
-       case NEGATIVE_X: return 1;
-       case POSITIVE_Y: return 2;
-       case NEGATIVE_Y: return 3;
-       case POSITIVE_Z: return 4;
-       case NEGATIVE_Z: return 5;
-       default: throw invalid_argument("TextureCube::get_face_index");
-       }
-}
-
 const Vector3 &TextureCube::get_face_direction(TextureCubeFace face)
 {
-       return directions[get_face_index(face)];
+       return directions[face];
 }
 
 const Vector3 &TextureCube::get_s_direction(TextureCubeFace face)
 {
-       return directions[orientations[get_face_index(face)*2]];
+       return directions[orientations[face*2]];
 }
 
 const Vector3 &TextureCube::get_t_direction(TextureCubeFace face)
 {
-       return directions[orientations[get_face_index(face)*2+1]];
+       return directions[orientations[face*2+1]];
 }
 
 Vector3 TextureCube::get_texel_direction(TextureCubeFace face, unsigned u, unsigned v)
@@ -281,6 +251,20 @@ void TextureCube::Loader::storage_levels(PixelFormat fmt, unsigned s, unsigned l
 }
 
 
+GLenum get_gl_cube_face(TextureCubeFace face)
+{
+       switch(face)
+       {
+       case POSITIVE_X: return GL_TEXTURE_CUBE_MAP_POSITIVE_X;
+       case NEGATIVE_X: return GL_TEXTURE_CUBE_MAP_NEGATIVE_X;
+       case POSITIVE_Y: return GL_TEXTURE_CUBE_MAP_POSITIVE_Y;
+       case NEGATIVE_Y: return GL_TEXTURE_CUBE_MAP_NEGATIVE_Y;
+       case POSITIVE_Z: return GL_TEXTURE_CUBE_MAP_POSITIVE_Z;
+       case NEGATIVE_Z: return GL_TEXTURE_CUBE_MAP_NEGATIVE_Z;
+       default: throw invalid_argument("get_gl_cube_face");
+       }
+}
+
 void operator>>(const LexicalConverter &conv, TextureCubeFace &face)
 {
        const string &str = conv.get();
index 0f83e29e138953e8d2e5c6c7595adb8323ea3a33..5818458618de4e32df8c4d846fdf978e49bc1737 100644 (file)
@@ -11,12 +11,12 @@ namespace GL {
 
 enum TextureCubeFace
 {
-       POSITIVE_X = GL_TEXTURE_CUBE_MAP_POSITIVE_X,
-       NEGATIVE_X = GL_TEXTURE_CUBE_MAP_NEGATIVE_X,
-       POSITIVE_Y = GL_TEXTURE_CUBE_MAP_POSITIVE_Y,
-       NEGATIVE_Y = GL_TEXTURE_CUBE_MAP_NEGATIVE_Y,
-       POSITIVE_Z = GL_TEXTURE_CUBE_MAP_POSITIVE_Z,
-       NEGATIVE_Z = GL_TEXTURE_CUBE_MAP_NEGATIVE_Z
+       POSITIVE_X = 0,
+       NEGATIVE_X = 1,
+       POSITIVE_Y = 2,
+       NEGATIVE_Y = 3,
+       POSITIVE_Z = 4,
+       NEGATIVE_Z = 5
 };
 
 /**
@@ -53,7 +53,6 @@ private:
        unsigned size;
        unsigned levels;
 
-       static const TextureCubeFace face_order[6];
        static const Vector3 directions[6];
        static const unsigned orientations[12];
 
@@ -88,12 +87,6 @@ private:
        unsigned get_level_size(unsigned) const;
 
 public:
-       /** Translates indices into face constants.  Valid indices are between 0
-       and 5, inclusive. */
-       static TextureCubeFace enumerate_faces(unsigned);
-
-       static unsigned get_face_index(TextureCubeFace);
-
        /** Returns a vector pointing out of the face. */
        static const Vector3 &get_face_direction(TextureCubeFace);
 
@@ -111,6 +104,8 @@ public:
        virtual void unload() { }
 };
 
+GLenum get_gl_cube_face(TextureCubeFace);
+
 void operator>>(const LexicalConverter &, TextureCubeFace &);
 
 } // namespace GL
index 87e4898df21a48d07f9cf7346f3926d9b5523d87..a675f7e249291d759bda1de98417a463874cca91 100644 (file)
@@ -48,7 +48,7 @@ void EnvironmentMap::init(unsigned s, PixelFormat f, unsigned l)
        depth_buf.storage(DEPTH_COMPONENT32F, size, size, 1);
        for(unsigned i=0; i<6; ++i)
        {
-               TextureCubeFace face = TextureCube::enumerate_faces(i);
+               TextureCubeFace face = static_cast<TextureCubeFace>(i);
                faces[i].fbo.set_format((COLOR_ATTACHMENT,f, DEPTH_ATTACHMENT,DEPTH_COMPONENT32F));
                faces[i].fbo.attach(COLOR_ATTACHMENT, env_tex, face, 0);
                faces[i].fbo.attach(DEPTH_ATTACHMENT, depth_buf);
@@ -75,7 +75,7 @@ void EnvironmentMap::init(unsigned s, PixelFormat f, unsigned l)
                LinAl::Matrix<float, 3, 3> face_matrices[6];
                for(unsigned i=0; i<6; ++i)
                {
-                       GL::TextureCubeFace face = GL::TextureCube::enumerate_faces(i);
+                       GL::TextureCubeFace face = static_cast<TextureCubeFace>(i);
                        GL::Vector3 columns[3];
                        columns[0] = GL::TextureCube::get_s_direction(face);
                        columns[1] = GL::TextureCube::get_t_direction(face);