]> git.sesse.net Git - movit/blobdiff - init.cpp
Don't use GL_RGBA32F/GL_RGBA16F with GL_UNSIGNED_BYTE.
[movit] / init.cpp
index 13a86df236d5ea909dc269c8f8af827e1b7b5a35..89998f40d64d81c957dfabc897ba61b6b63a7552 100644 (file)
--- a/init.cpp
+++ b/init.cpp
@@ -1,4 +1,4 @@
-#include <GL/glew.h>
+#include <epoxy/gl.h>
 #include <assert.h>
 #include <stddef.h>
 #include <algorithm>
@@ -38,7 +38,7 @@ void measure_texel_subpixel_precision()
        check_error();
        glBindTexture(GL_TEXTURE_2D, dst_texnum);
        check_error();
-       glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F_ARB, width, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
+       glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, width, 1, 0, GL_RGBA, GL_FLOAT, NULL);
        check_error();
 
        glGenFramebuffers(1, &fbo);
@@ -278,32 +278,43 @@ void measure_roundoff_problems()
 bool check_extensions()
 {
        // We fundamentally need FBOs and floating-point textures.
-       if (!glewIsSupported("GL_ARB_framebuffer_object")) return false;
-       if (!glewIsSupported("GL_ARB_texture_float")) return false;
+       // FBOs are covered by OpenGL 1.5, and are not an extension there.
+       // Floating-point textures are part of OpenGL 3.0 and newer.
+       if (epoxy_gl_version() < 15 &&
+           !epoxy_has_gl_extension("GL_ARB_framebuffer_object")) return false;
+       if (epoxy_gl_version() < 30 &&
+           !epoxy_has_gl_extension("GL_ARB_texture_float")) return false;
 
        // We assume that we can use non-power-of-two textures without restrictions.
-       if (!glewIsSupported("GL_ARB_texture_non_power_of_two")) return false;
+       if (epoxy_gl_version() < 20 &&
+           !epoxy_has_gl_extension("GL_ARB_texture_non_power_of_two")) return false;
 
        // We also need GLSL fragment shaders.
-       if (!glewIsSupported("GL_ARB_fragment_shader")) return false;
-       if (!glewIsSupported("GL_ARB_shading_language_100")) return false;
+       if (epoxy_gl_version() < 20) {
+               if (!epoxy_has_gl_extension("GL_ARB_fragment_shader")) return false;
+               if (!epoxy_has_gl_extension("GL_ARB_shading_language_100")) return false;
+       }
 
        // FlatInput and YCbCrInput uses PBOs. (They could in theory do without,
        // but no modern card would really not provide it.)
-       if (!glewIsSupported("GL_ARB_pixel_buffer_object")) return false;
+       if (epoxy_gl_version() < 21 &&
+           !epoxy_has_gl_extension("GL_ARB_pixel_buffer_object")) return false;
 
        // ResampleEffect uses RG textures to encode a two-component LUT.
-       if (!glewIsSupported("GL_ARB_texture_rg")) return false;
+       if (epoxy_gl_version() < 30 &&
+           !epoxy_has_gl_extension("GL_ARB_texture_rg")) return false;
 
        // sRGB texture decode would be nice, but are not mandatory
        // (GammaExpansionEffect can do the same thing if needed).
-       movit_srgb_textures_supported = glewIsSupported("GL_EXT_texture_sRGB");
+       movit_srgb_textures_supported =
+               (epoxy_gl_version() >= 21 || epoxy_has_gl_extension("GL_EXT_texture_sRGB"));
 
        // We may want to use round() at the end of the final shader,
        // if supported. We need either GLSL 1.30 or this extension to do that,
        // and 1.30 brings with it other things that we don't want to demand
        // for now.
-       movit_shader_rounding_supported = glewIsSupported("GL_EXT_gpu_shader4");
+       movit_shader_rounding_supported =
+               (epoxy_gl_version() >= 30 || epoxy_has_gl_extension("GL_EXT_gpu_shader4"));
 
        return true;
 }
@@ -319,11 +330,6 @@ bool init_movit(const string& data_directory, MovitDebugLevel debug_level)
        movit_data_directory = new string(data_directory);
        movit_debug_level = debug_level;
 
-       GLenum err = glewInit();
-       if (err != GLEW_OK) {
-               return false;
-       }
-
        // geez 
        glPixelStorei(GL_PACK_ALIGNMENT, 1);
        glPixelStorei(GL_UNPACK_ALIGNMENT, 1);