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>
This commit is contained in:
@@ -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
|
||||
|
||||
|
@@ -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 {
|
||||
|
||||
|
@@ -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);
|
||||
|
@@ -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>
|
||||
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
2
external/libgltf/UnpackedTarball_libgltf.mk
vendored
2
external/libgltf/UnpackedTarball_libgltf.mk
vendored
@@ -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:
|
||||
|
@@ -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);
|
11
external/libgltf/patches/missing_include.patch
vendored
11
external/libgltf/patches/missing_include.patch
vendored
@@ -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
|
||||
{
|
@@ -172,6 +172,8 @@ public:
|
||||
return mbInitialized;
|
||||
}
|
||||
|
||||
bool supportMultiSampling() const;
|
||||
|
||||
static SystemWindowData generateWinData(Window* pParent);
|
||||
|
||||
private:
|
||||
|
@@ -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: */
|
||||
|
Reference in New Issue
Block a user