Browse Source

-updated cmake projects
-fixed minor warnings and errors
-added C++11 option
-added std::function with lambda support e.g.: actor->addEventListener(TouchEvent::CLICK, [](Event*) {log::messageln("clicked");}

dmuratshin 11 years ago
parent
commit
8a4795111c
55 changed files with 467 additions and 461 deletions
  1. 2 2
      .hg_archival.txt
  2. 4 3
      CMakeLists.txt
  3. 0 73
      examples/Demo/gen_xml_resources.py
  4. 4 2
      examples/Demo/proj.android/AndroidManifest.xml
  5. 1 1
      examples/Demo/proj.android/jni/Application.mk
  6. 1 0
      examples/Demo/proj.cmake/CMakeLists.txt
  7. 1 1
      examples/Demo/proj.emscripten/CMakeLists.txt
  8. 1 1
      examples/DemoBox2D/proj.android/jni/Application.mk
  9. 2 0
      examples/DemoBox2D/proj.cmake/CMakeLists.txt
  10. 1 1
      examples/DemoBox2D/proj.emscripten/CMakeLists.txt
  11. 1 1
      examples/Game/part1/proj.android/jni/Application.mk
  12. 1 0
      examples/Game/part1/proj.cmake/CMakeLists.txt
  13. 1 1
      examples/Game/part1/proj.emscripten/CMakeLists.txt
  14. 1 1
      examples/Game/part2/proj.android/jni/Application.mk
  15. 1 0
      examples/Game/part2/proj.cmake/CMakeLists.txt
  16. 1 1
      examples/Game/part2/proj.emscripten/CMakeLists.txt
  17. 1 1
      examples/Game/part3/proj.android/jni/Application.mk
  18. 1 0
      examples/Game/part3/proj.cmake/CMakeLists.txt
  19. 1 1
      examples/Game/part3/proj.emscripten/CMakeLists.txt
  20. 1 1
      examples/Game/part4/proj.android/jni/Application.mk
  21. 1 0
      examples/Game/part4/proj.cmake/CMakeLists.txt
  22. 1 1
      examples/Game/part4/proj.emscripten/CMakeLists.txt
  23. 1 1
      examples/Game/part5/proj.android/jni/Application.mk
  24. 1 0
      examples/Game/part5/proj.cmake/CMakeLists.txt
  25. 1 1
      examples/Game/part5/proj.emscripten/CMakeLists.txt
  26. 1 1
      examples/HelloWorld/proj.android/jni/Application.mk
  27. 1 0
      examples/HelloWorld/proj.cmake/CMakeLists.txt
  28. 1 1
      examples/HelloWorld/proj.emscripten/CMakeLists.txt
  29. 7 0
      examples/HelloWorld/src/example.cpp
  30. 1 1
      examples/Match3/proj.android/jni/Application.mk
  31. 1 0
      examples/Match3/proj.cmake/CMakeLists.txt
  32. 1 1
      examples/Match3/proj.emscripten/CMakeLists.txt
  33. 1 1
      examples/TutorialResources/proj.android/jni/Application.mk
  34. 1 0
      examples/TutorialResources/proj.cmake/CMakeLists.txt
  35. 1 1
      examples/TutorialResources/proj.emscripten/CMakeLists.txt
  36. 55 1
      oxygine/SDL/android/lib/src/org/oxygine/lib/HttpRequests.java
  37. 2 4
      oxygine/src/Actor.cpp
  38. 29 23
      oxygine/src/Serialize.cpp
  39. 13 0
      oxygine/src/closure/closure.h
  40. 52 3
      oxygine/src/closure/closure_impl.h
  41. 2 4
      oxygine/src/core/ThreadMessages.cpp
  42. 1 0
      oxygine/src/core/emscripten/HttpRequestEmscriptenTask.cpp
  43. 2 2
      oxygine/src/core/file.cpp
  44. 7 7
      oxygine/src/core/gl/NativeTextureGLES.cpp
  45. 13 13
      oxygine/src/core/gl/ShaderProgramGL.cpp
  46. 2 2
      oxygine/src/core/gl/VideoDriverGL.cpp
  47. 21 21
      oxygine/src/core/gl/VideoDriverGLES20.cpp
  48. 33 171
      oxygine/src/core/gl/oxgl.cpp
  49. 143 77
      oxygine/src/core/gl/oxgl.h
  50. 9 12
      oxygine/src/core/oxygine.cpp
  51. 8 7
      tools/others/gen_templates.py
  52. 24 12
      tools/others/genfn.py
  53. 1 1
      tools/templates/proj.android/jni/Application.mk
  54. 1 0
      tools/templates/proj.cmake/CMakeLists.txt
  55. 1 1
      tools/templates/proj.emscripten/CMakeLists.txt

+ 2 - 2
.hg_archival.txt

@@ -1,5 +1,5 @@
 repo: b6d71054df5712e643a0685bc3ba54b123db5729
-node: 6a8fffad0fd800d9333539e63e2bffa07a65fa29
+node: 376d19dbf4aa91c2f36dd8f02c0a03ebcaaa8373
 branch: default
 latesttag: oldrender
-latesttagdistance: 639
+latesttagdistance: 656

+ 4 - 3
CMakeLists.txt

@@ -2,12 +2,13 @@ cmake_minimum_required (VERSION 2.6)
 project (OXYGINE)
 
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 ")
+
 if (WIN32)
 	set(OX_DEFINITIONS	${OX_DEFINITIONS}
 		-D_CRT_SECURE_NO_WARNINGS)
 	set(SDL2_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/../SDL/include)
 else(WIN32)
-
 	find_path(SDL2_INCLUDE_DIRS NAMES SDL2/SDL.h)
 	message(STATUS ${SDL2_INCLUDE_DIRS_FOUND})
 
@@ -30,13 +31,13 @@ set(OX_HAVE_LIBJPEG 1)
 set(OX_HAVE_LIBPNG 1)
 
 if (EMSCRIPTEN)
-	set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} "-Wno-warn-absolute-paths")
+	set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-warn-absolute-paths")
 	set(OX_HAVE_LIBJPEG 0)
 	set(OX_HAVE_LIBPNG 1)
 	set(THIRD_PARTY ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/third_party/emscripten)
 	set(SDL2_INCLUDE_DIRS "")
 	file(GLOB OXYGINE_JS_LIBRARIES ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/src/core/emscripten/*.js)
-elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux")
+elseif (${CMAKE_SYSTEM_NAME} MATCHES "Linux") 	
 	set(THIRD_PARTY ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/third_party/linux)
 elseif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
 	set(THIRD_PARTY ${CMAKE_CURRENT_SOURCE_DIR}/oxygine/third_party/ios)

+ 0 - 73
examples/Demo/gen_xml_resources.py

@@ -1,73 +0,0 @@
-"""
-    typical usage example
-
-    your project structure
-    game\
-         data\
-              images\*.png
-              xmls
-         gen_xml_resources.py
-
-    go to game folder and run:
-
-    gen_xml_resources.py -d data -i images -o xmls/out.xml
-
-"""
-
-import os
-import shutil
-import glob
-
-def gen_xml(args):
-    wildcard = "*.*"
-    path = args.data + "/" + args.images
-    filelist = glob.glob(path + "/" + args.wildcard)
-    print filelist
-    print path
-    
-    dest = open(args.data + "/" + args.out, "w")
-    write = dest.write
-    
-
-    write("<resources>\n")
-    write("\t<set path=\"%s\"/>\n" % (args.images, ))
-    if args.sfactor != 1:
-        write("\t<set scale_factor=\"%s\"/>\n" % (args.sfactor, ))
-
-    if not args.load:
-        write("\t<set load=\"false\"/>\n")
-            
-    
-    if not args.atlasses:
-        write("\t<atlas>\n")        
-
-    for file in filelist:        
-        name = os.path.split(file)[1]
-        if args.atlasses:
-            write("\t<atlas>\n\t")
-        write("\t\t<image file='%s'/>\n" % (name))
-        if args.atlasses:
-            write("\t</atlas>\n")
-            
-    if not args.atlasses:
-        write("\t</atlas>\n")        
-        
-    write("</resources>\n")    
-    dest.close()
-
-    
-if __name__ == "__main__":
-
-    import argparse 
-    parser = argparse.ArgumentParser(description = "generates xml file with image resources")
-    parser.add_argument("-d", "--data", help = "root data folder", default = ".", required = True)
-    parser.add_argument("-s", "--sfactor", help = "scale factor", default = 1)
-    parser.add_argument("-i", "--images", help = "folder with images. path relative to --data", default = ".")
-    parser.add_argument("-o", "--out", help = "output xml file name", default = "out.xml")
-    parser.add_argument("-w", "--wildcard", help = "default is '*.png'", default = "*.png")
-    parser.add_argument("-l", "--load", help = "preload files?", action="store_true", default = True)
-    parser.add_argument("-a", "--atlasses", help = "separate atlasses for each file?", action="store_true", default = False)
-
-
-    args = parser.parse_args()
-    gen_xml(args)

+ 4 - 2
examples/Demo/proj.android/AndroidManifest.xml

@@ -26,8 +26,10 @@
 
     <!-- Android 2.3.3 -->
     <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="12" />
-    <uses-permission android:name="android.permission.INTERNET" />
-    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.INTERNET" /> <!--used for http requests demo-->    
+    <uses-permission android:name="android.permission.WAKE_LOCK" /><!--used for http requests demo (downloading files)-->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><!--used for Proxy detection, could be disabled-->    
+
 
     <!-- OpenGL ES 2.0 -->
     <uses-feature android:glEsVersion="0x00020000" /> 

+ 1 - 1
examples/Demo/proj.android/jni/Application.mk

@@ -1,5 +1,5 @@
 APP_STL := gnustl_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
-APP_CPPFLAGS += -lstdc++
+APP_CPPFLAGS += -std=c++11
 APP_ABI := armeabi-v7a

+ 1 - 0
examples/Demo/proj.cmake/CMakeLists.txt

@@ -6,6 +6,7 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 add_executable(Demo ../src/entry_point.cpp ../src/example.cpp ../src/test.cpp  ../src/TestBox9Sprite.h ../src/TestClipRect.h ../src/TestDrag.h ../src/TestHttp.h ../src/TestInputText.h ../src/TestManageRes.h ../src/TestMask.h ../src/TestPerf.h ../src/TestPolygon.h ../src/TestProgressBar.h ../src/TestRender2Texture.h ../src/TestSliding.h ../src/TestTexel2Pixel.h ../src/TestText.h ../src/TestTextureFormat.h ../src/TestTweens.h ../src/TestUserShader.h ../src/TestUserShader2.h ../src/example.h ../src/test.h )
 
 target_link_libraries(Demo ${OXYGINE_CORE_LIBS})

+ 1 - 1
examples/Demo/proj.emscripten/CMakeLists.txt

@@ -17,7 +17,7 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=50331648")
 
 set_target_properties(Demo PROPERTIES LINK_FLAGS "${linkFlags}")
 

+ 1 - 1
examples/DemoBox2D/proj.android/jni/Application.mk

@@ -1,5 +1,5 @@
 APP_STL := gnustl_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
-APP_CPPFLAGS += -lstdc++
+APP_CPPFLAGS += -std=c++11
 APP_ABI := armeabi-v7a

+ 2 - 0
examples/DemoBox2D/proj.cmake/CMakeLists.txt

@@ -10,6 +10,8 @@ file(GLOB_RECURSE BOX2DSRC
 		../box2d/*.cpp
 		../box2d/*.h)
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
+
 add_executable(DemoBox2D ${BOX2DSRC} ../src/Box2DDebugDraw.cpp ../src/entry_point.cpp ../src/example.cpp  ../src/Box2DDebugDraw.h ../src/example.h )
 source_group(box2d FILES ${BOX2DSRC})
 include_directories(../box2d)

+ 1 - 1
examples/DemoBox2D/proj.emscripten/CMakeLists.txt

@@ -25,7 +25,7 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=64435456")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=50331648")
 
 set_target_properties(DemoBox2D PROPERTIES LINK_FLAGS "${linkFlags}")
 

+ 1 - 1
examples/Game/part1/proj.android/jni/Application.mk

@@ -1,5 +1,5 @@
 APP_STL := gnustl_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
-APP_CPPFLAGS += -lstdc++
+APP_CPPFLAGS += -std=c++11
 APP_ABI := armeabi-v7a

+ 1 - 0
examples/Game/part1/proj.cmake/CMakeLists.txt

@@ -6,6 +6,7 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 add_executable(GamePart1 ../src/Game.cpp ../src/Joystick.cpp ../src/Player.cpp ../src/Unit.cpp ../src/entry_point.cpp ../src/example.cpp ../src/res.cpp  ../src/Game.h ../src/Joystick.h ../src/Player.h ../src/Unit.h ../src/example.h ../src/res.h )
 
 target_link_libraries(GamePart1 ${OXYGINE_CORE_LIBS})

+ 1 - 1
examples/Game/part1/proj.emscripten/CMakeLists.txt

@@ -17,7 +17,7 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=50331648")
 
 set_target_properties(GamePart1 PROPERTIES LINK_FLAGS "${linkFlags}")
 

+ 1 - 1
examples/Game/part2/proj.android/jni/Application.mk

@@ -1,5 +1,5 @@
 APP_STL := gnustl_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
-APP_CPPFLAGS += -lstdc++
+APP_CPPFLAGS += -std=c++11
 APP_ABI := armeabi-v7a

+ 1 - 0
examples/Game/part2/proj.cmake/CMakeLists.txt

@@ -6,6 +6,7 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 add_executable(GamePart2 ../src/Enemy.cpp ../src/Game.cpp ../src/Joystick.cpp ../src/Player.cpp ../src/Rocket.cpp ../src/Unit.cpp ../src/entry_point.cpp ../src/example.cpp ../src/res.cpp  ../src/Enemy.h ../src/Game.h ../src/Joystick.h ../src/Player.h ../src/Rocket.h ../src/Unit.h ../src/example.h ../src/res.h )
 
 target_link_libraries(GamePart2 ${OXYGINE_CORE_LIBS})

+ 1 - 1
examples/Game/part2/proj.emscripten/CMakeLists.txt

@@ -17,7 +17,7 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=50331648")
 
 set_target_properties(GamePart2 PROPERTIES LINK_FLAGS "${linkFlags}")
 

+ 1 - 1
examples/Game/part3/proj.android/jni/Application.mk

@@ -1,5 +1,5 @@
 APP_STL := gnustl_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
-APP_CPPFLAGS += -lstdc++
+APP_CPPFLAGS += -std=c++11
 APP_ABI := armeabi-v7a

+ 1 - 0
examples/Game/part3/proj.cmake/CMakeLists.txt

@@ -6,6 +6,7 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 add_executable(GamePart3 ../src/Enemy.cpp ../src/Game.cpp ../src/GameScene.cpp ../src/Joystick.cpp ../src/MainMenuScene.cpp ../src/MyButton.cpp ../src/Player.cpp ../src/Rocket.cpp ../src/Scene.cpp ../src/Unit.cpp ../src/entry_point.cpp ../src/example.cpp ../src/res.cpp  ../src/Enemy.h ../src/Game.h ../src/GameScene.h ../src/Joystick.h ../src/MainMenuScene.h ../src/MyButton.h ../src/Player.h ../src/Rocket.h ../src/Scene.h ../src/Unit.h ../src/example.h ../src/res.h )
 
 target_link_libraries(GamePart3 ${OXYGINE_CORE_LIBS})

+ 1 - 1
examples/Game/part3/proj.emscripten/CMakeLists.txt

@@ -17,7 +17,7 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=50331648")
 
 set_target_properties(GamePart3 PROPERTIES LINK_FLAGS "${linkFlags}")
 

+ 1 - 1
examples/Game/part4/proj.android/jni/Application.mk

@@ -1,5 +1,5 @@
 APP_STL := gnustl_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
-APP_CPPFLAGS += -lstdc++
+APP_CPPFLAGS += -std=c++11
 APP_ABI := armeabi-v7a

+ 1 - 0
examples/Game/part4/proj.cmake/CMakeLists.txt

@@ -6,6 +6,7 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 add_executable(GamePart4 ../src/Enemy.cpp ../src/Game.cpp ../src/GameMenu.cpp ../src/GameScene.cpp ../src/Joystick.cpp ../src/MainMenuScene.cpp ../src/MyButton.cpp ../src/Player.cpp ../src/Rocket.cpp ../src/Scene.cpp ../src/Unit.cpp ../src/entry_point.cpp ../src/example.cpp ../src/res.cpp  ../src/Enemy.h ../src/Game.h ../src/GameMenu.h ../src/GameScene.h ../src/Joystick.h ../src/MainMenuScene.h ../src/MyButton.h ../src/Player.h ../src/Rocket.h ../src/Scene.h ../src/Unit.h ../src/example.h ../src/res.h )
 
 target_link_libraries(GamePart4 ${OXYGINE_CORE_LIBS})

+ 1 - 1
examples/Game/part4/proj.emscripten/CMakeLists.txt

@@ -17,7 +17,7 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=50331648")
 
 set_target_properties(GamePart4 PROPERTIES LINK_FLAGS "${linkFlags}")
 

+ 1 - 1
examples/Game/part5/proj.android/jni/Application.mk

@@ -1,5 +1,5 @@
 APP_STL := gnustl_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
-APP_CPPFLAGS += -lstdc++
+APP_CPPFLAGS += -std=c++11
 APP_ABI := armeabi-v7a

+ 1 - 0
examples/Game/part5/proj.cmake/CMakeLists.txt

@@ -6,6 +6,7 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 add_executable(GamePart5 ../src/Enemy.cpp ../src/Game.cpp ../src/GameMenu.cpp ../src/GameScene.cpp ../src/Joystick.cpp ../src/MainMenuScene.cpp ../src/MyButton.cpp ../src/Player.cpp ../src/Rocket.cpp ../src/Scene.cpp ../src/Unit.cpp ../src/entry_point.cpp ../src/example.cpp ../src/res.cpp  ../src/Enemy.h ../src/Game.h ../src/GameMenu.h ../src/GameScene.h ../src/Joystick.h ../src/MainMenuScene.h ../src/MyButton.h ../src/Player.h ../src/Rocket.h ../src/Scene.h ../src/Unit.h ../src/example.h ../src/res.h )
 
 target_link_libraries(GamePart5 ${OXYGINE_CORE_LIBS})

+ 1 - 1
examples/Game/part5/proj.emscripten/CMakeLists.txt

@@ -17,7 +17,7 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=50331648")
 
 set_target_properties(GamePart5 PROPERTIES LINK_FLAGS "${linkFlags}")
 

+ 1 - 1
examples/HelloWorld/proj.android/jni/Application.mk

@@ -1,5 +1,5 @@
 APP_STL := gnustl_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
-APP_CPPFLAGS += -lstdc++
+APP_CPPFLAGS += -std=c++11
 APP_ABI := armeabi-v7a

+ 1 - 0
examples/HelloWorld/proj.cmake/CMakeLists.txt

@@ -6,6 +6,7 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 add_executable(HelloWorld ../src/entry_point.cpp ../src/example.cpp  ../src/example.h )
 
 target_link_libraries(HelloWorld ${OXYGINE_CORE_LIBS})

+ 1 - 1
examples/HelloWorld/proj.emscripten/CMakeLists.txt

@@ -17,7 +17,7 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=50331648")
 
 set_target_properties(HelloWorld PROPERTIES LINK_FLAGS "${linkFlags}")
 

+ 7 - 0
examples/HelloWorld/src/example.cpp

@@ -1,4 +1,5 @@
 #include "oxygine-framework.h"
+#include <functional>
 using namespace oxygine;
 
 //it is our resources
@@ -6,6 +7,7 @@ using namespace oxygine;
 //It is important on mobile devices with limited memory and you would load/unload them
 Resources gameResources;
 
+
 class MainActor: public Actor
 {
 public:
@@ -29,6 +31,11 @@ public:
 		EventCallback cb = CLOSURE(this, &MainActor::buttonClicked);
 		button->addEventListener(TouchEvent::CLICK, cb);
 
+
+		button->addEventListener(TouchEvent::CLICK, [](Event* e)->void{
+			log::messageln("button clicked");
+		});
+
 		//attach button as child to current actor
 		addChild(button);
 

+ 1 - 1
examples/Match3/proj.android/jni/Application.mk

@@ -1,5 +1,5 @@
 APP_STL := gnustl_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
-APP_CPPFLAGS += -lstdc++
+APP_CPPFLAGS += -std=c++11
 APP_ABI := armeabi-v7a

+ 1 - 0
examples/Match3/proj.cmake/CMakeLists.txt

@@ -6,6 +6,7 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 add_executable(Match3 ../src/entry_point.cpp ../src/example.cpp ../src/gameframe.cpp ../src/jewels.cpp ../src/shared.cpp  ../src/example.h ../src/gameframe.h ../src/jewels.h ../src/shared.h )
 
 target_link_libraries(Match3 ${OXYGINE_CORE_LIBS})

+ 1 - 1
examples/Match3/proj.emscripten/CMakeLists.txt

@@ -17,7 +17,7 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=50331648")
 
 set_target_properties(Match3 PROPERTIES LINK_FLAGS "${linkFlags}")
 

+ 1 - 1
examples/TutorialResources/proj.android/jni/Application.mk

@@ -1,5 +1,5 @@
 APP_STL := gnustl_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
-APP_CPPFLAGS += -lstdc++
+APP_CPPFLAGS += -std=c++11
 APP_ABI := armeabi-v7a

+ 1 - 0
examples/TutorialResources/proj.cmake/CMakeLists.txt

@@ -6,6 +6,7 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 add_executable(TutorialResources ../src/entry_point.cpp ../src/example.cpp  ../src/example.h )
 
 target_link_libraries(TutorialResources ${OXYGINE_CORE_LIBS})

+ 1 - 1
examples/TutorialResources/proj.emscripten/CMakeLists.txt

@@ -17,7 +17,7 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=50331648")
 
 set_target_properties(TutorialResources PROPERTIES LINK_FLAGS "${linkFlags}")
 

+ 55 - 1
oxygine/SDL/android/lib/src/org/oxygine/lib/HttpRequests.java

@@ -11,8 +11,32 @@ import com.android.volley.toolbox.Volley;
 import java.io.*;
 import java.net.HttpURLConnection;
 import java.net.URL;
+import java.net.Proxy;
+import java.net.InetSocketAddress;
 import java.util.Map;
 import android.util.Log;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.InetSocketAddress;
+import java.net.Proxy;
+import java.net.URL;
+import java.util.ArrayList;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLSession;
+
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.message.BasicNameValuePair;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+
 /**
  * Created by Denis on 31.12.2014.
  */
@@ -38,15 +62,45 @@ class HttpRequest extends AsyncTask<RequestDetails, Integer, String> {
     public static native void nativeHttpRequestResponseProgress(long handle, int loaded, int total);
     public static native void nativeHttpRequestResponseError(long handle);
 
+    private Proxy detectProxy() 
+    {
+        return null;
+        //experimental
+        /*
+        try {
+            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
+            NetworkInfo ni = cm.getActiveNetworkInfo();
+            if (ni != null && ni.isAvailable() && ni.getType() == ConnectivityManager.TYPE_MOBILE) {
+                String proxyHost = android.net.Proxy.getDefaultHost();
+                int port = android.net.Proxy.getDefaultPort();
+                if (proxyHost != null) {
+                    final InetSocketAddress sa = new InetSocketAddress(proxyHost, port);
+                    return new Proxy(Proxy.Type.HTTP, sa);
+                }
+            }
+        }
+        catch (SecurityException ex)
+        {
+        }
+        return null;
+        */
+    }
+
     @Override
     protected String doInBackground(RequestDetails... details_) {
         InputStream input = null;
         OutputStream output = null;
         HttpURLConnection connection = null;
         RequestDetails  details = details_[0];
+
+
         try {
             URL url = new URL(details.url);
-            connection = (HttpURLConnection) url.openConnection();
+            Proxy proxy = detectProxy();
+            if (proxy != null)
+                connection = (HttpURLConnection) url.openConnection(proxy);
+            else
+                connection = (HttpURLConnection) url.openConnection();
 
 
             if (details.postData != null) {

+ 2 - 4
oxygine/src/Actor.cpp

@@ -395,12 +395,10 @@ namespace oxygine
 	void Actor::handleEvent(Event *event)
 	{
 		bool touchEvent = TouchEvent::isTouchEvent(event->type);
-		if (TouchEvent::isTouchEvent(event->type))
+		if (touchEvent)
 		{
-			if (!(_flags & flag_visible) || getAlpha() == 0)
-			{
+			if (!(_flags & flag_visible) || getAlpha() == 0)			
 				return;
-			}
 		}
 		
 		Vector2 originalLocalPos(0, 0);

+ 29 - 23
oxygine/src/Serialize.cpp

@@ -5,45 +5,51 @@
 #include "ClipRectActor.h"
 #include "ProgressBar.h"
 #include "SlidingActor.h"
+#include "Polygon.h"
+#include "MaskedSprite.h"
+
 namespace oxygine
 {
-    //#define S(s) #s
-    //#define SS(s) ##s
-    #define CREATE(T) if (!strcmp(#T, type)) return new T
+	//#define S(s) #s
+	//#define SS(s) ##s
+#define CREATE(T) if (!strcmp(#T, type)) return new T
 
 	spActor creator::create(const char *type) const
 	{
 		CREATE(Sprite);
-		CREATE(TextField);		
+		CREATE(TextField);
 		CREATE(Actor);
 		CREATE(ProgressBar);
 		CREATE(SlidingActor);
 		CREATE(ColorRectSprite);
 		CREATE(ClipRectActor);
+		CREATE(Polygon);
+		CREATE(MaskedSprite);
+
 
 		return 0;
 	}
 
-    static void link(pugi::xml_node node, spActor actor, spActor root)
-    {
-        deserializeLinkData data;
-        data.node = node;
-        data.root = root;
-        actor->deserializeLink(&data);
-
-        spActor child = actor->getFirstChild();
-        node = node.first_child();
-        while (child)
-        {
-            link(node, child, root);
-            node = node.next_sibling();
-            child = child->getNextSibling();
-        }
-    }
-
-    void deserializeLinkData::link(pugi::xml_node node, spActor actor)
+	static void link(pugi::xml_node node, spActor actor, spActor root)
+	{
+		deserializeLinkData data;
+		data.node = node;
+		data.root = root;
+		actor->deserializeLink(&data);
+
+		spActor child = actor->getFirstChild();
+		node = node.first_child();
+		while (child)
+		{
+			link(node, child, root);
+			node = node.next_sibling();
+			child = child->getNextSibling();
+		}
+	}
+
+	void deserializeLinkData::link(pugi::xml_node node, spActor actor)
 	{
-        oxygine::link(node, actor, actor);
+		oxygine::link(node, actor, actor);
 	}
 
 	spActor deserializedata::deser(pugi::xml_node node, const creator* factory)

+ 13 - 0
oxygine/src/closure/closure.h

@@ -18,6 +18,15 @@ Many thanks to Wolfhound
 #  pragma once
 #endif
 
+#ifndef __S3E__
+#define CLOSURE_FUNCTION 1
+#endif
+
+#ifdef CLOSURE_FUNCTION
+#	include <functional>
+#	include <memory>
+#endif
+
 #define TEMPLATE_PARAM_LIST class R
 #define PARAM_TYPE_LIST 
 #define PARAM_TYPE_LIST_COMMA 
@@ -70,5 +79,9 @@ Many thanks to Wolfhound
 
 #define CLOSURE(PTR, MEM_PTR) (detail::CreateClosure(MEM_PTR).Init<MEM_PTR>(PTR))
 
+#if CLOSURE_FUNCTION
+#	define CLOSUREF(F) (detail::CreateClosureF(F))
+#endif
+
 #endif
 

+ 52 - 3
oxygine/src/closure/closure_impl.h

@@ -51,8 +51,16 @@ struct ClosureBase
   typedef R (*p_proxy_type)(void * PARAM_FORM_ARG_LIST_COMMA);
   void *p_this;
   p_proxy_type p_proxy;
+ 
+#if CLOSURE_FUNCTION
+  std::shared_ptr< std::function< R(PARAM_TYPE_LIST)> > p_function;
+#endif
+
+  R operator()(PARAM_FORM_ARG_LIST)
+  { 
+	  return p_proxy(p_this PARAM_ARG_LIST_COMMA); 
+  }
 
-  R operator()(PARAM_FORM_ARG_LIST) { return p_proxy(p_this PARAM_ARG_LIST_COMMA); }
 };
 
 } //namespace CLOSURE_NUM
@@ -71,7 +79,7 @@ struct Closure<R(PARAM_TYPE_LIST)>: public detail::CLOSURE_NUM::ClosureBase<R PA
   }
 
 
-  //initialization whith proxy function "p_proxy_function" and context "p_this".
+  //initialization with proxy function "p_proxy_function" and context "p_this".
   //signature of p_proxy_function should match template parameters of Closure<...>
   //and take additional parameter void *
   Closure(
@@ -82,6 +90,29 @@ struct Closure<R(PARAM_TYPE_LIST)>: public detail::CLOSURE_NUM::ClosureBase<R PA
     this->p_proxy= p_proxy_function;
   }
 
+ #if CLOSURE_FUNCTION
+  Closure( const std::function< R(PARAM_TYPE_LIST)>& f)
+  {
+	  this->p_function = std::make_shared< std::function<R(PARAM_TYPE_LIST)> >(f);
+	  this->p_this = this->p_function.get();
+	  this->p_proxy = callfunction;
+  }
+
+  template<class T>
+  Closure(T f)//lambda support
+  {
+	  this->p_function = std::make_shared< std::function<R(PARAM_TYPE_LIST)> >(f);
+	  this->p_this = this->p_function.get();
+	  this->p_proxy = callfunction;
+  }
+
+  static R callfunction(void* ptr PARAM_FORM_ARG_LIST_COMMA)
+  {
+	  std::function< R(PARAM_TYPE_LIST) > *f = (std::function< R(PARAM_TYPE_LIST) > *)ptr;
+	  return (*f)(PARAM_ARG_LIST);
+  }
+#endif
+
   private:
     struct dummy { void nonnull() {} };
     typedef void (dummy::*safe_bool)();
@@ -92,7 +123,7 @@ struct Closure<R(PARAM_TYPE_LIST)>: public detail::CLOSURE_NUM::ClosureBase<R PA
     //false, otherwise
     operator safe_bool() const
     { 
-        if(this->p_proxy) 
+        if(this->p_proxy)
           return &dummy::nonnull;
         else        
           return 0;
@@ -150,7 +181,25 @@ namespace detail
     return CLOSURE_NUM::CreateClosureHelper<T, R PARAM_TYPE_LIST_COMMA>();
   }
 
+#if CLOSURE_FUNCTION
+  template <TEMPLATE_PARAM_LIST> 
+  Closure<R (PARAM_TYPE_LIST)> CreateClosureF(const std::function< R (PARAM_TYPE_LIST) > & f )
+  {
+	  return Closure<R(PARAM_TYPE_LIST)>(f);
+  }
+  
+  /*
+
+  template <TEMPLATE_PARAM_LIST>
+  Closure<R(PARAM_TYPE_LIST)> CreateClosureF( R (*f) (PARAM_TYPE_LIST) )
+  {
+	  std::function<R(PARAM_TYPE_LIST)> fn = f;
+	  return Closure<R(PARAM_TYPE_LIST)>(fn);
+  }
+  */
+#endif
 
+  
   //helper function, to deduce return and parameters types of given pointer to member const function
   template <class T, TEMPLATE_PARAM_LIST> 
   CLOSURE_NUM::CreateClosureHelperConst<T, R PARAM_TYPE_LIST_COMMA> CreateClosure(R (T::*)(PARAM_TYPE_LIST)const)

+ 2 - 4
oxygine/src/core/ThreadMessages.cpp

@@ -10,9 +10,7 @@ namespace oxygine
 #define  LOGD(...)  ((void)0)
 #endif
 
-#if EMSCRIPTEN || __APPLE__ || __S3E__
-#define PTHREAD_MUTEX_RECURSIVE_NP PTHREAD_MUTEX_RECURSIVE
-#endif
+
 
 	MutexPthreadLock::MutexPthreadLock(pthread_mutex_t &m, bool lock) :_mutex(m), _locked(lock)
 	{
@@ -31,7 +29,7 @@ namespace oxygine
 
 		pthread_mutexattr_t attr;
 		pthread_mutexattr_init(&attr);		
-		pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE_NP);
+		pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
 
 		pthread_mutex_init(&_mutex, &attr);
 	}

+ 1 - 0
oxygine/src/core/emscripten/HttpRequestEmscriptenTask.cpp

@@ -43,6 +43,7 @@ namespace oxygine
 		addRef();
 
 		log::messageln("HttpRequestEmscriptenTask::_run %s", _url.c_str());
+		_postData.push_back(0);
 
 		emscripten_async_wget2_data(_url.c_str(), _postData.empty() ? "GET" : "POST", (char*)&_postData.front(), this, false, onload, onerror, onprogress);
 	}

+ 2 - 2
oxygine/src/core/file.cpp

@@ -45,8 +45,8 @@ namespace oxygine
 			_nfs.setPath("rom://");
 			_nfsWrite.setPath("ram://");
 #elif EMSCRIPTEN
-			mkdir("data-ram/", S_IRWXU|S_IRWXG|S_IRWXO);
-			_nfsWrite.setPath("data-ram/");
+			//mkdir("data-ram/", S_IRWXU|S_IRWXG|S_IRWXO);
+			//_nfsWrite.setPath("data-ram/");
 
 #elif __ANDROID__
 			log::messageln("internal %s", SDL_AndroidGetInternalStoragePath());

+ 7 - 7
oxygine/src/core/gl/NativeTextureGLES.cpp

@@ -124,13 +124,13 @@ namespace oxygine
 			glBindTexture(GL_TEXTURE_2D, 0);
 
 			unsigned int fbo = 0;
-			glGenFramebuffers(1, &fbo);
-			glBindFramebuffer(GL_FRAMEBUFFER, fbo);
-			glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, (GLuint)id, 0);
+			oxglGenFramebuffers(1, &fbo);
+			oxglBindFramebuffer(GL_FRAMEBUFFER, fbo);
+			oxglFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, (GLuint)id, 0);
 
 			//printf("created fbo: %d\n", fbo);
 
-			unsigned int status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
+			unsigned int status = oxglCheckFramebufferStatus(GL_FRAMEBUFFER);
 			//log::message("fbo status %d\n", status);
 			//GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES
 			if (status != GL_FRAMEBUFFER_COMPLETE)
@@ -142,7 +142,7 @@ namespace oxygine
 			glClearColor(0,0,0,0);
 			glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
 
-			glBindFramebuffer(GL_FRAMEBUFFER, prevFBO);
+			oxglBindFramebuffer(GL_FRAMEBUFFER, prevFBO);
 			//log::message("fbo bind\n");
 
 			glBindTexture(GL_TEXTURE_2D, 0);
@@ -172,7 +172,7 @@ namespace oxygine
 
 		glPixel p = SurfaceFormat2GL(src.format);
 		if (p.compressed)		
-			glCompressedTexImage2D(GL_TEXTURE_2D, 0, p.format, src.w, src.h, 0, src.h * src.pitch, src.data);
+			oxglCompressedTexImage2D(GL_TEXTURE_2D, 0, p.format, src.w, src.h, 0, src.h * src.pitch, src.data);
 		else
 		{
 			glTexImage2D(GL_TEXTURE_2D, 0, p.format, src.w, src.h, 0, p.format, p.type, src.data);			
@@ -220,7 +220,7 @@ namespace oxygine
 
 		if (_fbo)
 		{
-			glDeleteFramebuffers(1, (GLuint*)&_fbo);		
+			oxglDeleteFramebuffers(1, (GLuint*)&_fbo);
 			_fbo = 0;
 		}
 

+ 13 - 13
oxygine/src/core/gl/ShaderProgramGL.cpp

@@ -12,7 +12,7 @@ namespace oxygine
 	ShaderProgramGL::~ShaderProgramGL()
 	{
 		if (_program)
-			glDeleteProgram(_program);
+			oxglDeleteProgram(_program);
         CHECKGL();
 	}
 
@@ -29,7 +29,7 @@ namespace oxygine
 
 	int ShaderProgramGL::getUniformLocation(const char *id) const
 	{
-		int i = glGetUniformLocation(_program, id);
+		int i = oxglGetUniformLocation(_program, id);
 		//if (i == -1)
 		CHECKGL();
 		return i;
@@ -38,16 +38,16 @@ namespace oxygine
 	void printShaderInfoLog(GLuint shader)
 	{
 		GLint length = 0;
-		glGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
+		oxglGetShaderiv(shader, GL_INFO_LOG_LENGTH, &length);
 		if (length)
 		{
 			std::vector<char> bf;
 			bf.resize(length);
-			glGetShaderInfoLog(shader, (int)bf.size(), NULL, &bf.front());
+			oxglGetShaderInfoLog(shader, (int)bf.size(), NULL, &bf.front());
 			log::messageln("shader compiled: %s", &bf.front());
 
 			GLint success;
-			glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
+			oxglGetShaderiv(shader, GL_COMPILE_STATUS, &success);
 			if (success != GL_TRUE) 
 			{
 				OX_ASSERT(!"shader build error");
@@ -61,7 +61,7 @@ namespace oxygine
 
 	unsigned int ShaderProgramGL::createShader(unsigned int type, const char* data, const char *prepend, const char *append)
 	{
-		GLuint shader = glCreateShader(type);
+		GLuint shader = oxglCreateShader(type);
 
 		const char *sources[16];
 		const char **ptr = &sources[0];
@@ -98,8 +98,8 @@ namespace oxygine
 		}
 
 		int num = (int)(ptr - sources);
-		glShaderSource(shader, num, sources, 0);
-		glCompileShader(shader);
+		oxglShaderSource(shader, num, sources, 0);
+		oxglCompileShader(shader);
 		printShaderInfoLog(shader);
         
         CHECKGL();
@@ -110,14 +110,14 @@ namespace oxygine
 
 	unsigned int ShaderProgramGL::createProgram(int vs, int fs, const VertexDeclarationGL *decl)
 	{
-		int p = glCreateProgram();
-		glAttachShader(p, vs);
-		glAttachShader(p, fs);
+		int p = oxglCreateProgram();
+		oxglAttachShader(p, vs);
+		oxglAttachShader(p, fs);
 
 		for (int i = 0; i < decl->numElements; ++i)		
-			glBindAttribLocation(p, decl->elements[i].index, decl->elements[i].name);
+			oxglBindAttribLocation(p, decl->elements[i].index, decl->elements[i].name);
 
-		glLinkProgram(p);
+		oxglLinkProgram(p);
         
         CHECKGL();
 

+ 2 - 2
oxygine/src/core/gl/VideoDriverGL.cpp

@@ -128,7 +128,7 @@ namespace oxygine
 	{
 		if (!rt)
 		{
-			glBindFramebuffer(GL_FRAMEBUFFER, _prevFBO);
+			oxglBindFramebuffer(GL_FRAMEBUFFER, _prevFBO);
             CHECKGL();
 			return;
 		}
@@ -136,7 +136,7 @@ namespace oxygine
 		glGetIntegerv(GL_FRAMEBUFFER_BINDING, &_prevFBO);
 
 		NativeTextureGLES *gl = safeCast<NativeTextureGLES*>(rt.get());		
-		glBindFramebuffer(GL_FRAMEBUFFER, gl->getFboID());
+		oxglBindFramebuffer(GL_FRAMEBUFFER, gl->getFboID());
         CHECKGL();
 	}
 

+ 21 - 21
oxygine/src/core/gl/VideoDriverGLES20.cpp

@@ -27,7 +27,7 @@ namespace oxygine
 
 	VideoDriverGLES20::~VideoDriverGLES20()
 	{
-		glUseProgram(0);
+		oxglUseProgram(0);
         CHECKGL();
 	}
 
@@ -83,14 +83,14 @@ namespace oxygine
         CHECKGL();
 		ShaderProgramGL* prog = safeCast<ShaderProgramGL*>(prog_);
 		unsigned int id = prog->getID();
-		glUseProgram(id);
+		oxglUseProgram(id);
 		_program = id;
         CHECKGL();
 	}
 
 	void VideoDriverGLES20::setTexture(int sampler, spNativeTexture t)
 	{
-		glActiveTexture(GL_TEXTURE0 + sampler);
+		oxglActiveTexture(GL_TEXTURE0 + sampler);
 		if (t)
 			glBindTexture(GL_TEXTURE_2D, (GLuint)((size_t)t->getHandle()));	
 		else
@@ -109,8 +109,8 @@ namespace oxygine
 		const VertexDeclarationGL::Element *el = decl->elements;
 		for (int i = 0; i < decl->numElements; ++i)		
 		{	
-			glEnableVertexAttribArray(el->index);
-			glVertexAttribPointer(el->index, el->size, el->elemType, el->normalized, decl->size, verticesData + el->offset);			
+			oxglEnableVertexAttribArray(el->index);
+			oxglVertexAttribPointer(el->index, el->size, el->elemType, el->normalized, decl->size, verticesData + el->offset);
 			el++;
 		}
 
@@ -120,7 +120,7 @@ namespace oxygine
 		el = decl->elements;
 		for (int i = 0; i < decl->numElements; ++i)		
 		{			
-			glDisableVertexAttribArray(el->index);
+			oxglDisableVertexAttribArray(el->index);
 			el++;
 		}
 
@@ -141,8 +141,8 @@ namespace oxygine
 		const VertexDeclarationGL::Element *el = decl->elements;
 		for (int i = 0; i < decl->numElements; ++i)		
 		{	
-			glEnableVertexAttribArray(el->index);
-			glVertexAttribPointer(el->index, el->size, el->elemType, el->normalized, decl->size, verticesData + el->offset);			
+			oxglEnableVertexAttribArray(el->index);
+			oxglVertexAttribPointer(el->index, el->size, el->elemType, el->normalized, decl->size, verticesData + el->offset);
 			el++;
 		}
 
@@ -151,7 +151,7 @@ namespace oxygine
 		el = decl->elements;
 		for (int i = 0; i < decl->numElements; ++i)		
 		{			
-			glDisableVertexAttribArray(el->index);
+			oxglDisableVertexAttribArray(el->index);
 			el++;
 		}
 
@@ -178,55 +178,55 @@ namespace oxygine
 
 	void VideoDriverGLES20::setUniformInt(const char *id, int v)
 	{
-		int location = glGetUniformLocation(_program, id);
+		int location = oxglGetUniformLocation(_program, id);
 		if (location == -1)
 			return;
-		glUniform1i(location, v);
+		oxglUniform1i(location, v);
 		CHECKGL();
 	}
 	
 	void VideoDriverGLES20::setUniform(const char *id, const Vector4 *v, int num)
 	{
-		int p = glGetUniformLocation(_program, id);
+		int p = oxglGetUniformLocation(_program, id);
 		if (p == -1)
 			return;
-		glUniform4fv(p, num, v->m);
+		oxglUniform4fv(p, num, v->m);
 		CHECKGL();
 	}
 
 	void VideoDriverGLES20::setUniform(const char *id, const Vector2 *v, int num)
 	{
-		int p = glGetUniformLocation(_program, id);
+		int p = oxglGetUniformLocation(_program, id);
 		if (p == -1)
 			return;
-		glUniform2fv(p, num, &v->x);
+		oxglUniform2fv(p, num, &v->x);
 		CHECKGL();
 	}
 
 	void VideoDriverGLES20::setUniform(const char *id, const Vector3 *v, int num)
 	{
-		int p = glGetUniformLocation(_program, id);
+		int p = oxglGetUniformLocation(_program, id);
 		if (p == -1)
 			return;
-		glUniform3fv(p, num, &v->x);
+		oxglUniform3fv(p, num, &v->x);
 		CHECKGL();
 	}
 
 	void VideoDriverGLES20::setUniform(const char *id, const Matrix *mat)
 	{
-		int p = glGetUniformLocation(_program, id);
+		int p = oxglGetUniformLocation(_program, id);
 		if (p == -1)
 			return;
-		glUniformMatrix4fv(p, 1, GL_FALSE, mat->ml);
+		oxglUniformMatrix4fv(p, 1, GL_FALSE, mat->ml);
 		CHECKGL();
 	}
 
 	void VideoDriverGLES20::setUniform(const char *id, float val)
 	{
-		int p = glGetUniformLocation(_program, id);
+		int p = oxglGetUniformLocation(_program, id);
 		if (p == -1)
 			return;
-		glUniform1f(p, val);
+		oxglUniform1f(p, val);
 		CHECKGL();
 	}
 

+ 33 - 171
oxygine/src/core/gl/oxgl.cpp

@@ -3,7 +3,7 @@
 #include <stdlib.h>
 
 #ifdef WIN32
-#include "SDL_video.h"
+//#include "SDL_video.h"
 
 #if defined(_MSC_VER)
 #pragma warning(push)
@@ -88,176 +88,38 @@ extern "C"
 	{}
 
 	
-	PFNGLSHADERSOURCEPROC _glShaderSource = def_glShaderSource;
-
-#if GL_GLEXT_VERSION == 64
-	GLAPI void APIENTRY glShaderSource(GLuint shader, GLsizei count, const GLchar ** string, const GLint *length)
-#else
-	GLAPI void APIENTRY glShaderSource(GLuint shader, GLsizei count, const GLchar * const* string, const GLint *length)
-#endif
-	{
-		_glShaderSource(shader,count,string,length);
-	}
+	PFNGLSHADERSOURCEPROC _glShaderSource = 0;
 	PFNGLUSEPROGRAMPROC _glUseProgram = 0;
-	GLAPI void APIENTRY glUseProgram (GLuint program)
-	{
-		_glUseProgram(program);
-	}
-	PFNGLVERTEXATTRIBPOINTERPROC _glVertexAttribPointer = def_glVertexAttribPointer;
-	GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer)
-	{
-		_glVertexAttribPointer(index,size,type,normalized,stride,pointer);
-	}
-	PFNGLACTIVETEXTUREPROC _glActiveTexture = def_glActiveTexture;
-	GLAPI void APIENTRY glActiveTexture (GLenum texture)
-	{
-		_glActiveTexture(texture);
-	}
-	PFNGLENABLEVERTEXATTRIBARRAYPROC _glEnableVertexAttribArray = def_glEnableVertexAttribArray;
-	GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index)
-	{
-		_glEnableVertexAttribArray(index);
-	}
-	PFNGLDISABLEVERTEXATTRIBARRAYPROC _glDisableVertexAttribArray = def_glDisableVertexAttribArray;
-	GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index)
-	{
-		_glDisableVertexAttribArray(index);
-	}
-	PFNGLDELETEPROGRAMPROC _glDeleteProgram = def_glDeleteProgram;
-	GLAPI void APIENTRY glDeleteProgram (GLuint program)
-	{
-		_glDeleteProgram(program);
-	}
-	PFNGLGETSHADERIVPROC _glGetShaderiv = def_glGetShaderiv;
-	GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params)
-	{
-		_glGetShaderiv(shader,pname,params);
-	}
-	PFNGLGETSHADERINFOLOGPROC _glGetShaderInfoLog = def_glGetShaderInfoLog;
-	GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog)
-	{
-		_glGetShaderInfoLog(shader,bufSize,length,infoLog);
-	}
-	PFNGLCREATESHADERPROC _glCreateShader = def_glCreateShader;
-	GLAPI GLuint APIENTRY glCreateShader (GLenum type)
-	{
-		return _glCreateShader(type);
-	}
-	PFNGLCREATEPROGRAMPROC _glCreateProgram = def_glCreateProgram;
-	GLAPI GLuint APIENTRY glCreateProgram (void)
-	{
-		return _glCreateProgram();
-	}
-	PFNGLATTACHSHADERPROC _glAttachShader = def_glAttachShader;
-	GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader)
-	{
-		_glAttachShader(program,shader);
-	}
-	PFNGLCOMPILESHADERPROC _glCompileShader = def_glCompileShader;
-	GLAPI void APIENTRY glCompileShader (GLuint shader)
-	{
-		_glCompileShader(shader);
-	}
-	PFNGLBINDATTRIBLOCATIONPROC _glBindAttribLocation = def_glBindAttribLocation;
-	GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name)
-	{
-		_glBindAttribLocation(program,index,name);
-	}
-	PFNGLLINKPROGRAMPROC _glLinkProgram = def_glLinkProgram;
-	GLAPI void APIENTRY glLinkProgram (GLuint program)
-	{
-		_glLinkProgram(program);
-	}
-	PFNGLUNIFORM1IPROC _glUniform1i = def_glUniform1i;
-	GLAPI void APIENTRY glUniform1i (GLint location, GLint v0)
-	{
-		_glUniform1i(location,v0);
-	}
-	PFNGLUNIFORM2FVPROC _glUniform2fv = def_glUniform2fv;
-	GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value)
-	{
-		_glUniform2fv(location,count,value);
-	}
-
-	PFNGLUNIFORM3FVPROC _glUniform3fv = def_glUniform3fv;
-	GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value)
-	{
-		_glUniform3fv(location,count,value);
-	}
-
-	PFNGLUNIFORM4FVPROC _glUniform4fv = def_glUniform4fv;
-	GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value)
-	{
-		_glUniform4fv(location,count,value);
-	}
-	PFNGLUNIFORM1FPROC _glUniform1f = def_glUniform1f;
-	GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0)
-	{
-		_glUniform1f(location,v0);
-	}
-	PFNGLUNIFORMMATRIX4FVPROC _glUniformMatrix4fv = def_glUniformMatrix4fv;
-	GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value)
-	{
-		_glUniformMatrix4fv(location,count,transpose,value);
-	}
-	PFNGLBINDFRAMEBUFFERPROC _glBindFramebuffer = def_glBindFramebuffer;
-	GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer)
-	{
-		_glBindFramebuffer(target,framebuffer);
-	}
-	PFNGLGENFRAMEBUFFERSPROC _glGenFramebuffers = def_glGenFramebuffers;
-	GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers)
-	{
-		_glGenFramebuffers(n,framebuffers);
-	}
-	PFNGLCHECKFRAMEBUFFERSTATUSPROC _glCheckFramebufferStatus = def_glCheckFramebufferStatus;
-	GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target)
-	{
-		return _glCheckFramebufferStatus(target);
-	}
-	PFNGLDELETEFRAMEBUFFERSPROC _glDeleteFramebuffers = def_glDeleteFramebuffers;
-	GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers)
-	{
-		_glDeleteFramebuffers(n,framebuffers);
-	}
-	PFNGLGETUNIFORMLOCATIONPROC _glGetUniformLocation = def_glGetUniformLocation;
-	GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name)
-	{
-		return _glGetUniformLocation(program,name);
-	}
-	PFNGLFRAMEBUFFERTEXTURE2DPROC _glFramebufferTexture2D = def_glFramebufferTexture2D;
-	GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level)
-	{
-		_glFramebufferTexture2D(target,attachment,textarget,texture,level);
-	}
-	PFNGLCOMPRESSEDTEXIMAGE2DPROC _glCompressedTexImage2D = def_glCompressedTexImage2D;
-	GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data)
-	{
-		_glCompressedTexImage2D(target,level,internalformat,width,height,border,imageSize,data);
-	}
-	PFNGLBINDBUFFERPROC _glBindBuffer = def_glBindBuffer;
-	GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer)
-	{
-		_glBindBuffer(target,buffer);
-	}
-	PFNGLGENBUFFERSPROC _glGenBuffers = def_glGenBuffers;
-	GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers)
-	{
-		_glGenBuffers(n,buffers);
-	}
-	PFNGLBUFFERDATAPROC _glBufferData = def_glBufferData;
-	GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage)
-	{
-		_glBufferData(target,size,data,usage);
-	}
-	PFNGLDELETEBUFFERSPROC _glDeleteBuffers = def_glDeleteBuffers;
-	GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers)
-	{
-		_glDeleteBuffers(n,buffers);
-	}
-
-
-
+	PFNGLVERTEXATTRIBPOINTERPROC _glVertexAttribPointer = 0;
+	PFNGLACTIVETEXTUREPROC _glActiveTexture = 0;
+	PFNGLENABLEVERTEXATTRIBARRAYPROC _glEnableVertexAttribArray = 0;
+	PFNGLDISABLEVERTEXATTRIBARRAYPROC _glDisableVertexAttribArray = 0;
+	PFNGLDELETEPROGRAMPROC _glDeleteProgram = 0;
+	PFNGLGETSHADERIVPROC _glGetShaderiv = 0;
+	PFNGLGETSHADERINFOLOGPROC _glGetShaderInfoLog = 0;
+	PFNGLCREATESHADERPROC _glCreateShader = 0;
+	PFNGLCREATEPROGRAMPROC _glCreateProgram = 0;
+	PFNGLATTACHSHADERPROC _glAttachShader = 0;
+	PFNGLCOMPILESHADERPROC _glCompileShader = 0;
+	PFNGLBINDATTRIBLOCATIONPROC _glBindAttribLocation = 0;
+	PFNGLLINKPROGRAMPROC _glLinkProgram = 0;
+	PFNGLUNIFORM1IPROC _glUniform1i = 0;
+	PFNGLUNIFORM2FVPROC _glUniform2fv = 0;
+	PFNGLUNIFORM3FVPROC _glUniform3fv = 0;
+	PFNGLUNIFORM4FVPROC _glUniform4fv = 0;
+	PFNGLUNIFORM1FPROC _glUniform1f = 0;
+	PFNGLUNIFORMMATRIX4FVPROC _glUniformMatrix4fv = 0;
+	PFNGLBINDFRAMEBUFFERPROC _glBindFramebuffer = 0;
+	PFNGLGENFRAMEBUFFERSPROC _glGenFramebuffers = 0;
+	PFNGLCHECKFRAMEBUFFERSTATUSPROC _glCheckFramebufferStatus = 0;
+	PFNGLDELETEFRAMEBUFFERSPROC _glDeleteFramebuffers = 0;
+	PFNGLGETUNIFORMLOCATIONPROC _glGetUniformLocation = 0;
+	PFNGLFRAMEBUFFERTEXTURE2DPROC _glFramebufferTexture2D = 0;
+	PFNGLCOMPRESSEDTEXIMAGE2DPROC _glCompressedTexImage2D = 0;
+	PFNGLBINDBUFFERPROC _glBindBuffer = 0;
+	PFNGLGENBUFFERSPROC _glGenBuffers = 0;
+	PFNGLBUFFERDATAPROC _glBufferData = 0;
+	PFNGLDELETEBUFFERSPROC _glDeleteBuffers = 0;
 }
 
 int initGLExtensions(myGetProcAdress func)
@@ -328,4 +190,4 @@ namespace oxygine
 			}
 		}
 	}
-}
+}

+ 143 - 77
oxygine/src/core/gl/oxgl.h

@@ -3,85 +3,151 @@
 
 
 #if __S3E__
-	#include "IwImage.h"
-	#include "IwGL.h"
-	#include "GLES/gl.h"
-	#define GL_GLEXT_PROTOTYPES
-	#include "GLES/glext.h"
-	#include <gles/egl.h>
+#	include "IwImage.h"
+#	include "IwGL.h"
+#	include "GLES/gl.h"
+#	define GL_GLEXT_PROTOTYPES
+#	include "GLES/glext.h"
+#	include <gles/egl.h>
 #else
-	#include "SDL_config.h"
-
-	#if WIN32
-        #define GL_GLEXT_PROTOTYPES
-		#include "SDL_opengl.h"
-
-		#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                      0x8C00
-		#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                      0x8C01
-		#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                     0x8C02
-		#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                     0x8C03
-
-		#define GL_ETC1_RGB8_OES                                        0x8D64
-
-	#elif __ANDROID__
-		#include "GLES2/gl2.h"
-		#define GL_GLEXT_PROTOTYPES
-		#include "GLES2/gl2ext.h"
-
-		#define glGenFramebuffers			glGenFramebuffers
-		#define glBindFramebuffer			glBindFramebuffer
-		#define glFramebufferTexture2D		glFramebufferTexture2D
-		#define glDeleteFramebuffers		glDeleteFramebuffers
-		#define glCheckFramebufferStatus	glCheckFramebufferStatus
-
-		/*
-		#define GL_FRAMEBUFFER				GL_FRAMEBUFFER
-		#define GL_FRAMEBUFFER_BINDING		GL_FRAMEBUFFER_BINDING
-		#define GL_COLOR_ATTACHMENT0		GL_COLOR_ATTACHMENT0
-		#define GL_FRAMEBUFFER_COMPLETE		GL_FRAMEBUFFER_COMPLETE
-		*/
-	#elif __APPLE__
-	    #include <TargetConditionals.h>
-		#if TARGET_OS_IPHONE
-		    #define GL_ETC1_RGB8_OES                                        0x8D64
-		    #include <OpenGLES/ES2/gl.h>
-		    #include <OpenGLES/ES2/glext.h>
-		    #include <OpenGLES/ES1/gl.h>
-		    #include <OpenGLES/ES1/glext.h>
-		#else
-		    #define GL_GLEXT_PROTOTYPES
-		    #include "SDL_opengl.h"
-
-		    #define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                      0x8C00
-		    #define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                      0x8C01
-		    #define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                     0x8C02
-		    #define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                     0x8C03
-
-		    #define GL_ETC1_RGB8_OES                                        0x8D64
-		#endif
-	#elif EMSCRIPTEN
-		#include "GLES2/gl2.h"
-		#define GL_GLEXT_PROTOTYPES
-		#include "GLES2/gl2ext.h"
-
-		#define glGenFramebuffers			glGenFramebuffers
-		#define glBindFramebuffer			glBindFramebuffer
-		#define glFramebufferTexture2D		glFramebufferTexture2D
-		#define glDeleteFramebuffers		glDeleteFramebuffers
-		#define glCheckFramebufferStatus	glCheckFramebufferStatus
-
-	#elif __unix__
-		#define GL_GLEXT_PROTOTYPES
-		#include "SDL_opengl.h"
-
-		#define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                      0x8C00
-		#define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                      0x8C01
-		#define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                     0x8C02
-		#define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                     0x8C03
-
-		#define GL_ETC1_RGB8_OES                                        0x8D64
-	#endif
+#	include "SDL_config.h"
+
+#if WIN32
+#	define GL_GLEXT_PROTOTYPES
+#	include "SDL_opengl.h"
+
+#	define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                      0x8C00
+#	define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                      0x8C01
+#	define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                     0x8C02
+#	define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                     0x8C03
+
+#	define GL_ETC1_RGB8_OES                                        0x8D64
+	
+extern "C"
+{
+    extern PFNGLSHADERSOURCEPROC _glShaderSource;
+    extern PFNGLUSEPROGRAMPROC _glUseProgram;
+    extern PFNGLVERTEXATTRIBPOINTERPROC _glVertexAttribPointer;
+    extern PFNGLACTIVETEXTUREPROC _glActiveTexture;
+    extern PFNGLENABLEVERTEXATTRIBARRAYPROC _glEnableVertexAttribArray;
+    extern PFNGLDISABLEVERTEXATTRIBARRAYPROC _glDisableVertexAttribArray;
+    extern PFNGLDELETEPROGRAMPROC _glDeleteProgram;
+    extern PFNGLGETSHADERIVPROC _glGetShaderiv;
+    extern PFNGLGETSHADERINFOLOGPROC _glGetShaderInfoLog;
+    extern PFNGLCREATESHADERPROC _glCreateShader;
+    extern PFNGLCREATEPROGRAMPROC _glCreateProgram;
+    extern PFNGLATTACHSHADERPROC _glAttachShader;
+    extern PFNGLCOMPILESHADERPROC _glCompileShader;
+    extern PFNGLBINDATTRIBLOCATIONPROC _glBindAttribLocation;
+    extern PFNGLLINKPROGRAMPROC _glLinkProgram;
+    extern PFNGLUNIFORM1IPROC _glUniform1i;
+    extern PFNGLUNIFORM2FVPROC _glUniform2fv;
+    extern PFNGLUNIFORM3FVPROC _glUniform3fv;
+    extern PFNGLUNIFORM4FVPROC _glUniform4fv;
+    extern PFNGLUNIFORM1FPROC _glUniform1f;
+    extern PFNGLUNIFORMMATRIX4FVPROC _glUniformMatrix4fv;
+    extern PFNGLBINDFRAMEBUFFERPROC _glBindFramebuffer;
+    extern PFNGLGENFRAMEBUFFERSPROC _glGenFramebuffers;
+    extern PFNGLCHECKFRAMEBUFFERSTATUSPROC _glCheckFramebufferStatus;
+    extern PFNGLDELETEFRAMEBUFFERSPROC _glDeleteFramebuffers;
+    extern PFNGLGETUNIFORMLOCATIONPROC _glGetUniformLocation;
+    extern PFNGLFRAMEBUFFERTEXTURE2DPROC _glFramebufferTexture2D;
+    extern PFNGLCOMPRESSEDTEXIMAGE2DPROC _glCompressedTexImage2D;
+    extern PFNGLBINDBUFFERPROC _glBindBuffer;
+    extern PFNGLGENBUFFERSPROC _glGenBuffers;
+    extern PFNGLBUFFERDATAPROC _glBufferData;
+    extern PFNGLDELETEBUFFERSPROC _glDeleteBuffers;
+}
+
+#elif __ANDROID__
+#	include "GLES2/gl2.h"
+#	define GL_GLEXT_PROTOTYPES
+#	include "GLES2/gl2ext.h"
+
+#elif __APPLE__
+#	include <TargetConditionals.h>
+#	if TARGET_OS_IPHONE
+#		define GL_ETC1_RGB8_OES                                        0x8D64
+#		include <OpenGLES/ES2/gl.h>
+#		include <OpenGLES/ES2/glext.h>
+#		include <OpenGLES/ES1/gl.h>
+#		include <OpenGLES/ES1/glext.h>
+#	else
+#		define GL_GLEXT_PROTOTYPES
+#		include "SDL_opengl.h"
+
+#		define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                      0x8C00
+#		define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                      0x8C01
+#		define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                     0x8C02
+#		define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                     0x8C03
+
+#		define GL_ETC1_RGB8_OES                                        0x8D64
+#	endif
+#elif EMSCRIPTEN
+#	include "GLES2/gl2.h"
+#	define GL_GLEXT_PROTOTYPES
+#	include "GLES2/gl2ext.h"
+#elif __unix__
+#	define GL_GLEXT_PROTOTYPES
+#	include "SDL_opengl.h"
+
+#	define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG                      0x8C00
+#	define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG                      0x8C01
+#	define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG                     0x8C02
+#	define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG                     0x8C03
+
+#	define GL_ETC1_RGB8_OES                                        0x8D64
 #endif
+#endif
+
+
+
+#if WIN32
+#	define GLPREF _
+#else
+#	define GLPREF
+#endif
+
+#define PASTER(x,y) x ## y
+#define EVALUATOR(x,y)  PASTER(x,y)
+#define DECLARE_GLEXT(y)  EVALUATOR(GLPREF,y)
+
+#define oxglShaderSource DECLARE_GLEXT(glShaderSource)
+#define oxglUseProgram DECLARE_GLEXT(glUseProgram)
+#define oxglVertexAttribPointer DECLARE_GLEXT(glVertexAttribPointer)
+#define oxglActiveTexture DECLARE_GLEXT(glActiveTexture)
+#define oxglEnableVertexAttribArray DECLARE_GLEXT(glEnableVertexAttribArray)
+#define oxglDisableVertexAttribArray DECLARE_GLEXT(glDisableVertexAttribArray)
+#define oxglDeleteProgram DECLARE_GLEXT(glDeleteProgram)
+#define oxglGetShaderiv DECLARE_GLEXT(glGetShaderiv)
+#define oxglGetShaderInfoLog DECLARE_GLEXT(glGetShaderInfoLog)
+#define oxglCreateShader DECLARE_GLEXT(glCreateShader)
+#define oxglCreateProgram DECLARE_GLEXT(glCreateProgram)
+#define oxglAttachShader DECLARE_GLEXT(glAttachShader)
+#define oxglCompileShader DECLARE_GLEXT(glCompileShader)
+#define oxglBindAttribLocation DECLARE_GLEXT(glBindAttribLocation)
+#define oxglLinkProgram DECLARE_GLEXT(glLinkProgram)
+#define oxglUniform1i DECLARE_GLEXT(glUniform1i)
+#define oxglUniform2fv DECLARE_GLEXT(glUniform2fv)
+#define oxglUniform3fv DECLARE_GLEXT(glUniform3fv)
+#define oxglUniform4fv DECLARE_GLEXT(glUniform4fv)
+#define oxglUniform1f DECLARE_GLEXT(glUniform1f)
+#define oxglUniformMatrix4fv DECLARE_GLEXT(glUniformMatrix4fv)
+#define oxglBindFramebuffer DECLARE_GLEXT(glBindFramebuffer)
+#define oxglGenFramebuffers DECLARE_GLEXT(glGenFramebuffers)
+#define oxglCheckFramebufferStatus DECLARE_GLEXT(glCheckFramebufferStatus)
+#define oxglDeleteFramebuffers DECLARE_GLEXT(glDeleteFramebuffers)
+#define oxglGetUniformLocation DECLARE_GLEXT(glGetUniformLocation)
+#define oxglFramebufferTexture2D DECLARE_GLEXT(glFramebufferTexture2D)
+#define oxglCompressedTexImage2D DECLARE_GLEXT(glCompressedTexImage2D)
+#define oxglBindBuffer DECLARE_GLEXT(glBindBuffer)
+#define oxglGenBuffers DECLARE_GLEXT(glGenBuffers)
+#define oxglBufferData DECLARE_GLEXT(glBufferData)
+#define oxglDeleteBuffers DECLARE_GLEXT(glDeleteBuffers)
+
+
+//#undef PASTER
+//#undef EVALUATOR
 
 namespace oxygine {void checkGLError();}
 #define CHECKGL() checkGLError()

+ 9 - 12
oxygine/src/core/oxygine.cpp

@@ -674,24 +674,21 @@ namespace oxygine
 		{
 			delete IVideoDriver::instance;
 			IVideoDriver::instance = 0;
+			
+			Input::instance.cleanup();
+
+			Renderer::release();
+
+			DebugActor::release();
 
+			if (Stage::instance)
+				Stage::instance->cleanup();
+			Stage::instance = 0;
 #if OXYGINE_SDL
 			SDL_GL_DeleteContext(_context);
 			SDL_DestroyWindow(_window);
 			SDL_Quit();
 #endif
-
-			spActor temp = Stage::instance;
-			if (Stage::instance)
-				Stage::instance->cleanup();
-			Stage::instance = 0;
-
-			Input::instance.cleanup();
-
-			Renderer::release();
-			DebugActor::release();
-
-			//Winnie::DesroyHeap();
 		}
 
 		void execute(const char *str)

+ 8 - 7
tools/others/gen_templates.py

@@ -5,13 +5,14 @@ def gen(path, project = ""):
 	if not project:
 		project = path
 
-	projs = ("win32", "android", "macosx", "ios", "cmake", "emscripten")
+	#projs = ("win32", "android", "macosx", "ios", "cmake", "emscripten")
+	
+	#projs = ("ios", "macosx")
+	#projs = ("macosx", )	
+	#projs = ("win32", )
+	projs = ("cmake", )	
 	#projs = ("android", )
-	projs = ("ios", "macosx")
-	projs = ("macosx", )	
-	projs = ("win32", )
-	projs = ("cmake", )
-	projs = ("emscripten", )
+	#projs = ("emscripten", )
 
 	for platform in projs:
 		dest = "../../examples/" + path + "/proj." + platform
@@ -37,4 +38,4 @@ if 1:
 	gen("Match3")
 
 
-#gen("DemoBox2D")
+gen("DemoBox2D")

+ 24 - 12
tools/others/genfn.py

@@ -1,6 +1,6 @@
 #!/usr/bin/python
 
-import io
+import cStringIO
 lines = open("../../../SDL/include/SDL_opengl_glext.h").readlines()
 funcs = ["glShaderSource", 
          "glUseProgram", 
@@ -40,9 +40,11 @@ funcs = ["glShaderSource",
 #GLAPI void APIENTRY glDeleteProgram (GLuint program);
 #PFNGLDELETEPROGRAMPROC
 
-base = io.StringIO()
-defl = io.StringIO()
-init = io.StringIO()
+base = cStringIO.StringIO()
+defl = cStringIO.StringIO()
+init = cStringIO.StringIO()
+extern = cStringIO.StringIO()
+define = cStringIO.StringIO()
 
 
 
@@ -72,12 +74,19 @@ def get(name):
 				
 			st = st[0:-2]
 
-			
-			base.write("%s _%s = def_%s;\n" % (proc, name, name))
-			base.write(st + "\n")
+
+			#PFNGLSHADERSOURCEPROC _glShaderSource = 0;			
+			base.write("%s _%s = 0;\n" % (proc, name))
+			#base.write(st + "\n")
+
+			extern.write("extern %s _%s;\n" % (proc, name))
+			define.write("#define ox%s DECLARE_GLEXT(%s)\n" % (name, name))
+			#extern.write(st + "\n")
+
 			stf = st.replace(name, "def_" + name)
+			
 			defl.write(stf + "\n")
-			base.write("{\n")
+			#base.write("{\n")
 			defl.write("{")
 			
 			args = st[st.find("(") + 1:st.find(")")]
@@ -91,6 +100,7 @@ def get(name):
 					continue
 				allargs.append(q)
 			
+			"""
 			base.write("\t")
 			if not st.startswith("GLAPI void"):
 				base.write("return ");				
@@ -106,6 +116,7 @@ def get(name):
 			base.write(d)				
 
 			base.write("}\n")			
+			"""
 			defl.write("}\n")			
 
 			init.write("GETFUNC(_%s, def_%s, %s, \"%s\");\n" % (name, name, proc, name))
@@ -119,8 +130,9 @@ base.write("""
 }
 """)
 	
-print(defl.getvalue())
-print(base.getvalue())
-print(init.getvalue())
+print defl.getvalue()
+print base.getvalue()
+print init.getvalue()
 
-open("res.cpp", "w").write(defl.getvalue() + base.getvalue() + init.getvalue())
+open("res.cpp", "w").write(defl.getvalue() + base.getvalue() + init.getvalue())
+open("res.h", "w").write(extern.getvalue() + define.getvalue())

+ 1 - 1
tools/templates/proj.android/jni/Application.mk

@@ -1,5 +1,5 @@
 APP_STL := gnustl_static
 APP_CPPFLAGS += -fexceptions
 APP_CPPFLAGS += -frtti
-APP_CPPFLAGS += -lstdc++
+APP_CPPFLAGS += -std=c++11
 APP_ABI := armeabi-v7a

+ 1 - 0
tools/templates/proj.cmake/CMakeLists.txt

@@ -6,6 +6,7 @@ add_definitions(${OXYGINE_DEFINITIONS})
 include_directories(${OXYGINE_INCLUDE_DIRS})
 link_directories(${OXYGINE_LIBRARY_DIRS})
 
+set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
 add_executable(${PROJECT} ${SRC} ${INCLUDE})
 
 target_link_libraries(${PROJECT} ${OXYGINE_CORE_LIBS})

+ 1 - 1
tools/templates/proj.emscripten/CMakeLists.txt

@@ -17,7 +17,7 @@ else() # Either MinSizeRel, RelWithDebInfo or Release, all which run with optimi
 	SET(linkFlags "-O2 ")
 endif()
 
-set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=33554432")
+set(linkFlags "${linkFlags} -s NO_EXIT_RUNTIME=1 -s FULL_ES2=1 -s WARN_ON_UNDEFINED_SYMBOLS=1 --memory-init-file 0 -Wno-warn-absolute-paths -s TOTAL_MEMORY=50331648")
 
 set_target_properties(${PROJECT} PROPERTIES LINK_FLAGS "${linkFlags}")