- Transitions now appear in the debug log, including parameters and
timing.
- Most transitions would calculate a fixed number of steps, then work
backwards to figure out the framerate required to fit the duration.
This approach didn't work for shorter durations, as the delay required
for the number of steps would drag out the duration. This has been
fixed by introducing a floor to the number of steps, so that the
framerate is no higher than 60fps.
- Multi-pass transitions were previously calling stepTransition() on
every blit; this would effectively redraw the entire screen ~96 times
a step and blow out the draw time to ~44 seconds. stepTransition() is
now called once per step.
- Blind transitions now cover the full range.
- kTransDissolveBoxySquares and kTransDissolveBoxyRects were swapped.
- kTransDissolveBoxyRects now adjusts for the viewport aspect ratio.
processTransitionEvent skipped passing events to the window manager
and sent them directly to the current window, which is no good since the
event may need to go to another window. It also broke stopping
transitions on click.
The number of steps a transition has is calculated based on the
chunksize. A larger chunksize means quicker execution with a downside
of not having pixel perfect frames.
Ensures that the chunksize is never more than sprite width and height to
avoid floating point division errors.
This is only enabled when the debugflag is used.
Now there is just the composeSurface from the widget. This fixes a bug where the
inner window contents would be blitted with transparency and also eliminates a
redundant copying. Now the border and inner surfaces are composed together on demand.
No new transitions should be broken, but transitions that were broken
before (#9, 10, c. 30-36, 47-48) have not been fixed. All transitions (even
broken ones) should render only in the changed area, however.
This commit introduces several changes to the rendering pipeline.
- Rather than having a window for each score that is played, there is a Stage
in g_director that is only cleared when the upcoming stage has a different
size. This permits transitions still clean transitions between movies.
- Rather than relying upon general surface blitting functions, there is
progress toward a custom blitter than makes working with inks much easier. A
pixelwise function, inkDrawPixel, has been introduced.
- The mask-based approach to incremental rendering has been abandoned, as it
caused performance issues and strange rendering bugs. Now the renderer
operates on a traditional list of dirty rects that must be redrawn.
- QuickDraw shapes are more closely integrated with the renderer, and they do
not require a temporary surface to draw.
These are replaced with more descriptive temporary surfaces that are only active
when a transition is being rendered.
Currently, transitions between movies are temporarily disabled as well. This
will be fixed soon, once there is a window for the stage that exists
independently of the score.