summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZolnai Tamás <tamas.zolnai@collabora.com>2014-07-15 23:15:08 +0200
committerCaolán McNamara <caolanm@redhat.com>2014-07-21 08:19:19 +0000
commit830aa8da71f798b83befd392c7773d81c142510e (patch)
tree22bd7742262f6585e8c3ea19207f4e9aba13f355
parent99c6a8eb358003b9a5663988e475509cf77cc583 (diff)
fdo#81182: glTF window size does not match with the scene size after resizing
When viewport changed it is necessary to resize the whole scene. Calling releasFbo removes size dependent objects and triggers creating the new ones with the new size. Change-Id: Ibd8be1e92be92da31add4a30aa799f0995b1cc88 (cherry picked from commit 3cd7c0f6b6cdb8ebc6c72d2ffe1e0bc18968e27b) Reviewed-on: https://gerrit.libreoffice.org/10352 Reviewed-by: Caolán McNamara <caolanm@redhat.com> Tested-by: Caolán McNamara <caolanm@redhat.com>
-rw-r--r--external/libgltf/UnpackedTarball_libgltf.mk1
-rw-r--r--external/libgltf/pathces/fix_rendering_of_resized_model.patch71
2 files changed, 72 insertions, 0 deletions
diff --git a/external/libgltf/UnpackedTarball_libgltf.mk b/external/libgltf/UnpackedTarball_libgltf.mk
index 176c1d15246b..a7565ea09efc 100644
--- a/external/libgltf/UnpackedTarball_libgltf.mk
+++ b/external/libgltf/UnpackedTarball_libgltf.mk
@@ -16,6 +16,7 @@ $(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/fix_rendering_of_resized_model.patch \
))
# vim: set noet sw=4 ts=4:
diff --git a/external/libgltf/pathces/fix_rendering_of_resized_model.patch b/external/libgltf/pathces/fix_rendering_of_resized_model.patch
new file mode 100644
index 000000000000..57af9f9e08eb
--- /dev/null
+++ b/external/libgltf/pathces/fix_rendering_of_resized_model.patch
@@ -0,0 +1,71 @@
+diff -ur libgltf.org/src/RenderScene.cpp libgltf/src/RenderScene.cpp
+--- libgltf.org/src/RenderScene.cpp 2014-07-15 17:33:12.615059856 +0200
++++ libgltf/src/RenderScene.cpp 2014-07-15 22:24:20.862307666 +0200
+@@ -639,7 +639,7 @@
+ , pScene(0)
+ , mLoadJson()
+ , mBindBufferMap()
+- , viewport()
++ , mCurrentViewport()
+ , fbo()
+ , mEnableTransparency(false)
+ , mEnableRotation(false)
+@@ -1555,10 +1555,9 @@
+ pFPSCounter->timeStamp();
+ }
+ #endif
+- viewport = *((glTFViewport*)lpParam);
+ {
+ TRACE_TIME;
+- status = initSSAAFrameBuf(&viewport);
++ status = initSSAAFrameBuf(((glTFViewport*)lpParam));
+ if (LIBGLTF_SUCCESS != status)
+ return status;
+ }
+@@ -1569,6 +1568,15 @@
+ {
+ if (0 == pViewport->width)
+ return LIBGLTF_INVALID_SIZE;
++
++ // When viewport changes we need to release fbo and create a new one
++ if( mCurrentViewport.x != pViewport->x || mCurrentViewport.y != pViewport->y ||
++ mCurrentViewport.width != pViewport->width || mCurrentViewport.height != pViewport->height )
++ {
++ fbo.releaseFbo();
++ mCurrentViewport = *pViewport;
++ }
++
+ #if DEFAULT_VIEW
+ unsigned int width = SSAA * DEFAULT_VIEW;
+ unsigned int height = (SSAA * DEFAULT_VIEW *
+@@ -1730,14 +1738,14 @@
+ #if ENABLE_FPS
+ if (0 != pFPSCounter)
+ {
+- pFPSCounter->printFPS(&viewport);
++ pFPSCounter->printFPS(&mCurrentViewport);
+ }
+ #endif
+
+ {
+ TRACE_TIME;
+- glViewport(viewport.x, viewport.y,
+- viewport.width, viewport.height);
++ glViewport(mCurrentViewport.x, mCurrentViewport.y,
++ mCurrentViewport.width, mCurrentViewport.height);
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
+ fbo.renderFboTexture();
+ }
+Only in libgltf/src: RenderScene.cpp~
+diff -ur libgltf.org/src/RenderScene.h libgltf/src/RenderScene.h
+--- libgltf.org/src/RenderScene.h 2014-07-15 17:33:12.615059856 +0200
++++ libgltf/src/RenderScene.h 2014-07-15 22:18:01.306324010 +0200
+@@ -349,7 +349,7 @@
+ std::map<std::string, BindBufferInfo> mBindBufferMap;
+
+ static ShaderProgram mShaderProgram;
+- glTFViewport viewport;
++ glTFViewport mCurrentViewport;
+ RenderWithFBO fbo;
+
+ bool mEnableTransparency;