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 {
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);
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);
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") &&
+ epoxy_has_gl_extension("GL_ARB_shader_image_size"))));
+
return true;
}
// 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
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,
// 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()) {