Simply add `uniform float PXO_time;` in the shader's uniforms, and replace all instances of `TIME` with `PXO_time`. This will make the shader animate per frame.
* Initial work on audio layers
* Load ogg audio files
* Fix playback position
* Support mp3 files
* Play audio at the appropriate position when the animation runs, and stop when the pause button is pressed
* Change audio cel textures for the cels where audio is playing
* Fix audio not playing at the appropriate position
* Don't play audio is layer is invisible
* Set the audio layer names to be the imported audio file names
* Import audio from videos
* Export videos with audio
Only works with mp3 for now
* Remove support for ogg audio files as they cannot be saved
At least until I find a way to save them. Wav files will be supported with Godot 4.4
* Fix adding/removing in-between frames breaking the visual indication of audio cels
* Minor code improvements
* Export audio in videos with custom delay
* Support frame delay
* Change the frame where the audio plays at
* Fix crashes when the audio layer has no track
* Remove unneeded cel properties for audio cels
* Pxo loading/saving
* Load audio files from the audio layer properties
* Change the audio driver to Dummy from the Preferences for performance reasons
* Clone audio layers, disable layer merge and FX buttons when an audio layer is selected
* Easily change the playback frame of an audio layer from the right click menu of cel buttons
* Update Translations.pot
* Some code improvements and documentation
* Stop audio from playing when looping, and the audio does not play at the first frame
* Update audio cel buttons when changing the audio of the layer
* Mute audio layer when hiding it mid-play
* Only plays the portion of the sound that corresponds to the specific frame so maybe we should do that as well
When the animation is not running. If it is running, play the sound properly.
* Some code changes to allow for potential negative frames placement for audio
This woud allow audio to be placed in negative frames, which essentially means that audio would start before the first frame. This is not yet supported, however, because I don't know how to make it work with FFMPEG.
Not the most performance-friendly solution, but it works. If users encounter performance issues in the future, we should rewrite this, as it does the same for loop two times.
* Create a custom PixeloramaImage class, initial support for indexed mode
* Convert opened projects and images to indexed mode
* Use shaders for RGB to Indexed conversion and vice versa
* Add `is_indexed` variable in PixeloramaImage
* Basic undo/redo support for indexed mode when drawing
* Make image effects respect indexed mode
* Move code from image effects to ShaderImageEffect instead
* Bucket tool works with indexed mode
* Move and selection tools works with indexed mode
* Brushes respect indexed mode
* Add color_mode variable and some helper methods in Project
Replace hard-coded cases of Image.FORMAT_RGBA8 with `Project.get_image_format()` just in case we want to add more formats in the future
* Add a helper new_empty_image() method to Project
* Set new images to indexed if the project is indexed
* Change color modes from the Image menu
* Fix open image to replace cel
* Load/save indices in pxo files
* Merging layers works with indexed mode
* Layer effects respect indexed mode
* Add an `other_image` parameter to `PixeloramaImage.add_data_to_dictionary()`
* Scale image works with indexed mode
* Resizing works with indexed mode
* Fix non-shader rotation not working with indexed mode
* Minor refactor of PixeloramaImage's set_pixelv_custom()
* Make the text tool work with indexed mode
* Remove print from PixeloramaImage
* Rename "PixeloramaImage" to "ImageExtended"
* Add docstrings in ImageExtended
* Set color mode from the create new image dialog
* Update Translations.pot
* Show the color mode in the project properties dialog