datadir = @datadir@
top_builddir = @top_builddir@
with_demo_app = @with_demo_app@
+with_SDL2 = @with_SDL2@
CC=@CC@
CXX=@CXX@
-CXXFLAGS=-Wall @CXXFLAGS@ -I$(GTEST_DIR)/include @Eigen3_CFLAGS@ @epoxy_CFLAGS@
-LDFLAGS=@epoxy_LIBS@ @SDL_LIBS@ -lpthread
-DEMO_LDLIBS=@SDL_image_LIBS@ -lrt -lpthread @libpng_LIBS@
+CXXFLAGS=-Wall @CXXFLAGS@ -I$(GTEST_DIR)/include @SDL2_CFLAGS@ @SDL_CFLAGS@ @Eigen3_CFLAGS@ @epoxy_CFLAGS@
+ifeq ($(with_SDL2),yes)
+CXXFLAGS += -DHAVE_SDL2
+endif
+LDFLAGS=@epoxy_LIBS@ @SDL2_LIBS@ @SDL_LIBS@ -lpthread
+DEMO_LDLIBS=@SDL2_image_LIBS@ @SDL_image_LIBS@ -lrt -lpthread @libpng_LIBS@
SHELL=@SHELL@
LIBTOOL=@LIBTOOL@ --tag=CXX
RANLIB=ranlib
PKG_CHECK_MODULES([Eigen3], [eigen3])
PKG_CHECK_MODULES([epoxy], [epoxy])
-# Needed for unit tests and the demo app.
-PKG_CHECK_MODULES([SDL], [sdl])
+# Needed for unit tests and the demo app. We prefer SDL2 if possible,
+# but can also use classic SDL.
+with_SDL2=no
+with_demo_app=yes
+PKG_CHECK_MODULES([SDL2], [sdl2], [with_SDL2=yes], [
+ PKG_CHECK_MODULES([SDL], [sdl])
+])
# These are only needed for the demo app.
-with_demo_app=yes
-PKG_CHECK_MODULES([SDL_image], [SDL_image], [], [with_demo_app=no; AC_MSG_WARN([SDL_image not found, demo program will not be built])])
+if test $with_SDL2 = "yes"; then
+ PKG_CHECK_MODULES([SDL2_image], [SDL2_image], [], [with_demo_app=no; AC_MSG_WARN([SDL2_image not found, demo program will not be built])])
+else
+ PKG_CHECK_MODULES([SDL_image], [SDL_image], [], [with_demo_app=no; AC_MSG_WARN([SDL_image not found, demo program will not be built])])
+fi
PKG_CHECK_MODULES([libpng], [libpng12], [], [with_demo_app=no; AC_MSG_WARN([libpng12 not found, demo program will not be built])])
AC_SUBST([with_demo_app])
+AC_SUBST([with_SDL2])
AC_CONFIG_FILES([Makefile movit.pc])
AC_OUTPUT
#define HEIGHT 720
#include <epoxy/gl.h>
+
+#ifdef HAVE_SDL2
+#include <SDL2/SDL.h>
+#include <SDL2/SDL_error.h>
+#include <SDL2/SDL_events.h>
+#include <SDL2/SDL_image.h>
+#include <SDL2/SDL_keyboard.h>
+#include <SDL2/SDL_mouse.h>
+#include <SDL2/SDL_video.h>
+#else
#include <SDL/SDL.h>
#include <SDL/SDL_error.h>
#include <SDL/SDL_events.h>
#include <SDL/SDL_keysym.h>
#include <SDL/SDL_mouse.h>
#include <SDL/SDL_video.h>
+#endif
+
#include <assert.h>
#include <features.h>
#include <math.h>
rgba_fmt.Gshift = 8;
rgba_fmt.Bshift = 0;
rgba_fmt.Ashift = 24;
-
+
+#ifndef HAVE_SDL2
rgba_fmt.colorkey = 0;
rgba_fmt.alpha = 255;
+#endif
SDL_Surface *converted = SDL_ConvertSurface(img, &rgba_fmt, SDL_SWSURFACE);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 0);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
+
+#ifdef HAVE_SDL2
+ SDL_Window *window = SDL_CreateWindow("OpenGL window",
+ SDL_WINDOWPOS_UNDEFINED,
+ SDL_WINDOWPOS_UNDEFINED,
+ WIDTH, HEIGHT,
+ SDL_WINDOW_OPENGL);
+ SDL_GLContext context = SDL_GL_CreateContext(window);
+ assert(context != NULL);
+#else
SDL_SetVideoMode(WIDTH, HEIGHT, 0, SDL_OPENGL);
SDL_WM_SetCaption("OpenGL window", NULL);
+#endif
CHECK(init_movit(".", MOVIT_DEBUG_ON));
printf("GPU texture subpixel precision: about %.1f bits\n",
draw_saturation_bar(0.75f, blur_radius / 100.0f);
draw_saturation_bar(0.80f, blurred_mix_amount);
+#ifdef HAVE_SDL2
+ SDL_GL_SwapWindow(window);
+#else
SDL_GL_SwapBuffers();
+#endif
check_error();
glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, pbo);
#define GTEST_HAS_EXCEPTIONS 0
+#ifdef HAVE_SDL2
+#include <SDL2/SDL.h>
+#include <SDL2/SDL_error.h>
+#include <SDL2/SDL_video.h>
+#else
#include <SDL/SDL.h>
#include <SDL/SDL_error.h>
#include <SDL/SDL_video.h>
+#endif
#include <stdio.h>
#include <stdlib.h>
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 0);
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 0);
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
+
+#ifdef HAVE_SDL2
+ // You can uncomment this if you want to try a core context.
+ // For Mesa, you can get the same effect by doing
+ //
+ // export MESA_GL_VERSION_OVERRIDE=3.1FC
+ //
+ // before running tests.
+// SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
+// SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
+// SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
+ SDL_Window *window = SDL_CreateWindow("OpenGL window for unit test",
+ SDL_WINDOWPOS_UNDEFINED,
+ SDL_WINDOWPOS_UNDEFINED,
+ 32, 32,
+ SDL_WINDOW_OPENGL);
+ SDL_GLContext context = SDL_GL_CreateContext(window);
+ assert(context != NULL);
+#else
SDL_SetVideoMode(32, 32, 0, SDL_OPENGL);
SDL_WM_SetCaption("OpenGL window for unit test", NULL);
+#endif
testing::InitGoogleTest(&argc, argv);
int err = RUN_ALL_TESTS();