Repeating NPOT textures are not guaranteed to be displayed correctly
in GLES2, since the specification does not mandate support for it.
The warning is also displayed in GLES3 projects that are configured
to allow falling back to GLES2.
This could occur when attempting to save project settings when
no scenes or scripts are open (which is common in a brand new project).
(cherry picked from commit 16876bec76)
This changes the types of a big number of variables.
General rules:
- Using `uint64_t` in general. We also considered `int64_t` but eventually
settled on keeping it unsigned, which is also closer to what one would expect
with `size_t`/`off_t`.
- We only keep `int64_t` for `seek_end` (takes a negative offset from the end)
and for the `Variant` bindings, since `Variant::INT` is `int64_t`. This means
we only need to guard against passing negative values in `core_bind.cpp`.
- Using `uint32_t` integers for concepts not needing such a huge range, like
pages, blocks, etc.
In addition:
- Improve usage of integer types in some related places; namely, `DirAccess`,
core binds.
Note:
- On Windows, `_ftelli64` reports invalid values when using 32-bit MinGW with
version < 8.0. This was an upstream bug fixed in 8.0. It breaks support for
big files on 32-bit Windows builds made with that toolchain. We might add a
workaround.
Fixes#44363.
Fixesgodotengine/godot-proposals#400.
Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
inform user in warning message
Co-authored-by: Rémi Verschelde <rverschelde@gmail.com>
Refactor remove plugin from enabled
(cherry picked from commit 2bae31a4df)
- Tweak the dialog messages to be more informative.
- The "Saved N modified resources" dialog is not a warning per se,
so make it more explicit.
(cherry picked from commit 39f9b92f54)
This can be used to tell Godot to run an executable that will run Godot
rather than running Godot directly. This is useful to make Godot start
on the dedicated GPU when using a NVIDIA Optimus setup on Linux:
`prime-run %command%`
The `editor/run/main_run_args` setting declaration was moved to make it
visible in the ProjectSettings documentation.
(cherry picked from commit ce4aa07276)
This makes it possible for external editors to pick up the changes.
Most modern editors should reload the file automatically,
but some older/lightweight editors may ask the user instead
(or only warn after trying to save in the external editor).
This closes#41283.
(cherry picked from commit 0ade686601)
- Make the timeline indicator thicker and with an indicator triangle,
similar to the animation editor timeline.
- Add Space bar shortcut to play/pause the audio preview.
- Only seek when clicking or dragging with the left mouse button,
not other mouse buttons.
(cherry picked from commit a50a81b703)
Fixes#48514 by moving the visibility of these buttons into their own if statement that depends on if scene tree editing is allowed. Previously it was under the script editing setting which is unexpected as it works with nodes and the scene tree.
(cherry picked from commit 10d5d4d3cd)
As a bonus, to have consistency between use Beziers and create insert tracks, use Beziers also gets a default via editor settings that is used when the confirmation dialog is disabled, instead of just falling back to creating non-Bezier tracks.
When using a negative contrast value, the base color will be lightened
to create the derivative colors instead of being darkened.
This can lead to better-looking themes, especially for light themes.
The About button is located in the bottom-right corner of the
project manager.
This allows removing the copyright notice from the window title
(which looked a bit ugly in comparison to other applications).
Previously if more than one Godot editor was running then the debugger of one editor would not work because both editors were trying to connect on the same port.
This commit attempts to fix this by allowing the debugger to change the port at runtime in such cases.
We've been using standard C library functions `memcpy`/`memset` for these since
2016 with 67f65f6639.
There was still the possibility for third-party platform ports to override the
definitions with a custom header, but this doesn't seem useful anymore.
Backport of #48239.
When there is no selection, the camera will center around the
world origin.
This helps people get back to the world center if they haven't added
any nodes yet.
(cherry picked from commit fc055e1993)
When ctrl-clicking in the code editor, the view will now be centered on the function result.
Also replaces a circumstance where goto_line_centered should be used.
(cherry picked from commit 2b775bd698)
- Display a specific error message if the project doesn't have an
`export_presets.cfg` file.
- Display a list of detected export presets if an invalid export
preset name is supplied.
(cherry picked from commit 09f38ea215)
During the development of 3.3, internationalization features were added to allow arbitrary bone and node names.
However, doing so will break all references and existing animation clips for projects upgraded from 3.2
This adds an import setting, enabled by default, but disabled for newly generated .import files which restores the old behavior.
This makes it possible to see whether a scrollbar grabber is at the top
or at the bottom of a scrollbar. Also, if a scrollable area is very
large, this makes it easier to notice that the area can be scrolled
(since the grabber is proportionally very small).
The scrollbar grabbers were also made thicker and slightly more opaque
for better visibility, especially in peripheral vision.
(cherry picked from commit b60b6ddba4)
Its only purpose was to prevent importing CSV files as translations, but it
would still import them as *nothing*, leading to workflow issues.
This is now properly fixed with #47268 which allows disabling the import for
specific files.
(cherry picked from commit 7ed2220928)
* Removes error shown when file is in 'keep' mode
* Display a warning when attempting to open the file
* Closes#47296
(cherry picked from commit 4706297356)
The new CollisionObject gizmo used for custom shapes was used with
higher priority due to alphabetical order and was preventing physical
bones from being displayed in the editor.
Keyframe times shift slowly in imported animations, starting with a zero shift
at the beginning and increasing and becoming erratic slowly farther into an
animation, reaching significant levels at times after about 3 minutes into an
animation. This commit fixes the issue by increasing the precision of the
floating point numbers used for keyframe time calculations. Only the most
significant cases that cause fast accumulation of errors over a short animation
duration are fixed. Other cases that would have a marginal benefit from
switching to double precision numbers are left for another PR/further analysis.
Note that this change has no impact on the runtime performance of games/apps
created using Godot. It only affects the GLTF importer.
Fixes#47127.
(cherry picked from commit 6770a9413b)
The changes made in this commit refresh the URL OptionButton when editor settings are modified.
No need to restart any more for the changes to appear in the Asset Library.
Fix#46977
(cherry picked from commit 6525d74623)
When creating a Windows folder via a Godot's dialog, the extra spaces are not removed which causes problems with Windows. We now remove leading and trailing whitespace when creating a dir.
(cherry picked from commit c8538153b0)
ALT key modifier was hardcoded is node_3d_editor_plugin.cpp and didn't take editor settings into account.
Fix#46973
(cherry picked from commit 31077d875e)
Fix#46961:
This commit correctly initialize capitalization in sub-inspectors (like shaders's sub-inspector in the inspector panel) with the editor settings.
(cherry picked from commit 281f5a4999)
Fixes crash that happened while exporting if zero files were selected
and adds more error handling to EditorExportPlatform class.
(cherry picked from commit 15656d4182)
With smaller arrays/dictionaries, this makes it possible to view all of
an array/dictionary's items on a single page.
Larger values could be used, but make switching between node selections
quite slow, especially on low-end CPUs. They could also be problematic
with complex resource inspectors for arrays/dictionaries that contain
Resources.
This closes https://github.com/godotengine/godot-proposals/issues/2058.
(cherry picked from commit d97d65b184)
- Based on C++11's `atomic`
- Reworked `SafeRefCount` (based on the rewrite by @hpvb)
- Replaced free atomic functions by the new `SafeNumeric<T>`
- Replaced wrong cases of `volatile` by the new `SafeFlag`
- Platform-specific implementations no longer needed
Co-authored-by: Hein-Pieter van Braam-Stewart <hp@tmm.cx>
- Based on C++11's `thread` and `thread_local`
- No more need to allocate-deallocate or check for null
- No pointer anymore, just a member variable
- Platform-specific implementations no longer needed (except for the few cases of non-portable functions)
- Simpler for `NO_THREADS`
- Thread ids are now the same across platforms (main is 1; others follow)
- Based on C++11's `mutex` and `condition_variable`
- No more need to allocate-deallocate or check for null
- No pointer anymore, just a member variable
- Platform-specific implementations no longer needed
- Simpler for `NO_THREADS`
- Based on C++11's `mutex`
- No more need to allocate-deallocate or check for null
- No pointer anymore, just a member variable
- Platform-specific implementations no longer needed
- Simpler for `NO_THREADS`
- `BinaryMutex` added for special cases as the non-recursive version
- `MutexLock` now takes a reference. At this point the cases of null `Mutex`es are rare. If you ever need that, just don't use `MutexLock`.
- `ScopedMutexLock` is dropped and replaced by `MutexLock`, because they were pretty much the same.
The font size of the Find in Files dialog used to get out of sync with
the code editor font size.
The font of the Find in Files dialog is now updated each time there is a
change to the theme. This way, the font size of the Find in Files
results changes in response to the code font size being changed using
Ctrl +/- or using the Editor Settings.
Fixes#35499
(cherry picked from commit 011fdece6d)
This hints the user that the project manager is currently busy
loading the project. This is important for the HTML5 editor as the
current feedback isn't very obvious.
This also removes the unused `_exit_dialog` function.
This adds a new project setting (`physics/common/enable_pause_aware_picking`). It's disabled by default.
When enabled, it changes the way 2D & 3D physics picking behaves in relation to pause:
- When pause is set, every collision object that is hovered or captured (3D only) is released from that condition, getting the relevant mouse-exit callback., unless its pause mode makes it immune from pause.
- During the pause. picking only considers collision objects immune from pause, sending input events and enter/exit callbacks to them as expected.
- When pause is left, nothing happens. This is a big difference with the classic behavior, which at this point would process all the input events that have been queued against the current state of the 2D/3D world (in other words, checking them against the current position of the objects instead of those at the time of the events).
Enabling filtering and mipmaps on the editor fonts makes the text
look slightly better. While not as good as SDF-based fonts, it should be
more usable already.
This change impacts the visual script and visual shader editors.
This partially addresses #16220.
This commit adds a view-dependant fade to the 3D viewport grid. It fades out
at steep view angles to hide the solid regions that appear far from the camera.
I also included a fade to hide the grid borders.
I added some improvements to the dynamic grid when the camera is in orthogonal mode.
It properly handles zoom now, and the grid center is now set to the intersection point
between the grid plane and the camera forward ray, keeping the grid
always visible.
(cherry picked from commit 73e62dffb9)
Cinematic preview enables the Camera3D preview automatically.
When previewing a Camera3D, the rotation gizmo isn't displayed as
it can't be used.
(cherry picked from commit fa1d853eeb)
This affects the editor scale and font hinting settings which will now
display their automatically chosen value in parentheses.
(cherry picked from commit 57654508c9)
Completely re-write the lightmap generation code:
- Follow the general lightmapper code structure from 4.0.
- Use proper path tracing to compute the global illumination.
- Use atlassing to merge all lightmaps into a single texture (done by @RandomShaper)
- Use OpenImageDenoiser to improve the generated lightmaps.
- Take into account alpha transparency in material textures.
- Allow baking environment lighting.
- Add bicubic lightmap filtering.
There is some minor compatibility breakage in some properties and methods
in BakedLightmap, but lightmaps generated in previous engine versions
should work fine out of the box.
The scene importer has been changed to generate `.unwrap_cache` files
next to the imported scene files. These files *SHOULD* be added to any
version control system as they guarantee there won't be differences when
re-importing the scene from other OSes or engine versions.
This work started as a Google Summer of Code project; Was later funded by IMVU for a good amount of progress;
Was then finished and polished by me on my free time.
Co-authored-by: Pedro J. Estébanez <pedrojrulez@gmail.com>
fix for issue #44282
AABB for collision geometry was being calculated based on parent nodes transform without consideration for collision geometries translation.
Also hopefully clarified logic for selecting starting point for ray cast
(cherry picked from commit 4f171afecc)
Happy new year to the wonderful Godot community!
2020 has been a tough year for most of us personally, but a good year for
Godot development nonetheless with a huge amount of work done towards Godot
4.0 and great improvements backported to the long-lived 3.2 branch.
We've had close to 400 contributors to engine code this year, authoring near
7,000 commit! (And that's only for the `master` branch and for the engine code,
there's a lot more when counting docs, demos and other first-party repos.)
Here's to a great year 2021 for all Godot users 🎆
(cherry picked from commit b5334d14f7)
We should first attempt loading as external files, thus creating a dependency.
Loading as a buffer should only be used as fallback to support manually loading
as PNG or JPEG depending on the defined mimeType.
Fixes#44309, was a regression from #42504.
(cherry picked from commit e268a8e523)
1. show valid directory path when opening editor file dialog
2. keep file name when changing path by entering path
3. add first extension in filter automatically if not given
4. remove directory in recent list if it's not valid anymore
(cherry picked from commit 1f4b1e1488)
The blue accent color is now used, which matches the default editor
accent color.
It doesn't change to match the currently configured accent color
automatically, but doing so would require modifying the CheckButton
class a lot for little benefit.
(cherry picked from commit 114c1a78d9)
- Brighten gizmos when highlighted to make the difference between a
non-highlighted and a highlighted gizmo more visible.
- Tweak the manipulator gizmo size property hint.
(cherry picked from commit 8522ac7711)
The code we had for PVRTexTool doesn't work as it's not compatible with current
PVRTexTool CLI options, and likely hasn't been for years.
Instead, we have our own vendored pvrtccompressor thirdparty library which all
users have thus de-facto been using. This commit moves the compress code to
`modules/pvr` where it belongs.
There's no proper compress function for PVRTC 2-bit format, that's a bug that
will need to be fixed (currently it's compressed as 4-bit format even if you
use Image::FORMAT_PVRTC2).
Fixes#28669.
(cherry picked from commit 1a31274855)
This partially reverts #44041.
Also fix the bogus label about lack of GLES3 support being always shown...
It was meant to be behind a check but I had left it out while testing, and
forgot to put it back.
fix for issue #44231: snap_selected_nodes_to_floor() results in an editor
crash when a child collisionshape has invalid shape object
(cherry picked from commit 52f6e0b5ad)
This only applies to the project manager instance, what driver is used is otherwise
still defined by the project settings for a running game/editor.
Should help users who have issues with buggy GLES3 drivers to still use the project
manager to create and edit GLES2 projects.
Now that the F1 key is available, we can bind Search Help to the key
generally used in other applications to open the help menu.
(cherry picked from commit 42685f514f)
This matches the 2D editor default behavior.
Powers of two are usually better for grid divisions as they are often
used in level design.
(cherry picked from commit 31cf3e2572)
image/gif is not supported in the glTF 2.0 specification,
these files are broken. But let's be lenient...
Fixes#43638.
(cherry picked from commit f70cc0a60e)
Export presets contains the export_path option, to specify the default
export location, but the CLI export option disregarded that, and always
required and export path to be specified.
After this commit, if the export path is not specified in the command,
the one in the preset will be used, erroring only if it's not present or
invalid.
(cherry picked from commit 032a1c5dc3)
Switching between editors now requires holding Ctrl to avoid
conflicts with the new F2 shortcut.
The asset library can now be accessed by pressing Ctrl + F4
on Windows and Linux, or Alt + 4 on macOS.
This partially addresses #38139.
(cherry picked from commit 79e4e26738)
This check was there since the first commit in 2014, but a later feature added in 2018
with #17717 did not properly update the code while adding non animation-related code
in `perform_node_renames`.
Fixes#40532.
(cherry picked from commit d107fd4c9e)
This also makes borders always display in the editor theme,
even if the editor scale is below 100%. Otherwise, "focus" outlines
would vanish when using an editor scale below 100%,
which harms usability.
- The grid is now infinite, it follows the camera.
- The grid is now dynamic, if you zoom in and out, the grid subdivides,
expands, and fades.
- You can now enable grid planes for the XY and YZ planes. Only the flat
XZ plane is enabled by default. Each plane is independently dynamic
of the others.
- The default grid size has been increased to 200, and the maximum
has been increased to 2000. At 1000, the grid mostly looks edgeless.
- If you set the division level max and min to the same value then
the grid does not expand or subdivide, but instead stays the same size
and just follows the camera. Also, if these values are the same,
the bias value does nothing.
- If you want to have Blender-like behavior, set max to 1, min to 0,
and set the bias to a really low value. You may also wish to increase
the grid size if you have a small bias.
Co-authored-by: Aaron Franke <arnfranke@yahoo.com>
- Draw two boxes slightly offset from each other to give the illustion
of a thicker outline.
- Decrease the offset compared to the 3D node's AABB to give a more
accurate representation of its size.
- Make the box fully visible instead of only displaying the corners.
- Draw a x-ray version of the box that's more translucent, but visible
through walls. This helps make the box more visible while still
having a sense of depth.
- Use an orange color similar to the 2D editor.
Undo/redo log messages will now specify the modified node's
name (or number of modified nodes if several were modified).
On top of that, the new position/rotation/scale/pivot offset
will also be mentioned in the message.
(cherry picked from commit 996740de43)
Hide the back sides of the rotation gizmo circles and add a white
outline for better visualization of the rotation "sphere".
This is a 3.2 backport of @JFons work on the master branch; all credit
goes to him.
It can be enabled in the Project Settings
(`rendering/quality/filters/use_debanding`). It's disabled
by default as it has a small performance impact and can make
PNG screenshots much larger (due to how dithering works).
As a result, it should be enabled only when banding is noticeable enough.
Since debanding requires a HDR viewport to work, it's only supported
in the GLES3 backend.
The editor used to only copy drag-dropped files in the File System pane
if the given file was a valid resource, or had a specific file format
(ttf, otf).
With this PR, all drag and dropped files are copied instead, no matter
their extension.
(cherry picked from commit 410b324740)
Treats application unfocus as a mouse release for
TOOL_PAINTING, by finishing the undo state and
resetting the tool. Also sets a flag to prevent extra
lines from being drawn when the application is refocused.
fixes#42398, fixes#24970
(cherry picked from commit 70a4cd1afe)
Batching is mostly separated into a common template which can be used with multiple backends (GLES2 and GLES3 here). Only necessary specifics are in the backend files.
Batching is extended to cover more primitives.
1. _gen_unique_bone_name(Ref<GLTFState> state, const GLTFSkeletonIndex skel_i, const String &p_name) won't return an empty string.
2. String GLTFDocument::_sanitize_bone_name(const String &name) will keep Japanese characters. Like: "全ての親".
3. The sanitize function allows the bone name to be not just alphanumeric. The only required conditions are the ones in add_bone.
> ERR_FAIL_COND(p_name == "" || p_name.find(":") != -1 || p_name.find("/") != -1);
(cherry picked from commit 7b76f8783f)
The glTF 2.0 spec only makes `mimeType` mandatory for `bufferView` image data,
so the previous logic to handle URIs with base64-encoded images could fail if
`mimeType` is undefined.
The logic was documented and refactored to better handle the spec, notably:
- `uri` and `bufferView` are now mutually exclusive, and only the latter fails
if `mimeType` is undefined.
- `uri` with a file path will now respect the `mimeType` if defined, and thus
attempt loading the file with the specified format (even if its extension is
not the one expected for this format). So we can support bad extensions (PNG
data with `.jpg` extension) or custom ones (PNG data in `.img` file for
example).
- `uri` with base64 encoded data will infer MIME type from `data:image/png` or
`data:image/jpeg` if it was not documented in `mimeType` initially.
- `uri` with base64 encoded data, no `mimeType` and `application/octet-stream`
or `application/gltf-buffer` will fall back to trying both PNG and JPEG
loaders.
Fully fixes#33796 (and fixes up #42501).
(cherry picked from commit 2e99d0b26f)
See https://github.com/KhronosGroup/glTF/issues/944 for context on the
application/gltf-buffer MIME type.
The glTF 2.0 spec supports `image/jpeg` and `image/png` which can also be
base64-encoded in buffer URIs.
Fixes#33796.
(cherry picked from commit 34a50310ad)
Entering text will now start searching automatically after 0.25 seconds
have passed (debounce delay).
This removes the need for a separate Search button.
(cherry picked from commit 6055db2a72)
- Make it possible to drag a negative easing or an easing of 0 back to
a positive value.
- Clamp the value between -1000000 and 1000000 to avoid issues
related to infinity.
- Display more decimals for numbers closer to 0, less for large numbers.
- Display trailing zeroes in decimals to avoid flickering when dragging.
This closes#18712 and closes#22079.
(cherry picked from commit 028de11db8)
We originally used `pt_PT` (i.e. Portuguese (Portugal)) to distinguish with
the Brazilian Portuguese variant `pt_BR`, as both are significantly different
and need separate translation files.
But Portugal's Portuguese (or "European Portuguese") is close to the variant
spoken and written in other Portuguese-speaking countries such as Angola and
Mozambique, so it makes sense for users of these countries to also have access
to the European Portuguese translation (at least until translators decide that
adding e.g. `pt_AO` and `pt_MZ` variants would make sense, taking into account
the translation effort that this duplication implies).
Godot's locale matching checks first for the full locale (e.g. `pt_AO`), and
if no translation is found, it checks for the non-regional language code
(`pt`), so this change enables translations for Portuguese speakers outside
Portugal and Brazil.
(cherry picked from commit 1e2f55e273)
Fixed issue where using arrows to change the selected tile would not reach all subtiles in an autotile, only going up to the second to last row and column.
- Use postfix notation for types in the method selector
(for consistency with the editor help).
- Perform a case-insensitive match and replace spaces with underscores
in the search string.
- Fix extraneous space after the `void` return type.
(cherry picked from commit 4390a9d628)