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 /avmedia | |
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>
Diffstat (limited to 'avmedia')
-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 |
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 |