Conversation
Soon, Google Play will require apps targeting API 35+ to be compatible with 16 KB page sizes, which is achieved by updating the NDK version.
OpenGL contexts normally can't be nested. Previously, when the main renderer for the DemoRunner was set to OpenGL, we would forcibly reset the engine to the software renderer when displaying any heavyweight demo, including the OpenGL demos. 19061e6 introduced a regression, where the rendering engine was no longer reset on Windows, so displaying an OpenGL demo while the global renderer was also set to OpenGL would cause an assertion to fire in the OpenGL Graphics context, after which rendering would fail. With this change in place, we now fall back to the Direct2D renderer, instead of the software renderer, when displaying a heavyweight demo.
…ntext Fixes a regression introduced in bd26d79 The issue was observed in the DemoRunner when enabling the OpenGL renderer and then switching to the LookAndFeel V1. The cause of the problem was the creation of a secondary OpenGL-backed Graphics instance in the DropShadowEffect. This temporary context could modify the OpenGL context state without restoring the state appropriately on destruction. As a result, when the outer long-lived OpenGL context resumed drawing, properties such as the viewport, bound shader, shader uniform values, and bound framebuffer could all be incorrect.
JUCE convention is that BitmapData holds the lines of the image ordered from top to bottom, but OpenGL orders lines in the reverse direction. By returning a negative line stride, we can iterate lines in the expected order as long as we always increment the current pointer position by the line stride after processing each line.
Previously, this code assumed that a single channel image would always have a pixel stride of 1. For image types where this assumption did not hold, such as OpenGL, this function would produce incorrect results.
This is intended to fix an issue where drawing a component snapshot into a temporary OpenGL image can fail, because the GL context may not be bound.
In the DemoRunner, switching to and fro between the Settings tab and the Demo tab displaying the OpenGL demo could lead to GL_INVALID_OPERATION errors. This is because closing the demo shuts down the GL context, destroying resources such as framebuffers. If any Image objects backed by framebuffers outlive the context, they will be invalidated. Component effect images are especially likely to hold onto invalid framebuffer references. With this change in place, images cached by Components will be invalidated when the attached GL context goes out of scope, and will be recreated when the new context is created.
The old name didn't communicate it clearly enough what the parameter was used for. This started to show when alignmentWidth was added.
… macros are defined when error state is checked
…ST3_CAN_REPLACE_VST2 is set With this change in place: - The compatible VST2 ID will be included in the list of compatible classes in the moduleinfo.json. - getCompatibleParameterIds() will be called with the ID of the commpatible VST2 plugin.
…the actual buffer size, even it it does not match any reported available buffer size
This assertion is no longer relevant now that the AudioDeviceManager enforces the maximum buffer size.
…a subsection of the image When syncing from CPU->GPU storage, we currently copy the entire image contents. The contents of the CPU backup completely replace the old GPU image. Therefore, if any pixels need to retain their existing values, we need to read those pixels before overwriting them. This in turn implies that, when a BitmapData refers to a subsection of the image, we should always flush GPU->CPU storage first, so that the subsequent CPU->GPU sync doesn't clobber pixels outside of the BitmapData region with outdated values. It's clear that copying the entire image back and forth could be suboptimal when writing to image subsections, but to optimise this process we'd have to keep track of dirty image regions or similar, which may in turn pessimise more common cases.
…table BitmapData The OpenGL renderer listens for imageDataChanged() to invalidated cached textures. Before this change, the SimpleFFTDemo would display a static (outdated) image on Windows when using the OpenGLRenderer.
…o static function This makes it a bit easier to see exactly which PopupMenu state is used during the calculation, and enforces that no menu state is modified during the call.
Negative wantedY arguments are valid, so we need to be able to differentiate between an unspecified argument and a specified-but-negative argument.
The old implementation had a few problems: - For a target area near but not touching the bottom of the parent area, and a long menu with an initially-visible item halfway through the list, the initially-visible item would sometimes be obscured by the scroller area. The new implementation adjusts the size of the menu to ensure that there's enough additional room for the scroller areas. - For a target area at the very top or very bottom of the target area, the menu would be positioned inconsistently; sometimes it would overlap with the target area, but other times it would be positioned with a gap separating the menu and target area. In the new implementation, if there's not enough room for scrollers to be positioned above/below the target area, the menu will always be positioned so that it touches but does not overlap the target area. - The initially-selected item would normally be positioned as close as possible to the target area, but this wasn't always applied consistently for long menus, and the menu would sometimes only be scrolled enough to make the item visible at the end of the menu furthest from the target area. In the new implementation, the initially-visible item will always be positioned on top of the target area, or adjacent to it, depending on the available space.
initWithWindowScene appears to create a window with no area if the provided scene is null. As a fallback, creating a window without an associated scene still returns usable bounds.
…is set on the edit controller
This partly reverts commit ad28684. Prior to that change, getBrush() would always end up calling SetTransform on gradient/image brushes. This is important because, when drawing text, we combine the current brush transform with the text transform. If we don't reset the brush transform each time, these transforms end up accumulating across frames.
The issue was reproducible by opening a plugin window in the AudioPluginHost.
The changes were not cleared between frames, so they could end up accumulating and causing floating-point exceptions.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Merges
8.0.10intominimal_master.Most changes merged without conflicts. Here's the conflicts that had to be handled manually:
JuceHelperTargets.cmake: modified slightly to keep our modifications removing-Wfloat-equaland-Wmissing-field-initializerswarnings.JuceUtils.cmake:852-856: modifications originally by Zane to work around the windows command-line length limit. The JUCE code in this section has changed significantly, so I modified Zane's code a bit. I believe it does the same thing, and it certainly lets the builds work in the cloud which was the main reason for those changes in the first place.