From d431986bd49081581e86444af124d1d2ce90a407 Mon Sep 17 00:00:00 2001 From: Zolnai Tamás Date: Fri, 29 Aug 2014 22:41:26 +0200 Subject: Upgrade libgltf to 0.0.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit News in this version: - Solve some limitations of walkthrough mode (fdo#81425) - Multisampling (better rendering quality, mainly at the edges) - Better error handling (no crash in case of invalid input file) Reviewed-on: https://gerrit.libreoffice.org/11179 Reviewed-by: Zolnai Tamás Tested-by: Zolnai Tamás Conflicts: download.lst external/libgltf/UnpackedTarball_libgltf.mk external/libgltf/pathces/append_shader_version.patch external/libgltf/pathces/missing_include.patch vcl/source/opengl/OpenGLContext.cxx Change-Id: I46fdf56b00476614487fbcc04178e43e33a01794 Reviewed-on: https://gerrit.libreoffice.org/11194 Reviewed-by: Christian Lohmaier Tested-by: Christian Lohmaier --- RepositoryExternal.mk | 8 ----- avmedia/source/opengl/oglframegrabber.hxx | 4 --- avmedia/source/opengl/oglplayer.cxx | 16 ++++++++-- avmedia/source/opengl/oglplayer.hxx | 6 ++-- avmedia/source/opengl/oglwindow.cxx | 36 +++++++++++---------- avmedia/source/opengl/oglwindow.hxx | 6 +--- configure.ac | 2 +- download.lst | 4 +-- external/libgltf/ExternalProject_libgltf.mk | 2 ++ external/libgltf/UnpackedTarball_libgltf.mk | 2 -- .../libgltf/pathces/append_shader_version.patch | 37 ---------------------- external/libgltf/pathces/missing_include.patch | 11 ------- include/vcl/opengl/OpenGLContext.hxx | 2 ++ vcl/source/opengl/OpenGLContext.cxx | 5 +++ 14 files changed, 48 insertions(+), 93 deletions(-) delete mode 100644 external/libgltf/pathces/append_shader_version.patch delete mode 100644 external/libgltf/pathces/missing_include.patch diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk index cd991084ec35..f194fcbe9510 100644 --- a/RepositoryExternal.mk +++ b/RepositoryExternal.mk @@ -3303,11 +3303,6 @@ $(call gb_LinkTarget_use_external_project,$(1),libgltf) endef -define gb_ExternalProject__use_libgltf -$(call gb_ExternalProject_use_external_project,$(1),libgltf) - -endef - else # SYSTEM_LIBGLTF define gb_LinkTarget__use_libgltf @@ -3316,9 +3311,6 @@ $(call gb_LinkTarget_set_include,$(1),\ $(LIBGLTF_CFLAGS) \ ) $(call gb_LinkTarget_add_libs,$(1),$(LIBGLTF_LIBS)) -$(call gb_LinkTarget_add_defs,$(1),\ - -DSYSTEM_LIBGLTF \ -) endef diff --git a/avmedia/source/opengl/oglframegrabber.hxx b/avmedia/source/opengl/oglframegrabber.hxx index 0d382246fd29..5beb15bcf308 100644 --- a/avmedia/source/opengl/oglframegrabber.hxx +++ b/avmedia/source/opengl/oglframegrabber.hxx @@ -14,11 +14,7 @@ #include #include -#ifdef SYSTEM_LIBGLTF -#include -#else #include -#endif namespace avmedia { namespace ogl { diff --git a/avmedia/source/opengl/oglplayer.cxx b/avmedia/source/opengl/oglplayer.cxx index a052dc9a3a5e..d2e600b1b62b 100644 --- a/avmedia/source/opengl/oglplayer.cxx +++ b/avmedia/source/opengl/oglplayer.cxx @@ -269,6 +269,12 @@ uno::Reference< media::XPlayerWindow > SAL_CALL OGLPlayer::createPlayerWindow( c return uno::Reference< media::XPlayerWindow >(); } + if( !m_aContext.supportMultiSampling() ) + { + SAL_WARN("avmedia.opengl", "Context does not support multisampling!"); + return uno::Reference< media::XPlayerWindow >(); + } + if( !lcl_CheckOpenGLRequirements() ) { SAL_WARN("avmedia.opengl", "Your platform does not have the minimal OpenGL requiremenets!"); @@ -287,7 +293,7 @@ uno::Reference< media::XPlayerWindow > SAL_CALL OGLPlayer::createPlayerWindow( c releaseInputFiles(); if( nRet != 0 ) { - SAL_WARN("avmedia.opengl", "Error occured while parsing *.json file! Error code: " << nRet); + SAL_WARN("avmedia.opengl", "Error occured while setting up the scene! Error code: " << nRet); return uno::Reference< media::XPlayerWindow >(); } // The background color is white by default, but we need to separate the @@ -309,6 +315,12 @@ uno::Reference< media::XFrameGrabber > SAL_CALL OGLPlayer::createFrameGrabber() return uno::Reference< media::XFrameGrabber >(); } + if( !m_aContext.supportMultiSampling() ) + { + SAL_WARN("avmedia.opengl", "Context does not support multisampling!"); + return uno::Reference< media::XFrameGrabber >(); + } + if( !lcl_CheckOpenGLRequirements() ) { SAL_WARN("avmedia.opengl", "Your platform does not have the minimal OpenGL requiremenets!"); @@ -324,7 +336,7 @@ uno::Reference< media::XFrameGrabber > SAL_CALL OGLPlayer::createFrameGrabber() releaseInputFiles(); if( nRet != 0 ) { - SAL_WARN("avmedia.opengl", "Error occured while parsing *.json file! Error code: " << nRet); + SAL_WARN("avmedia.opengl", "Error occured while setting up the scene! Error code: " << nRet); return uno::Reference< media::XFrameGrabber >(); } glClearColor(0.5f, 0.5f, 0.5f, 0.5f); diff --git a/avmedia/source/opengl/oglplayer.hxx b/avmedia/source/opengl/oglplayer.hxx index 52aa395da4ca..465ed6b59825 100644 --- a/avmedia/source/opengl/oglplayer.hxx +++ b/avmedia/source/opengl/oglplayer.hxx @@ -14,11 +14,9 @@ #include #include #include -#ifdef SYSTEM_LIBGLTF -#include -#else + #include -#endif + #include #include diff --git a/avmedia/source/opengl/oglwindow.cxx b/avmedia/source/opengl/oglwindow.cxx index a770ff593e21..10924839f6ca 100644 --- a/avmedia/source/opengl/oglwindow.cxx +++ b/avmedia/source/opengl/oglwindow.cxx @@ -23,7 +23,6 @@ OGLWindow::OGLWindow( glTFHandle& rHandle, OpenGLContext& rContext, Window& rEve , meZoomLevel( media::ZoomLevel_ORIGINAL ) , m_aLastMousePos(Point(0,0)) , m_bIsOrbitMode( false ) - , m_fCameraDistance(0.0) { } @@ -267,15 +266,15 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent) glm::vec3 vMove = vView-vEye; vMove = glm::normalize(vMove); vMove *= 25.0f; - glm::vec3 vStrafe = glm::cross(vView-vEye, vUp); + glm::vec3 vStrafe = glm::cross(vMove, vUp); vStrafe = glm::normalize(vStrafe); vStrafe *= 25.0f; - glm::vec3 vMup = glm::cross(vView-vEye,glm::vec3(1.0f,0.0f,0.0f) ); - vMup = glm::normalize(vMup); - vMup *= 25.0f; + glm::vec3 vMup = vUp * 25.0f; if( !m_bIsOrbitMode ) { + if(nCode == KEY_E)vMoveBy += vMup*(0.0005f*fModelSize); + if(nCode == KEY_Q)vMoveBy -= vMup*(0.0005f*fModelSize); if(nCode == KEY_W)vMoveBy += vMove*(0.0005f*fModelSize); if(nCode == KEY_S)vMoveBy -= vMove*(0.0005f*fModelSize); if(nCode == KEY_A)vMoveBy -= vStrafe*(0.0005f*fModelSize); @@ -283,15 +282,24 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent) } else { - if(nCode == KEY_E)vMoveBy += vMove*(0.0005f*fModelSize); - if(nCode == KEY_Q)vMoveBy -= vMove*(0.0005f*fModelSize); + bool bZoomIn = false; + bool bZoomOut = false; + if(nCode == KEY_E) + { + vMoveBy += vMove*(0.0005f*fModelSize); + bZoomIn = true; + } + if(nCode == KEY_Q) + { + vMoveBy -= vMove*(0.0005f*fModelSize); + bZoomOut = true; + } // Limit zooming in orbit mode - m_fCameraDistance += vMoveBy.z; - if ((m_fCameraDistance < 0.5 * fModelSize && vMoveBy.z < 0.0 ) || - (m_fCameraDistance > 2 * fModelSize && vMoveBy.z > 0.0 )) + float fCameraDistFromModelGlobe = glm::length(vEye + vMoveBy - vView) - fModelSize / 2.0f; + if ((fCameraDistFromModelGlobe < 0.5 * fModelSize && bZoomIn ) || + (fCameraDistFromModelGlobe > 2 * fModelSize && bZoomOut )) { - m_fCameraDistance -= vMoveBy.z; vMoveBy = glm::vec3(0.0); } } @@ -333,12 +341,6 @@ IMPL_LINK(OGLWindow, CameraHandler, VclWindowEvent*, pEvent) { gltf_orbit_mode_start(&m_rHandle); m_bIsOrbitMode = true; - // Set default camera distance - glm::vec3 vEye; - glm::vec3 vView; - glm::vec3 vUp; - gltf_get_camera_pos(&m_rHandle, &vEye,&vView,&vUp); - m_fCameraDistance = vEye.z - gltf_get_model_center_pos(&m_rHandle)->z - (gltf_get_model_size(&m_rHandle)/2.0); } } else if(nCode == KEY_F) diff --git a/avmedia/source/opengl/oglwindow.hxx b/avmedia/source/opengl/oglwindow.hxx index ae86083026d3..8b158138ab5e 100644 --- a/avmedia/source/opengl/oglwindow.hxx +++ b/avmedia/source/opengl/oglwindow.hxx @@ -17,11 +17,8 @@ #include #include -#ifdef SYSTEM_LIBGLTF -#include -#else #include -#endif + #include #include @@ -77,7 +74,6 @@ private: com::sun::star::media::ZoomLevel meZoomLevel; Point m_aLastMousePos; bool m_bIsOrbitMode; - double m_fCameraDistance; }; } // namespace ogl diff --git a/configure.ac b/configure.ac index b6e81245bb91..9cd589b67910 100644 --- a/configure.ac +++ b/configure.ac @@ -10572,7 +10572,7 @@ if test "x$enable_gltf" != "xno" -a $_os != Darwin -a $_os != iOS -a $_os != And AC_DEFINE(HAVE_FEATURE_GLTF,1) if test "$with_system_libgltf" = "yes"; then SYSTEM_LIBGLTF=TRUE - PKG_CHECK_MODULES( LIBGLTF, libgltf-0.0 ) + PKG_CHECK_MODULES( LIBGLTF, [libgltf-0.0 >= 0.0.1] ) else BUILD_TYPE="$BUILD_TYPE LIBGLTF" fi diff --git a/download.lst b/download.lst index bc2b3834027f..f413a57bf2d0 100644 --- a/download.lst +++ b/download.lst @@ -87,8 +87,8 @@ export LIBATOMIC_OPS_TARBALL := libatomic_ops-7_2d.zip export LIBEOT_MD5SUM := aa24f5dd2a2992f4a116aa72af817548 export LIBEOT_TARBALL := libeot-0.01.tar.bz2 export LIBEXTTEXTCAT_TARBALL := ae330b9493bd4503ac390106ff6060d7-libexttextcat-3.4.3.tar.bz2 -export LIBGLTF_MD5SUM := ca5436e916bfe70694adfe2607782786 -export LIBGLTF_TARBALL := libgltf-0.0.0.tar.bz2 +export LIBGLTF_MD5SUM := 03821c9c827e647fb5fedb12496e0067 +export LIBGLTF_TARBALL := libgltf-0.0.1.tar.bz2 export LIBLANGTAG_TARBALL := 36271d3fa0d9dec1632029b6d7aac925-liblangtag-0.5.1.tar.bz2 export LIBXMLSEC_TARBALL := 1f24ab1d39f4a51faf22244c94a6203f-xmlsec1-1.2.14.tar.gz export LIBXML_TARBALL := 9c0cfef285d5c4a5c80d00904ddab380-libxml2-2.9.1.tar.gz diff --git a/external/libgltf/ExternalProject_libgltf.mk b/external/libgltf/ExternalProject_libgltf.mk index 548487b7edf5..62e25a303f13 100644 --- a/external/libgltf/ExternalProject_libgltf.mk +++ b/external/libgltf/ExternalProject_libgltf.mk @@ -63,6 +63,8 @@ $(call gb_ExternalProject_get_state_target,libgltf,build) : export CPPFLAGS='$(libgltf_CPPFLAGS)' \ && export PKG_CONFIG="" \ && ./configure \ + --disable-shared \ + --enable-static \ --with-pic \ --disable-debug \ --disable-werror \ diff --git a/external/libgltf/UnpackedTarball_libgltf.mk b/external/libgltf/UnpackedTarball_libgltf.mk index 42c821bbe819..176c1d15246b 100644 --- a/external/libgltf/UnpackedTarball_libgltf.mk +++ b/external/libgltf/UnpackedTarball_libgltf.mk @@ -16,8 +16,6 @@ $(eval $(call gb_UnpackedTarball_set_patchflags,libgltf,--binary)) $(eval $(call gb_UnpackedTarball_set_patchlevel,libgltf,1)) $(eval $(call gb_UnpackedTarball_add_patches,libgltf,\ - external/libgltf/pathces/missing_include.patch \ - external/libgltf/pathces/append_shader_version.patch \ )) # vim: set noet sw=4 ts=4: diff --git a/external/libgltf/pathces/append_shader_version.patch b/external/libgltf/pathces/append_shader_version.patch deleted file mode 100644 index 27f0cc66ee36..000000000000 --- a/external/libgltf/pathces/append_shader_version.patch +++ /dev/null @@ -1,37 +0,0 @@ -diff -ur libgltf.org/src/Shaders.cpp libgltf/src/Shaders.cpp ---- libgltf.org/src/Shaders.cpp 2014-08-18 09:19:48.323955939 +0200 -+++ libgltf/src/Shaders.cpp 2014-08-18 09:20:46.711953465 +0200 -@@ -11,6 +11,7 @@ - - #include - #include -+#include - - namespace libgltf - { -@@ -166,7 +167,24 @@ - unsigned int shaderId) - { - GLint iGLSize = iSize; -- glShaderSource(shaderId, 1, &pShader, &iGLSize); -+ if( strstr(pShader,"#version") == 0 ) -+ { -+ const GLchar* aSources[] = { -+ "#version 130\n", -+ pShader, -+ }; -+ -+ const GLint aSizes[] = { -+ strlen("#version 130\n"), -+ iGLSize, -+ }; -+ -+ glShaderSource(shaderId, 2, &aSources[0], &aSizes[0]); -+ } -+ else -+ { -+ glShaderSource(shaderId, 1, &pShader, &iGLSize); -+ } - glCompileShader(shaderId); - int iStatus = 0; - glGetShaderiv(shaderId, GL_COMPILE_STATUS, &iStatus); diff --git a/external/libgltf/pathces/missing_include.patch b/external/libgltf/pathces/missing_include.patch deleted file mode 100644 index 8b05224be781..000000000000 --- a/external/libgltf/pathces/missing_include.patch +++ /dev/null @@ -1,11 +0,0 @@ -diff -ur libgltf.org/src/Shaders.cpp libgltf/src/Shaders.cpp ---- libgltf.org/src/Shaders.cpp 2014-08-05 11:40:30.387537876 +0200 -+++ libgltf/src/Shaders.cpp 2014-08-05 11:41:13.887536123 +0200 -@@ -10,6 +10,7 @@ - #include "Shaders.h" - - #include -+#include - - namespace libgltf - { diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx index 8a7eb5597da7..f1e0bd28d212 100644 --- a/include/vcl/opengl/OpenGLContext.hxx +++ b/include/vcl/opengl/OpenGLContext.hxx @@ -166,6 +166,8 @@ public: return mbInitialized; } + bool supportMultiSampling() const; + static SystemWindowData generateWinData(Window* pParent); private: SAL_DLLPRIVATE bool initWindow(); diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx index 974f9130535f..338edc32054a 100644 --- a/vcl/source/opengl/OpenGLContext.cxx +++ b/vcl/source/opengl/OpenGLContext.cxx @@ -833,4 +833,9 @@ void OpenGLContext::show() m_pWindow->Show(); } +bool OpenGLContext::supportMultiSampling() const +{ + return m_aGLWin.bMultiSampleSupported; +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit v1.2.3