support for floating point images => needed for skybox
[demo] / src / opengl / texture-gl.cc
index 607d014..2fbd05e 100644 (file)
@@ -1,4 +1,5 @@
 #include <GL/glew.h>
+#include <stdlib.h>
 
 #include "texture.h"
 #include "opengl/texture-gl.h"
@@ -40,9 +41,16 @@ void TextureGL::update()
                int w = images[i].w;
                int h = images[i].h;
 
-               unsigned char *pixels = images[i].pixels;
+               /* target */
                unsigned int t = is_cubemap() ? faces[i] : GL_TEXTURE_2D;
-               glTexImage2D(t, 0, GL_SRGB_ALPHA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
+
+               /* internal format */
+               unsigned int ifmt = images[i].is_float ? GL_RGBA16F : GL_SRGB_ALPHA;
+
+               /* data type of pixel data */
+               unsigned int type = images[i].is_float ? GL_FLOAT : GL_UNSIGNED_BYTE;
+
+               glTexImage2D(t, 0, ifmt, w, h, 0, GL_RGBA, type, images[i].pixels);
        }
 
        glGenerateMipmap(target);
@@ -50,5 +58,6 @@ void TextureGL::update()
 
 void TextureGL::bind()
 {
-       glBindTexture(GL_TEXTURE_2D, tex);
+       unsigned int target = is_cubemap() ? GL_TEXTURE_CUBE_MAP : GL_TEXTURE_2D;
+       glBindTexture(target, tex);
 }
\ No newline at end of file