Permalink
Browse files

Merge from master

  • Loading branch information...
2 parents b0a35d7 + 1f41de8 commit 22fabedbb9d61975a6fd23df748d5805fe2c8208 @standards-example standards-example committed Jul 28, 2010
Showing with 6,774 additions and 3,246 deletions.
  1. +12 −0 .gitignore
  2. +157 −39 CMakeLists.txt
  3. +31 −28 ChangeLog
  4. +1,653 −0 Doxyfile
  5. +34 −41 README
  6. +5 −0 README.tests
  7. +1 −3 TODO
  8. +498 −498 Win32/lightspark/lightspark.vcproj
  9. +10 −11 abc.cpp
  10. +14 −13 abc.h
  11. +2 −2 abc_codesynt.cpp
  12. +73 −31 abc_opcodes.cpp
  13. +2 −2 actions.h
  14. +140 −39 asobjects.cpp
  15. +30 −10 asobjects.h
  16. +8 −2 class.h
  17. +16 −0 compat.h
  18. +1 −0 debian/browser-plugin-lightspark.install
  19. +36 −0 debian/changelog
  20. +1 −0 debian/common.shlibs
  21. +56 −8 debian/control
  22. +2 −0 debian/lightspark-common.install
  23. +2 −3 debian/lightspark.install
  24. +1 −1 debian/lightspark.manpages
  25. +0 −1 debian/mozilla-plugin-lightspark.install
  26. +25 −4 debian/rules
  27. +272 −86 decoder.cpp
  28. +121 −17 decoder.h
  29. +1 −1 {debian → docs/man}/lightspark.1
  30. +23 −2 fastpaths.h
  31. +165 −8 fastpaths_32.asm
  32. +270 −112 fastpaths_32.masm
  33. +153 −8 fastpaths_64.asm
  34. +131 −98 flashdisplay.cpp
  35. +2 −1 flashdisplay.h
  36. +24 −0 flashevents.cpp
  37. +4 −6 flashevents.h
  38. +56 −14 flashgeom.cpp
  39. +4 −0 flashgeom.h
  40. +31 −3 flashmedia.cpp
  41. +1 −4 flashmedia.h
  42. +119 −48 flashnet.cpp
  43. +46 −3 flashnet.h
  44. +2 −2 flashutils.cpp
  45. +1 −1 flashxml.cpp
  46. +53 −11 flv.cpp
  47. +12 −0 flv.h
  48. +1 −2 geometry.cpp
  49. +63 −36 graphics.cpp
  50. +75 −1 graphics.h
  51. +24 −0 lightspark.expmap
  52. +7 −7 logger.h
  53. +17 −22 main.cpp
  54. +186 −186 media/lightspark-ico.svg
  55. +306 −306 media/lightspark-logo.svg
  56. +6 −2 netutils.cpp
  57. +2 −2 netutils.h
  58. +25 −25 packed_begin.h
  59. +24 −24 packed_end.h
  60. +7 −22 plugin-dir/CMakeLists.txt
  61. +0 −46 plugin-dir/include/nsDefaultPlugin.h
  62. +0 −47 plugin-dir/include/nsPluginError.h
  63. +0 −129 plugin-dir/include/nsPluginLogging.h
  64. +0 −109 plugin-dir/include/nsPluginNativeWindow.h
  65. +0 −49 plugin-dir/include/nsPluginsCID.h
  66. +0 −394 plugin-dir/include/nsplugindefs.h
  67. +5 −0 plugin-dir/np_entry.cpp
  68. +26 −1 plugin-dir/npn_gate.cpp
  69. +0 −19 plugin-dir/objs/Makefile
  70. +135 −167 plugin-dir/plugin.cpp
  71. +6 −11 plugin-dir/plugin.h
  72. +1 −3 scripts/youtube-args-dumper.sh
  73. +270 −0 sound.cpp
  74. +66 −0 sound.h
  75. +5 −4 streams.h
  76. +560 −304 swf.cpp
  77. +122 −45 swf.h
  78. +69 −18 swftypes.cpp
  79. +93 −49 swftypes.h
  80. +113 −9 tags.cpp
  81. +49 −4 tags.h
  82. +0 −18 tags_stub.cpp
  83. +24 −0 tests/error.mxml
  84. +37 −0 tests/isTypelateOnClass.mxml
  85. +25 −0 tests/template.mxml
  86. +27 −9 textfile.cpp
  87. +11 −4 thread_pool.cpp
  88. +2 −1 thread_pool.h
  89. +1 −1 threading.cpp
  90. +77 −4 threading.h
  91. +4 −4 tightspark.cpp
  92. +1 −0 timer.cpp
  93. +1 −1 timer.h
View
@@ -0,0 +1,12 @@
+#
+# Linux make
+#
+i686/*
+
+#
+# CMAKE
+#
+CMakeFiles/*
+Makefile
+cmake_install.cmake
+CMakeCache.txt
View
@@ -21,85 +21,203 @@
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+# Name & Version
PROJECT(LIGHTSPARK)
+SET(MAJOR_VERSION "0")
+SET(MINOR_VERSION "4")
+SET(PATCH_VERSION "3")
+
+# GCC 4.4+ is required, GCC_VERSION macro taken from GCC manual
+INCLUDE(CheckCSourceCompiles)
+CHECK_C_SOURCE_COMPILES("
+#define GCC_VERSION (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__)
+#if GCC_VERSION < 40400
+#error
+#endif
+int main() { return 0; }" GCC_IS_4_4)
+IF(NOT GCC_IS_4_4)
+ MESSAGE(FATAL_ERROR "GCC 4.4+ is required.")
+ENDIF(NOT GCC_IS_4_4)
+
+# Find put the path of the gnash executable, if available
+FIND_PROGRAM(GNASH_EXE_PATH NAMES gnash)
+
+IF(GNASH_EXE_PATH)
+ MESSAGE(STATUS "Found gnash path: ${GNASH_EXE_PATH}")
+ELSE()
+# Set a default path
+ MESSAGE(STATUS "Gnash not found")
+ SET(GNASH_EXE_PATH "/usr/bin/gnash")
+ENDIF()
-SET(CMAKE_INSTALL_PREFIX "/usr" CACHE PATH "Install prefix")
-SET(COMPILE_LIGHTSPARK TRUE CACHE BOOL "Compile Lightspark?")
-SET(COMPILE_TIGHTSPARK TRUE CACHE BOOL "Compile Tightspark?")
-SET(COMPILE_PLUGIN FALSE CACHE BOOL "Compile the Firefox Plugin?")
-SET(PLUGIN_DIRECTORY "/usr/lib/mozilla/plugins" CACHE STRING "Directory to install Firefox plugin to")
+# Find out CPU architecture ...
+# we could also use IF(CMAKE_SIZEOF_VOID_P EQUAL 4) to determine if it's a 32 or a 64bit arch
+#
+# Setting the value of LIB_SUFFIX if not specified (We could build 32bit version on 64bit)
+# However, some distro don't implement FHS the same way
+# Suse, Redhat put 64bit libs in /lib64; Debian use /lib for 64bit, but specifies /lib32 for 32bit libs
+# See FHS 2.3 for Lib directories under each architecture
+# Some directory shortcuts
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/conf)
-
INCLUDE(CMakeASM-NASMCompiler)
-#LIBRARIES
+IF(${CMAKE_SYSTEM_PROCESSOR} MATCHES "i[3-6]86")
+ SET(i386 1)
+ SET(LIB_SUFFIX "" CACHE STRING "Choose the suffix of the lib folder (if any) : None 32")
+ # nasm for assembly optimizations
+ ENABLE_LANGUAGE(ASM-NASM)
+ELSEIF(${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64|amd64")
+ SET(x86_64 1)
+ SET(LIB_SUFFIX "" CACHE STRING "Choose the suffix of the lib folder (if any) : None 64")
+ # nasm for assembly optimizations
+ ENABLE_LANGUAGE(ASM-NASM)
+ELSEIF(${CMAKE_SYSTEM_PROCESSOR} MATCHES "ppc")
+ SET(ppc 1)
+ SET(LIB_SUFFIX "" CACHE STRING "Choose the suffix of the lib folder (if any) : None ppc")
+ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec")
+ELSE()
+ MESSAGE(SEND_ERROR "Platform ${CMAKE_SYSTEM_PROCESSOR} not supported")
+ENDIF(${CMAKE_SYSTEM_PROCESSOR} MATCHES "i[3-6]86")
+
+# Using relative folders, cmake happens by itself CMAKE_INSTALL_PREFIX
+SET(BINDIR "bin")
+SET(DATADIR "share")
+SET(LIBDIR "lib${LIB_SUFFIX}")
+SET(PRIVATELIBDIR "${LIBDIR}/lightspark")
+
+# Setting variables
+SET(CMAKE_INSTALL_PREFIX "/usr/local" CACHE PATH "Install prefix, default is /usr/local (UNIX) and C:\\Program Files (Windows)")
+SET(COMPILE_LIGHTSPARK TRUE CACHE BOOL "Compile Lightspark?")
+SET(COMPILE_TIGHTSPARK TRUE CACHE BOOL "Compile Tightspark?")
+SET(COMPILE_PLUGIN FALSE CACHE BOOL "Compile the Firefox Plugin?")
+SET(ENABLE_SOUND TRUE CACHE BOOL "Enable sound?")
+SET(PLUGIN_DIRECTORY "${LIBDIR}/mozilla/plugins" CACHE STRING "Directory to install Firefox plugin to")
+IF(NOT CMAKE_BUILD_TYPE)
+ SET(CMAKE_BUILD_TYPE RelWithDebInfo CACHE STRING
+ "Choose the type of build, options are: Debug Release RelWithDebInfo Profile Debian" FORCE)
+ENDIF(NOT CMAKE_BUILD_TYPE)
+
+# The library is searched in its private library directory
+SET(CMAKE_SKIP_BUILD_RPATH FALSE)
+SET(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${PRIVATELIBDIR}")
+
+# Libraries we need
INCLUDE(FindLLVM REQUIRED)
INCLUDE(FindSDL REQUIRED)
INCLUDE(FindCURL REQUIRED)
INCLUDE(FindPkgConfig REQUIRED)
INCLUDE(FindZLIB REQUIRED)
-
-pkg_check_modules(EXTRA_LIBS REQUIRED gl libpcrecpp libavcodec libavutil ftgl x11)
+INCLUDE(FindThreads REQUIRED)
+
+pkg_check_modules(EXTRA_LIBS REQUIRED gl libpcrecpp libavutil ftgl x11 glu fontconfig glew)
+IF(ENABLE_SOUND)
+ ADD_DEFINITIONS(-DENABLE_SOUND)
+ pkg_check_modules(SOUND_LIBS REQUIRED libpulse)
+ENDIF(ENABLE_SOUND)
+
+# Compatibility checks for ffmpeg deprecated functions
+pkg_check_modules(LIBAVCODEC REQUIRED libavcodec)
+INCLUDE(CheckFunctionExists REQUIRED)
+SET(CMAKE_REQUIRED_FLAGS ${LIBAVCODEC_CFLAGS})
+SET(CMAKE_REQUIRED_INCLUDES ${LIBAVCODEC_INCLUDE_DIRS})
+SET(CMAKE_REQUIRED_LIBRARIES ${LIBAVCODEC_LIBRARIES})
+CHECK_FUNCTION_EXISTS(avcodec_decode_video2 HAVE_AVCODEC_DECODE_VIDEO2)
+CHECK_FUNCTION_EXISTS(avcodec_decode_audio3 HAVE_AVCODEC_DECODE_AUDIO3)
+SET(CMAKE_REQUIRED_FLAGS)
+SET(CMAKE_REQUIRED_INCLUDES)
+SET(CMAKE_REQUIRED_LIBRARIES)
+IF(HAVE_AVCODEC_DECODE_VIDEO2)
+ ADD_DEFINITIONS(-DHAVE_AVCODEC_DECODE_VIDEO2)
+ENDIF(HAVE_AVCODEC_DECODE_VIDEO2)
+IF(HAVE_AVCODEC_DECODE_AUDIO3)
+ ADD_DEFINITIONS(-DHAVE_AVCODEC_DECODE_AUDIO3)
+ENDIF(HAVE_AVCODEC_DECODE_AUDIO3)
INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${LLVM_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${ZLIB_INCLUDE_DIR})
+INCLUDE_DIRECTORIES(${Threads_INCLUDE_DIR})
INCLUDE_DIRECTORIES(${EXTRA_LIBS_INCLUDE_DIRS})
+INCLUDE_DIRECTORIES(${LIBAVCODEC_INCLUDE_DIRS})
+INCLUDE_DIRECTORIES(${SOUND_LIBS_INCLUDE_DIRS})
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -Wl,--no-undefined")
+SET(CMAKE_SHARED_LINKER_FLAGS "-Wl,--as-needed")
-FIND_LIBRARY(lib_pthread pthread REQUIRED)
-FIND_LIBRARY(lib_glew GLEW REQUIRED)
+IF(COMPILE_PLUGIN)
+ pkg_check_modules(GTK REQUIRED gtk+-2.0)
+ INCLUDE_DIRECTORIES(${GTK_INCLUDE_DIRS})
+ ADD_DEFINITIONS(-DMOZ_X11 -DCOMPILE_PLUGIN)
+ENDIF(COMPILE_PLUGIN)
-ENABLE_LANGUAGE(ASM-NASM)
+# Compiler defaults flags for different profiles
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wnon-virtual-dtor -Woverloaded-virtual -pipe -fvisibility=hidden -fvisibility-inlines-hidden -std=c++0x")
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wnon-virtual-dtor -Woverloaded-virtual -pipe")
-SET(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -D_GLIBCXX_NO_DEBUG -DEXPENSIVE_DEBUG")
+SET(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -DEXPENSIVE_DEBUG")
SET(CMAKE_CXX_FLAGS_PROFILE "-g -pg -O2")
-SET(CMAKE_CXX_FLAGS_RELEASE "-O3")
-SET(CMAKE_CXX_FLAGS_DEBIAN "-O2")
+SET(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
+SET(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-g -O2 -DNDEBUG")
+SET(CMAKE_CXX_FLAGS_DEBIAN "-O2 -DNDEBUG")
-ADD_DEFINITIONS(-DDATADIR="${CMAKE_INSTALL_PREFIX}/share/lightspark")
+ADD_DEFINITIONS(-DDATADIR="${CMAKE_INSTALL_PREFIX}/share/lightspark" -DGNASH_PATH="${GNASH_EXE_PATH}")
-SET(LIBSPARK_SOURCES swf.cpp swftypes.cpp tags.cpp geometry.cpp actions.cpp frame.cpp input.cpp streams.cpp tags_stub.cpp logger.cpp vm.cpp asobjects.cpp abc.cpp abc_codesynt.cpp abc_opcodes.cpp flashdisplay.cpp flashevents.cpp textfile.cpp thread_pool.cpp flashgeom.cpp flashnet.cpp flashsystem.cpp flashutils.cpp compat.cpp abc_interpreter.cpp flashexternal.cpp flashtext.cpp flashmedia.cpp flv.cpp netutils.cpp timer.cpp decoder.cpp threading.cpp flashxml.cpp graphics.cpp)
-IF(${CMAKE_SYSTEM_PROCESSOR} MATCHES "i[3-6]86")
+# Setting the output directories, so we can build all profiles without mixmatching
+SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_SYSTEM_PROCESSOR}/${CMAKE_BUILD_TYPE}/bin")
+SET(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_SYSTEM_PROCESSOR}/${CMAKE_BUILD_TYPE}/lib${LIB_SUFFIX}")
+#SET(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/objs/${CMAKE_SYSTEM_PROCESSOR}/${CMAKE_BUILD_TYPE}/lib${LIB_SUFFIX}" CACHE PATH "Static libraries output directory")
+
+# liblightspark.so sources
+SET(LIBSPARK_SOURCES swf.cpp swftypes.cpp tags.cpp geometry.cpp actions.cpp frame.cpp input.cpp streams.cpp tags_stub.cpp logger.cpp vm.cpp asobjects.cpp abc.cpp abc_codesynt.cpp abc_opcodes.cpp flashdisplay.cpp flashevents.cpp textfile.cpp thread_pool.cpp flashgeom.cpp flashnet.cpp flashsystem.cpp flashutils.cpp compat.cpp abc_interpreter.cpp flashexternal.cpp flashtext.cpp flashmedia.cpp flv.cpp netutils.cpp timer.cpp decoder.cpp threading.cpp flashxml.cpp graphics.cpp sound.cpp)
+IF(${i386})
SET(LIBSPARK_SOURCES ${LIBSPARK_SOURCES} fastpaths_32.asm)
-ELSEIF(${CMAKE_SYSTEM_PROCESSOR} MATCHES "x86_64|amd64")
+ELSEIF(${x86_64})
SET(LIBSPARK_SOURCES ${LIBSPARK_SOURCES} fastpaths_64.asm)
-ELSE()
- MESSAGE(SEND_ERROR "Platform ${CMAKE_SYSTEM_PROCESSOR} not supported")
-ENDIF()
+ELSEIF(${ppc})
+ SET(LIBSPARK_SOURCES ${LIBSPARK_SOURCES} fastpaths_ppc.cpp)
+ENDIF(${i386})
+# liblightspark.so target
+ADD_LIBRARY(spark SHARED ${LIBSPARK_SOURCES})
+SET_TARGET_PROPERTIES(spark PROPERTIES OUTPUT_NAME lightspark)
+TARGET_LINK_LIBRARIES(spark ${SOUND_LIBS_LIBRARIES} ${EXTRA_LIBS_LIBRARIES} ${LIBAVCODEC_LIBRARIES} ${ZLIB_LIBRARIES} ${LLVM_LIBS_CORE} ${LLVM_LIBS_JIT} ${SDL_LIBRARY} ${CURL_LIBRARIES} ${GTK_LIBRARIES} ${lib_glew})
+SET_TARGET_PROPERTIES(spark PROPERTIES LINK_FLAGS "${LLVM_LDFLAGS} -Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/lightspark.expmap")
+SET_TARGET_PROPERTIES(spark PROPERTIES LINK_INTERFACE_LIBRARIES "")
-IF(COMPILE_PLUGIN)
- pkg_check_modules(GTK REQUIRED gtk+-2.0 gtkglext-1.0)
- INCLUDE_DIRECTORIES(${GTK_INCLUDE_DIRS})
- ADD_SUBDIRECTORY(plugin-dir)
-ENDIF(COMPILE_PLUGIN)
+SET_TARGET_PROPERTIES(spark PROPERTIES VERSION "${MAJOR_VERSION}.${MINOR_VERSION}.${PATCH_VERSION}")
+SET_TARGET_PROPERTIES(spark PROPERTIES SOVERSION "${MAJOR_VERSION}.${MINOR_VERSION}")
-IF(COMPILE_LIGHTSPARK OR COMPILE_TIGHTSPARK)
- ADD_LIBRARY(spark STATIC ${LIBSPARK_SOURCES})
- TARGET_LINK_LIBRARIES(spark ${lib_pthread} ${lib_glew} ${EXTRA_LIBS_LIBRARIES} ${ZLIB_LIBRARIES} ${LLVM_LIBS_CORE} ${LLVM_LIBS_JIT}
- ${SDL_LIBRARY} ${CURL_LIBRARIES})
-ENDIF(COMPILE_LIGHTSPARK OR COMPILE_TIGHTSPARK)
+IF(UNIX)
+ INSTALL(TARGETS spark LIBRARY DESTINATION ${PRIVATELIBDIR})
+ENDIF(UNIX)
+# lightspark executable target
IF(COMPILE_LIGHTSPARK)
ADD_EXECUTABLE(lightspark main.cpp)
TARGET_LINK_LIBRARIES(lightspark spark)
- SET_TARGET_PROPERTIES(lightspark PROPERTIES LINK_FLAGS "-Wl,--as-needed ${LLVM_LDFLAGS}")
-
- SET(BINDIR "${CMAKE_INSTALL_PREFIX}/bin")
- SET(DATADIR "${CMAKE_INSTALL_PREFIX}/share")
+ TARGET_LINK_LIBRARIES(lightspark ${SDL_LIBRARY})
IF(UNIX)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/lightspark.frag DESTINATION ${DATADIR}/lightspark)
INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/lightspark.vert DESTINATION ${DATADIR}/lightspark)
- INSTALL(TARGETS lightspark DESTINATION ${BINDIR})
+ INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/docs/man/lightspark.1 DESTINATION share/man/man1)
+ INSTALL(TARGETS lightspark RUNTIME DESTINATION ${BINDIR})
ENDIF(UNIX)
ENDIF(COMPILE_LIGHTSPARK)
+# tightspark executable target
IF(COMPILE_TIGHTSPARK)
ADD_EXECUTABLE(tightspark tightspark.cpp)
TARGET_LINK_LIBRARIES(tightspark spark)
- SET_TARGET_PROPERTIES(tightspark PROPERTIES LINK_FLAGS "-Wl,--as-needed ${LLVM_LDFLAGS}")
+
+ IF(UNIX)
+ INSTALL(TARGETS tightspark RUNTIME DESTINATION ${BINDIR})
+ ENDIF(UNIX)
ENDIF(COMPILE_TIGHTSPARK)
+
+# Browser plugin
+IF(COMPILE_PLUGIN)
+ ADD_SUBDIRECTORY(plugin-dir)
+ENDIF(COMPILE_PLUGIN)
+
View
@@ -1,40 +1,43 @@
-Version 0.4.1
--------------
+lightspark: An open source flash player implementation
-Optimized rendering of simple graphics
-First youtube support
+Version 0.4.2.2:
+ * Fallback on Gnash for older clips
-Version 0.4.0 RC3
--------------
+Version 0.4.2.1:
+ * Small bugfix
-Also use NPOT if available
+Version 0.4.2:
+ * Use fontconfig to select fonts
+ * Nore efficient handling of read only strings
+ * Greater compatibility with youtube videos
+ * Better compatibility with radeon cards
+ * Sound synchronization
+ * Chrome/Chromium support
+ * Firefox's OOPP support
-Version 0.4.0 RC2
--------------
+Version 0.4.1:
+ * Optimized rendering of simple graphics
+ * First youtube support
-Better support for older intel cards
+Version 0.4.0 RC3:
+ * Also use NPOT if available
-Version 0.4.0 RC1
--------------
+Version 0.4.0 RC2:
+ * Better support for older intel cards
-Better stability, the plugin should not crash
-Use Power-Of-Two sized textures for better compatibility
+Version 0.4.0 RC1:
+ * Better stability, the plugin should not crash
+ * Use Power-Of-Two sized textures for better compatibility
-Version 0.3.9
--------------
+Version 0.3.9:
+ * More complete cleanup of GL resources
-More complete cleanup of GL resources
+Version 0.3.8:
+ * Solved deadlock issues when using FlashBlock
-Version 0.3.8
--------------
+Version 0.3.7:
+ * Improved stability and relaxed graphics requirements
-Solved deadlock issues when using FlashBlock
+Version 0.3.6:
+ * Be more careful about glew initialization
-Version 0.3.7
--------------
-
-Improved stability and relaxed graphics requirements
-
-Version 0.3.6
--------------
-Be more careful about glew initialization
Oops, something went wrong.

0 comments on commit 22fabed

Please sign in to comment.