All Versions
21
Latest Version
Avg Release Cycle
-
Latest Release
-

Changelog History
Page 1

  • v0.8.1 Changes

    ๐Ÿ›  Fixed

    • ๐Ÿ›  Fixed broken InstanceArray::resize and improved its documentation
  • v0.8.0 Changes

    The biggest change in this version is the long awaited redo of our graphics stack, which used to be based on gfx-rs ๐Ÿ›  and is now using wgpu. This gives us more reliability going into the future and fixes many bugs, albeit costing us some portability to low-level hardware (looking at you Pi 3; EDIT: and... Pi 4 as well? o_o ).

    Credit goes out to our wonderful contributors, with special thanks to @jazzfool and @aleokdev, for putting so much work and patience into the graphics stack.

    As there are too many changes to simply list them in the usual fashion, let's look at them topic by topic:

    ๐Ÿ”„ Changes in the graphics API

    With the redo of the graphics stack some parts of the API changes with it, most notably canvases and the shader API.

    Canvas

    First of all, each draw call is now explicitly bound to a Canvas. This means instead of "setting" the active canvas and then drawing implicitly on that canvas you now call canvas.draw(...) or drawable.draw(canvas, ...). And then, once you're done drawing on it, you call canvas.finish(ctx). This helps to keep track of the active canvas and gives you more explicit renderpasses to work with, as Canvas is now no longer a special image that you can draw to, but a wrapped wgpu renderpass, operating naturally on whatever image you pass it, or on the screen buffer itself.

    The downside of this is that it's a bit more verbose and that you have to pass around your canvas to be able to draw.

    Shader

    There's a new struct ShaderParamsallowing you to pass images, samplers and uniforms to shaders. Both ShaderParams and Shaders are now set per Canvas (as well as blend modes and projection matrices).

    Shaders and ShaderParams are created through ShaderBuilder and ShaderParamBuilder respectively, allowing you to only set the parameters you're interested in, without worrying about the rest.

    Uniforms are now no longer created using the gfx! macro. No need to include gfx-rs in your own project, just to be ๐Ÿ‘€ able to create shader uniforms. Now, simply deriving AsStd140 is all you usually need (see the shader examples). At the time of writing you're sadly also required to depend on crevice 0.11 directly, as AsStd140 needs to have it ๐Ÿ‘€ visible globally (and re-exporting it on our side doesn't seem to be enough). If you know a way around this, let us know!

    InstanceArray

    SpriteBatch and MeshBatch have been replaced by InstanceArray, a more generic "batch" that also features internal z-ordering.

    Z-Order

    Before, the order of draws had been determined solely by order of execution. Now DrawParam features an additional field z, to give you control over the order in which draw calls are placed. This works on the global level, but also inside of InstanceArray, when requested.

    Sub-contexts

    ๐Ÿ‘€ Another field that has seen a bit of love is the modularization of contexts. Sub-contexts are now public and can be borrowed and handed around freely. Most module functions used to require Context as a whole. These have, for this reason, now been ๐Ÿ—„ deprecated and directly replaced by methods on the sub-contexts.

    In situations where multiple sub-contexts are needed (one is the creation of audio sources and one the creation of images โ†ช from paths) you can pass the necessary sub-contexts, or instead just pass Context as a whole, just like before, thanks to a little trait-workaround.

    The latter applies to all situations in which you'd need one specific sub-context as well. If you, for some reason, needed or wanted to split the context, then you can pass only the required sub-context. If you didn't split it then you can comfortably hand around and pass the context as a whole, like before.

    โž• Added

    • โž• Added touch event to EventHandler
    • โž• Added access to scancodes in both keyboard events and keyboard context methods, allowing you to make your game portable across the different keyboard letter layouts of different countries
    • Added Canvas::set_scissor_rect allowing you to restrict drawing to a part of your surface
    • Added is_key_just_pressed and is_key_just_released to keyboard context
    • โž• Added an option for transparent windows
    • โž• Added the ability to build your own BlendModes built from the components offered through wgpu's BlendComponent struct
    • ๐Ÿ”ฆ Exposed rodio API for skipping the first part of a sample
    • โž• Added audio and gamepad as crate features, allowing you to disable them if not necessary
    • โž• Added the zip-compression feature (as part of the default features), now allowing the use of zip-files with compression
    • โž• Added Rect::overlaps_circle
    • โž• Added Context::request_quit as a replacement for event::quit
      • Context::request_quit works like event::quit did before, except that instead of directly breaking the game loop it now triggers a quit_event, which allows you to handle all attempts to quit the game in one place.
    • โž• Added a re-export for glam, as ggez is aimed at beginners for whom it's convenient to just have it at hand directly; most people will want/need to use it anyway
    • โž• Added logical_size as optional argument in WindowMode which overrides width/height with a LogicalSize which supports high DPI systems.

    ๐Ÿ”„ Changed

    The following list doesn't repeat the changes already mentioned above.

    • ๐Ÿ˜Œ Relaxed the error type of EventHandler from std::error::Error into std::fmt::Debug, allowing you to use things like anyhow::error as error types as well
    • Made offset on Text relative (I know, I know, we've been changing this around a lot lately, but I hope we're finally done now), as it makes things like centering text on positions easier (see the blend modes example)
    • Also Text is now a first class citizen and can be drawn normally with DrawParam, implementing things like rotation that weren't possible in batched text rendering before
    • ๐Ÿ”„ Changed how bounds on Text work as well as layouting
      • Text::set_bounds now expects width and height of the bounds, but not the destination point, as that's handled through the DrawParam
      • additionally to horizontal alignment vertical alignment is now possible as well
    • ๐Ÿ‘Œ Improved Text performance through better glyph re-use
    • ๐Ÿ”„ Changed the Drawable trait; this will downstream require changes in projects like ggez-egui
    • ๐Ÿ”– Version bumped zip to 0.6, directories to 4.0.1, winit to 0.27.3, image to 0.24 and rodio to 0.16
    • As each Canvas now keeps track of its own projection matrix the screen_coordinates of each Canvas now start out with the same dimensions as the Canvas surface

    ๐Ÿ—„ Deprecated

    • Most of the module level functions, which have been replaced by sub-context methods

    โœ‚ Removed

    • Removed duration_to_f64 and f64_to_duration as the std library now already contains this functionality itself
    • โœ‚ Removed From<tuple> implementations for DrawParam, as they're non-transparent and weird
    • โœ‚ Removed event::quit, as it was replaced by Context::request_quit
    • โœ‚ Removed the ability to update only parts of the DrawParams inside a MeshBatch (now InstanceArray)
      • If you want that ability back let us know! Atm it's staged as "maybe in 0.8.1"

    ๐Ÿ›  Fixed

    ๐Ÿ›  Many graphics bugs that were caused by the use of the discontinued gfx-rs were fixed by the switch to wgpu. The following list is very probably not complete.

    • โ†ช Multisampling on canvases is now no longer based on dirty workarounds, but on the inner workings of wgpu, supporting it naturally
    • ๐Ÿ›  Fixed zip read_dir not working deeper than one level on Windows
    • Fixed a memory leak on set_screen_coordinates on Windows 11
    • ๐Ÿ›  Fixed not being able to take screenshots of anti-aliased targets
  • v0.7.0 Changes

    โž• Added

    • โž• Added filesystem::zip_dir
    • ๐Ÿ“š Expanded/improved documentation

    ๐Ÿ”„ Changed

    • ๐Ÿ™‹ Switched DrawParam::offset behavior back to how it was pre-ggez 0.6; more details in the FAQ
    • ๐Ÿšš Moved some generic functionality from Image to ImageGeneric and from Canvas to CanvasGeneric
    • ๐Ÿšš Also moved some Canvas specific functionality from CanvasGeneric to Canvas
    • 0๏ธโƒฃ Made GameError the implicit default error type for the event handler
    • ๐Ÿ‘ Made TextFragment functions take Into<T> for better usability
    • ๐Ÿ”„ Changed Rust edition to 2021
    • ๐Ÿ”– Version bumped bytemuck to 1.7
    • ๐Ÿ”– Version bumped glam to 0.20

    ๐Ÿ—„ Deprecated

    Nothing

    โœ‚ Removed

    • Multi-sampled canvases (which didn't work at all before) can no longer be created when using the GLES backend. The reason for this is that we finally fixed them via a fragment shader workaround which isn't supported on GLES.

    ๐Ÿ›  Fixed

    • ๐Ÿ›  Finally fixed/implemented MSAA on canvases. As gfx doesn't provide us with the necessary tools to do so directly, the implementation is internally based upon a fragment shader workaround, which doesn't work on GLES.
    • โšก๏ธ Made sure that the bounding box of Mesh is actually updated when Mesh::set_vertices is called

    Broken

    Nothing we're aware of yet

  • v0.6.1 Changes

    โž• Added

    • Allowed ContextBuilder to rename resources folder and resources.zip
    • Added winit re-export
    • Added get_window_position
    • Added an example showcasing animation using keyframe
    • Added support for the TGA image file format (and possibly some others by accident as well)
    • Added methods to access sprites inside of a SpriteBatch directly

    ๐Ÿ”„ Changed

    • MeshBatch::dimensions now returns a rectangle containing all of its mesh instances (instead of simply returning the dimensions of the underlying single mesh, as before)
      • Drawing a MeshBatch with an offset != (0,0) results in such dimensions being calculated (just like in SpriteBatch), which can be expensive, but leads to the offset being interpreted as a relative offset, instead of an absolute one
    • Changed mouse move callback a little: it now returns the difference in movement relative to the last callback, not the mouse position at the end of the previous frame
    • Most of the filesystem functions now take &Context instead of a mutable one
    • Version bumped old_school_gfx_glutin_ext to 0.27
    • Version bumped glutin to 0.27
    • Version bumped winit to 0.25
    • Version bumped glam to 0.17.3

    ๐Ÿ—„ Deprecated

    Nothing

    โœ‚ Removed

    Nothing

    ๐Ÿ›  Fixed

    • fixed color transformation from linear color back to sRGB
    • internal folder structure of the resources.zip file is now resolved correctly on Windows
    • fixed mouse::delta: it now actually returns the difference in mouse position relative to the previous frame instead of the raw mouse feedback it returned until now

    Broken

    • bumping our dependencies on a patch release is technically a breaking change, sry for that
  • v0.6.0 Changes

    โž• Added

    • Added MeshBatch
    • Added a Premultiplied blend mode, which greatly improves Canvas usability
    • Added a CustomError variant to GameError.
    • Added function to allow custom gamepad definitions
    • Added function to fetch raw window
    • Added function to set window position on the screen
    • Added function to get supported resolutions of the current monitor
    • Added generators for rounded rectangle meshes
    • Tried to make more error types conveniently comply with std::error::Error
    • Added functions to fetch positions of text glyphs
    • Added visible to WindowMode to allow ggez to run without a visible window
    • Added on_error function to EventHandler, making error handling more convenient
    • Added a download buffer handle to the gfx context, to avoid possibly recreating it all the time, which means things like taking multiple screenshots should work more smoothly now, as long as the target size doesn't change

    ๐Ÿ”„ Changed

    • EventHandler now takes an error type as a parameter, which allows you to use your own error types
    • FullscreenType::True now causes the game to be rendered exclusively on the current monitor, which also allows to set different resolutions
    • Changed blend modes massively in the hope that they're either more "correct" or helpful now
    • Changed the way SpriteBatch reacts to DrawParams with an offset != (0,0): It now calculates its own dimensions (a rectangle containing all sprites) and interprets the offset as a fraction of that
    • Switched rand in the examples to oorandom, for basically aesthetic reasons. (Not advertising at all, honest.)
    • Version bumped rodio to 0.13
    • Version bumped lyon to 0.16
    • Version bumped glyph_brush to 0.7
    • Version bumped winit to 0.23, which brings many fixes, better Wayland handling, and a slightly different style of event loop with some different constraints and type names.
    • winit update has also changed and smoothed over some of the issues with high-DPI handling.
    • Updated just about every other dependency under the sun
    • Minimum rustc version is now 1.42
    • Audio API in general changed a little for rodio API differences.

    ๐Ÿ—„ Deprecated

    Nothing

    โœ‚ Removed

    • removed ggez::nalgebra crate re-export. All math in the public API should now be mint types, and it is a bug if they are not.

    ๐Ÿ›  Fixed

    • Fixed a mistake in the matrices created from DrawParams leading to them being slightly wrong when an offset was used (this might fix a lot of very subtle rendering bugs)
    • ggez no longer creates empty directories (for resources and other things), unless necessary
    • Setting DrawParams now results in consistent behaviour everywhere (ok, no, we missed MeshBatch, which received this fix in 0.6.1), including SpriteBatch and Canvas
    • Fixed a memory leak in screenshot and to_rgba8
    • Fixed transfrom_rect (and added some more tests for it)
    • Too many things to count

    Broken

    Nothing (yet)

  • v0.5.1 Changes

    โž• Added

    Nothing

    ๐Ÿ”„ Changed

    • version bumped image
    • Tiny doc cleanups and futzing around with readme

    ๐Ÿ—„ Deprecated

    Nothing

    โœ‚ Removed

    Nothing

    ๐Ÿ›  Fixed

    Nothing

    Broken

    Nothing

  • v0.5.0 Changes

    โž• Added

    • Added line cap and join options
    • Added spatial sources for audio
    • Added From implementations for Color to convert from various tuples of f32's. Redundant but it annoyed me they don't exist.
    • Add OpenGL ES 3.0 support
    • Add optional textures to Meshes.
    • Added lots of tests and doctests.
    • Added a c_dependencies feature. It's on by default, but disabling it will build ggez without unnecessary C dependencies (currently bzip2 and minimp3). #549
    • Added (basic) spatial sound support.
    • Added loading of resource zip files from in-memory bytes

    ๐Ÿ”„ Changed

    • Updated versions of lots of dependencies.
    • Minimum rustc version is now 1.33, rust 2018 edition.
    • We now use winit instead of sdl2 for window creation and events! This removes the last major C dependency from ggez. It also involves lots of minor changes, the full extent of which is still going to evolve.
    • DrawParam now uses the builder pattern instead of being a bare struct, which allows easier conversion from generics (such as mint types) as well as simplifying the internal math.
    • All public-facing API's that take Point2, Vector2 or Matrix4 should now take Into<mint::...> for the appropriate type from the mint crate. This should let users use whatever math library they care to that supports mint; currently nalgebra, cgmath and euclid are all options.
    • Moved all the FilesystemContext methods into top-level functions in the filesystem module, to be consistent with the rest of the API.
    • What used to be the text_cached module is now the text module, replacing all the old text stuff with cached text drawing using the glyph_brush crate. This dramatically changes the text API, as well as being faster and more powerful.
    • Various dimension parameters have changed to fit the underlying implementations more closely. Image dimensions have changed from u32 to u16, which they always were but now it's exposed to the API. Various screen size dimensions have changed from u32 to f64, which allows winit to do smoother scaling.
    • Similarly, Mesh's now have u32 indices. #574
    • Various getters have been renamed from get_<field>() to <field>(). Of particular note are changes to Drawable and ShaderHandle traits.
    • Some minor modularization has taken place; at least, gamepad and audio module scan be disabled with settings in your conf.toml. Doing the same for filesystem, graphics, and input is a liiiiiittle more involved.
    • MeshBuilder DrawMode's now can take parameters, and have some shortcut functions to make default parameters. This simplifies things somewhat by not needing separate args to specify things like a stroke width for DrawMode::Stroke.
    • HiDPI support removed since it doesn't do anything useful. Any problems with your window not being the size you asked for are winit's problem and will be solved once they fix it. #587
    • Moved ggez::quit() to ggez::event::quit(). This commit
    • Probably tons of other things I've forgotten.

    ๐Ÿ—„ Deprecated

    • Nothing, it's a breaking change so things just got removed.

    โœ‚ Removed

    • Apple products are no longer officially supported. They may work fine anyway, and I'll accept PR's for them, but handlin it all myself is too large an investment of time and energy. Sorry. :-( this commit
    • The foreground and background colors and associated functions have beeen removed; all colors are now specified purely where they are used for drawing.
    • Removed deprecated BoundSpriteBatch type.
    • Removed Context::print_resource_stats() in favor of filesystem::print_all().
    • Removed graphics::rectangle() and friends in favor of just building and drawing the meshes explicitly. Shortcut functions for this have been added to Mesh. #466
    • Removed TTFFont font type in favor of GlyphBrush. #132
    • Removed Context::from_conf() for ContextBuilder which is strictly more powerful. #429
    • Removed bitmap fonts; better support deserves to exist than what ggez currently provides, and there's no reason it can't be its own crate.
    • Removed the cargo-resource-root feature flag; just use filesystem::mount() instead or add the directories to your ContextBuilder.

    ๐Ÿ›  Fixed

    • Minor things beyond counting. Don't worry, we added plenty of new bugs too.

    Broken

    • Does not work on Windows 7 or below, again due to gilrs. #588
  • v0.4.4 Changes

    โž• Added

    • Added functions to get and set mouse cursor visibility.
    • Derived PartialEq for Image and SpriteBatch.

    ๐Ÿ”„ Changed

    Nothing

    ๐Ÿ—„ Deprecated

    Nothing

    โœ‚ Removed

    Nothing

    ๐Ÿ›  Fixed

    • Myriad small documentation and example typos.
    • Fixed a rounding error in Font::get_width().
  • v0.4.3 Changes

    โž• Added

    • Added a feature flag to build nalgebra with the mint math library inter-operability layer #344
    • Updated image to 0.19 which lets us add another feature flag selecting whether or not to use multithreaded libraries when loading images. #377
    • We got more awesome logos! Thanks ozkriff and termhn! #327
    • Added hooks to the log crate, so we will now output some logging data via it that clients may use. #311
    • There's now a functional and reasonably ergonomic game template repo that demonstrates how to use ggez with specs, warmy, failure, log and other useful tools.
    • Added Font::new_px() and Font::from_bytes_px() functions to create fonts that are specific pixel sizes #268
    • Added Ratysz's glyph cache implementation integrating the awesome gfx_glyph crate! This gives us faster text drawing as well as more features; if it works out well it should replace all text rendering in another version or two. #132

    ๐Ÿ”„ Changed

    • Made it so that the configuration directories are only created on-demand, not whenever the Context is created: #356
    • Updated rodio to 0.7, which fixes a sample rate bug on Linux: #359
    • Documented which version of rustc we require, and added unit tests for that specific version: it is currently >=1.23.0, primarily driven by features required by dependencies.
    • Moved Context::quit() to ggez::quit() 'cause all our other non-object-related functions are functions, not methods.

    ๐Ÿ—„ Deprecated

    โœ‚ Removed

    ๐Ÿ›  Fixed

  • v0.4.2 Changes

    โž• Added

    • Added a feature to enable or disable bzip2 zip file support
    • Lots of small documentation fixes and improvements thanks to lovely contributors
    • Added termhn's ggez_snake to the examples, 'cause it's awesome
    • Added timer::get_remaining_update_time() to let you easily do sub-frame timing for interpolation and such.
    • Many small improvements and cleanups

    ๐Ÿ”„ Changed

    • Version bumped lots of dependencies: zip, rand, rodio, rusttype
    • Switched to the app_dirs2 crate to avoid a bug in upcoming rustc change

    ๐Ÿ—„ Deprecated

    โœ‚ Removed

    ๐Ÿ›  Fixed