office-gobmx/slideshow
Mike Kaganski e5b18c7d00 Make slideshow objects' debugging semi-transparency and shift conditional
It was introduced in commit cfd7bf7f6e
(INTEGRATION: CWS presfixes12 (1.1.2); FILE ADDED, 2007-07-17); and
back then, it was guarded by VERBOSE define. The VERBOSE condition
was replaced by OSL_DEBUG_LEVEL >= 2 condition later in commit
912e36e911 (Remove VERBOSE part 3,
2012-04-10); and then, it was completely dropped in commit
e5ec630414 (stop inclduing
canvas/verbosetraces.hxx and canvas/debug.hxx, 2015-08-11).

But this code is definitely harmful by default, when an unaware
developer (like myself) tries to debug an animation problem, and
suddenly sees a very different problem in the debug build (the shift
and transparency of objects), which obviously is a new regression in
master, but it can't be bisected using bibisect repos, which makes
you to question your sanity, until you realize that it must be some
debug-only feature.

Thorsten wrote on IRC:
> the semi-transparency & shifting is needed for actually noticing
> what's behind (shapes get moved to sprites, then erased from the
> static canvas, then moved around)
> so I believe it's useful debugging tools, but of course should not
> randomly enable for normal dev builds

So use environment variable to control this behavior-changing code.

Change-Id: I493cdde26c95fdde4a5d542a0bdad8e329fdfda8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173965
Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
Tested-by: Jenkins
2024-09-26 14:48:13 +02:00
..
inc/pch simplify and modernise ScopedBitmapAccess 2023-12-07 09:32:14 +01:00
opengl Remove unused 'numTiles' from glitter vertex shader 2024-06-03 15:18:08 +02:00
qa loplugin:ostr in slideshow 2024-05-13 14:44:04 +02:00
source Make slideshow objects' debugging semi-transparency and shift conditional 2024-09-26 14:48:13 +02:00
test c++20: use std::erase(_if) instead of std::remove(_if)+erase (part 11) 2023-11-19 13:41:30 +01:00
util
CppunitTest_slideshow.mk
CppunitTest_slideshow_engine.mk
IwyuFilter_slideshow.yaml
Library_OGLTrans.mk Drop remaining boost/shared_pointer debug functionality 2024-03-21 12:28:32 +01:00
Library_slideshow.mk Drop remaining boost/shared_pointer debug functionality 2024-03-21 12:28:32 +01:00
Makefile
manifest.txt
Module_slideshow.mk
Package_opengl.mk
README.md

Impress Slideshow Engine

3D Transitions

The 3D transitions are slideshow transition engine using OpenGL and are located in slideshow/source/engine/OGLTrans/. They were initially written by GSOC student Shane.M.Mathews. Radek has later polished the code a bit, added few new 3D transitions, added infrastructure for vertex and fragment shaders. Wrote few transitions with fragment shader too.

Physics Animation Effects

Physics animation effects are simulated by external 2d physics engine library Box2D. They don't directly call Box2D functions but instead use the wrapper in:

  • slideshow/source/inc/box2dtools.hxx
  • slideshow/source/engine/box2dtools.cxx

The wrapper has two corresponding classes to manage the Box2D world and Box2D bodies.

When a physics animation starts, a Box2DWorld is initiated and populated with every shape that is part of the foreground (which are shapes that do not belong to the master slide and not a background shape).

After creation until the end of the slide (not the whole slideshow) the Box2D World isn't destroyed and reused. But the bodies that represent the shapes in the slide get destroyed when there's a point in time that there's no physics animation in progress. And recreated when another physics animation starts.

If there are multiple physics animations in parallel only one of them takes the role of stepping through the simulation.

If there are other animation effects that go in parallel which change the shape position, rotation, or visibility - they also report the change to Box2DWorld. These updates are collected in a queue in Box2DWorld and processed before stepping through the simulation. To achieve convincing results these updates are performed by setting the Box2D body's linear velocity or angular velocity instead of setting directly it's position or rotation.