You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
401 lines
15 KiB
401 lines
15 KiB
From d431986bd49081581e86444af124d1d2ce90a407 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Zolnai=20Tam=C3=A1s?= <tamas.zolnai@collabora.com>
|
|
Date: Fri, 29 Aug 2014 22:41:26 +0200
|
|
Subject: [PATCH] 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 <tamas.zolnai@collabora.com>
|
|
Tested-by: Zolnai Tamás <tamas.zolnai@collabora.com>
|
|
|
|
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 <lohmaier+LibreOffice@googlemail.com>
|
|
Tested-by: Christian Lohmaier <lohmaier+LibreOffice@googlemail.com>
|
|
---
|
|
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 cd99108..f194fcb 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 0d38224..5beb15b 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 a052dc9..d2e600b 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 52aa395..465ed6b 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 a770ff5..1092483 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 ae86083..8b15813 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>
|
|
|
|
@@ -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 b6e8124..9cd589b 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 bc2b383..f413a57 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 548487b..62e25a3 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 42c821b..176c1d1 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 27f0cc6..0000000
|
|
--- 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 <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/pathces/missing_include.patch b/external/libgltf/pathces/missing_include.patch
|
|
deleted file mode 100644
|
|
index 8b05224..0000000
|
|
--- 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 <GL/glew.h>
|
|
-+#include <cstdio>
|
|
-
|
|
- namespace libgltf
|
|
- {
|
|
diff --git a/include/vcl/opengl/OpenGLContext.hxx b/include/vcl/opengl/OpenGLContext.hxx
|
|
index 8a7eb55..f1e0bd2 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 974f913..338edc3 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: */
|
|
--
|
|
2.1.0
|
|
|