diff options
author | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-08-29 11:55:23 +0200 |
---|---|---|
committer | Zolnai Tamás <tamas.zolnai@collabora.com> | 2014-08-29 05:01:31 -0500 |
commit | a60cc580212e2770c3aef7decfa09b64d4a3e52f (patch) | |
tree | be5c8fcbf6e48dbf6194188421bdb92efa6e1b88 | |
parent | 45dfbdca6a9afba1a6aef21623ec025ded635a4d (diff) |
Upgrade libgltf to 0.0.1
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)
Change-Id: I46fdf56b00476614487fbcc04178e43e33a01794
Reviewed-on: https://gerrit.libreoffice.org/11179
Reviewed-by: Zolnai Tamás <tamas.zolnai@collabora.com>
Tested-by: Zolnai Tamás <tamas.zolnai@collabora.com>
-rw-r--r-- | RepositoryExternal.mk | 8 | ||||
-rw-r--r-- | avmedia/source/opengl/oglframegrabber.hxx | 4 | ||||
-rw-r--r-- | avmedia/source/opengl/oglplayer.cxx | 16 | ||||
-rw-r--r-- | avmedia/source/opengl/oglplayer.hxx | 6 | ||||
-rw-r--r-- | avmedia/source/opengl/oglwindow.cxx | 36 | ||||
-rw-r--r-- | avmedia/source/opengl/oglwindow.hxx | 6 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | download.lst | 4 | ||||
-rw-r--r-- | external/libgltf/UnpackedTarball_libgltf.mk | 2 | ||||
-rw-r--r-- | external/libgltf/patches/append_shader_version.patch | 37 | ||||
-rw-r--r-- | external/libgltf/patches/missing_include.patch | 11 | ||||
-rw-r--r-- | include/vcl/opengl/OpenGLContext.hxx | 2 | ||||
-rw-r--r-- | vcl/source/opengl/OpenGLContext.cxx | 6 |
13 files changed, 47 insertions, 93 deletions
diff --git a/RepositoryExternal.mk b/RepositoryExternal.mk index 05e1e058836d..1350449ec50e 100644 --- a/RepositoryExternal.mk +++ b/RepositoryExternal.mk @@ -3352,11 +3352,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 @@ -3365,9 +3360,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 <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/media/XFrameGrabber.hpp> -#ifdef SYSTEM_LIBGLTF -#include <libgltf/libgltf.h> -#else #include <libgltf.h> -#endif namespace avmedia { namespace ogl { diff --git a/avmedia/source/opengl/oglplayer.cxx b/avmedia/source/opengl/oglplayer.cxx index ff766e3b3626..0b7e2424abc2 100644 --- a/avmedia/source/opengl/oglplayer.cxx +++ b/avmedia/source/opengl/oglplayer.cxx @@ -262,6 +262,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!"); @@ -280,7 +286,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 @@ -302,6 +308,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!"); @@ -317,7 +329,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 75e2964475fa..e7a4ecce98b1 100644 --- a/avmedia/source/opengl/oglplayer.hxx +++ b/avmedia/source/opengl/oglplayer.hxx @@ -14,11 +14,9 @@ #include <cppuhelper/basemutex.hxx> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/media/XPlayer.hpp> -#ifdef SYSTEM_LIBGLTF -#include <libgltf/libgltf.h> -#else + #include <libgltf.h> -#endif + #include <vcl/opengl/OpenGLContext.hxx> #include <vcl/timer.hxx> diff --git a/avmedia/source/opengl/oglwindow.cxx b/avmedia/source/opengl/oglwindow.cxx index 31ee3831c852..1cbc86caaa83 100644 --- a/avmedia/source/opengl/oglwindow.cxx +++ b/avmedia/source/opengl/oglwindow.cxx @@ -22,7 +22,6 @@ OGLWindow::OGLWindow( glTFHandle& rHandle, OpenGLContext& rContext, Window& rEve , m_bVisible ( false ) , m_aLastMousePos(Point(0,0)) , m_bIsOrbitMode( false ) - , m_fCameraDistance(0.0) { } @@ -254,15 +253,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); @@ -270,15 +269,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); } } @@ -320,12 +328,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 0802bb3afeb7..5078ebedfb0b 100644 --- a/avmedia/source/opengl/oglwindow.hxx +++ b/avmedia/source/opengl/oglwindow.hxx @@ -17,11 +17,8 @@ #include <com/sun/star/media/XPlayerWindow.hpp> #include <com/sun/star/media/ZoomLevel.hpp> -#ifdef SYSTEM_LIBGLTF -#include <libgltf/libgltf.h> -#else #include <libgltf.h> -#endif + #include <vcl/opengl/OpenGLContext.hxx> #include <vcl/syschild.hxx> @@ -76,7 +73,6 @@ private: bool m_bVisible; Point m_aLastMousePos; bool m_bIsOrbitMode; - double m_fCameraDistance; }; } // namespace ogl diff --git a/configure.ac b/configure.ac index bceb70f73d72..93a75985517c 100644 --- a/configure.ac +++ b/configure.ac @@ -10591,7 +10591,7 @@ if test "x$enable_gltf" != "xno" -a $_os != iOS -a $_os != Android; then 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 5c7b88fcb61b..af3a23c3f6f8 100644 --- a/download.lst +++ b/download.lst @@ -89,8 +89,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 := 10d61fbaa6a06348823651b1bd7940fe-libexttextcat-3.4.4.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/UnpackedTarball_libgltf.mk b/external/libgltf/UnpackedTarball_libgltf.mk index 34214a2b5a4c..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/patches/missing_include.patch \ - external/libgltf/patches/append_shader_version.patch \ )) # vim: set noet sw=4 ts=4: diff --git a/external/libgltf/patches/append_shader_version.patch b/external/libgltf/patches/append_shader_version.patch deleted file mode 100644 index 27f0cc66ee36..000000000000 --- a/external/libgltf/patches/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 <GL/glew.h> - #include <cstdio> -+#include <cstring> - - 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/patches/missing_include.patch b/external/libgltf/patches/missing_include.patch deleted file mode 100644 index 8b05224be781..000000000000 --- a/external/libgltf/patches/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 <GL/glew.h> -+#include <cstdio> - - namespace libgltf - { diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx index 8faaf7b71c2d..699fb296b466 100644 --- a/include/vcl/opengl/OpenGLContext.hxx +++ b/include/vcl/opengl/OpenGLContext.hxx @@ -172,6 +172,8 @@ public: return mbInitialized; } + bool supportMultiSampling() const; + static SystemWindowData generateWinData(Window* pParent); private: diff --git a/vcl/source/opengl/OpenGLContext.cxx b/vcl/source/opengl/OpenGLContext.cxx index 707b0d846c5a..25db6d5dd0a6 100644 --- a/vcl/source/opengl/OpenGLContext.cxx +++ b/vcl/source/opengl/OpenGLContext.cxx @@ -906,4 +906,10 @@ const SystemChildWindow* OpenGLContext::getChildWindow() const return m_pChildWindow; } +bool OpenGLContext::supportMultiSampling() const +{ + return m_aGLWin.bMultiSampleSupported; +} + + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |