summaryrefslogtreecommitdiff
path: root/avmedia
diff options
context:
space:
mode:
authorZolnai Tamás <tamas.zolnai@collabora.com>2014-08-29 11:55:23 +0200
committerZolnai Tamás <tamas.zolnai@collabora.com>2014-08-29 05:01:31 -0500
commita60cc580212e2770c3aef7decfa09b64d4a3e52f (patch)
treebe5c8fcbf6e48dbf6194188421bdb92efa6e1b88 /avmedia
parent45dfbdca6a9afba1a6aef21623ec025ded635a4d (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>
Diffstat (limited to 'avmedia')
-rw-r--r--avmedia/source/opengl/oglframegrabber.hxx4
-rw-r--r--avmedia/source/opengl/oglplayer.cxx16
-rw-r--r--avmedia/source/opengl/oglplayer.hxx6
-rw-r--r--avmedia/source/opengl/oglwindow.cxx36
-rw-r--r--avmedia/source/opengl/oglwindow.hxx6
5 files changed, 36 insertions, 32 deletions
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