X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=init.cpp;h=ce2ce5009c3b7412ea1d181c09c64260653bac8d;hp=d312cd8bd7e58eae1abdc7231a68b3532c8c138f;hb=f909bfe0621e8c844695ef327b71457893633cae;hpb=9c6b86affb570a2e2d18c6da795c359da393f9a3 diff --git a/init.cpp b/init.cpp index d312cd8..ce2ce50 100644 --- a/init.cpp +++ b/init.cpp @@ -15,14 +15,14 @@ namespace movit { bool movit_initialized = false; MovitDebugLevel movit_debug_level = MOVIT_DEBUG_ON; float movit_texel_subpixel_precision; -bool movit_timer_queries_supported; +bool movit_timer_queries_supported, movit_compute_shaders_supported; int movit_num_wrongly_rounded; MovitShaderModel movit_shader_model; // The rules for objects with nontrivial constructors in static scope // are somewhat convoluted, and easy to mess up. We simply have a // pointer instead (and never care to clean it up). -string *movit_data_directory = NULL; +string *movit_data_directory = nullptr; namespace { @@ -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, width, 1, 0, GL_RGBA, GL_FLOAT, NULL); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, width, 1, 0, GL_RGBA, GL_FLOAT, nullptr); check_error(); glGenFramebuffers(1, &fbo); @@ -166,7 +166,7 @@ void measure_roundoff_problems() check_error(); glBindTexture(GL_TEXTURE_2D, dst_texnum); check_error(); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 512, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, 512, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr); check_error(); glGenFramebuffers(1, &fbo); @@ -310,6 +310,16 @@ bool check_extensions() movit_timer_queries_supported = (epoxy_gl_version() >= 33 || epoxy_has_gl_extension("GL_ARB_timer_query")); + // Certain effects have compute shader implementations, which may be + // more efficient than the normal fragment shader versions. + // GLSL 3.10 supposedly also has compute shaders, but I haven't tested them, + // so we require desktop OpenGL. + movit_compute_shaders_supported = + (epoxy_is_desktop_gl() && + (epoxy_gl_version() >= 43 || + (epoxy_has_gl_extension("GL_ARB_compute_shader") && + epoxy_has_gl_extension("GL_ARB_shader_image_load_store")))); + return true; } @@ -319,7 +329,7 @@ double get_glsl_version() // Skip past the first period. char *ptr = strchr(glsl_version_str, '.'); - assert(ptr != NULL); + assert(ptr != nullptr); ++ptr; // Now cut the string off at the next period or space, whatever comes first @@ -341,6 +351,18 @@ double get_glsl_version() return glsl_version; } +void APIENTRY debug_callback(GLenum source, + GLenum type, + GLuint id, + GLenum severity, + GLsizei length, + const char *message, + const void *userParam) +#ifdef __GNUC__ + __attribute__((unused)) +#endif +; + void APIENTRY debug_callback(GLenum source, GLenum type, GLuint id, @@ -371,7 +393,7 @@ bool init_movit(const string& data_directory, MovitDebugLevel debug_level) // You can turn this on if you want detailed debug messages from the driver. // You should probably also ask for a debug context (see gtest_sdl_main.cpp), // or you might not get much data back. - // glDebugMessageCallbackARB(callback, NULL); + // glDebugMessageCallbackARB(callback, nullptr); // glDebugMessageControlARB(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, 0, GL_TRUE); if (!check_extensions()) {