All notable changes to this project will be documented in this file, following the format defined at keepachangelog.com. Where a change was contributed via a third-party pull request, the author will be credited.
This project adheres to Semantic Versioning.
- The
tetras
example has been updated to demonstrate how you could approach adding multiple screens/states to a game.
0.2.12 - 2019-02-07
- The renderer has been optimized a bit more.
- The 'color' DrawParams property is now being sent to the shader properly - the last few versions had a bug where the blue level was being sent in place of the green channel.
0.2.11 - 2019-02-06
- The audio engine now handles repeats/restarts of a
SoundInstance
more reliably. This was mainly an issue with OGG and MP3 files.
0.2.10 - 2019-02-03
from_data
constructors were added toTexture
,Font
andSound
, allowing them to be constructed from binary data. This is useful if you want to useinclude_bytes
to bundle assets into your executable. Note that an equivalent constructor already existed onShader
, which can be used in combination withinclude_str
.
- The default shaders have been amended to use GLSL 1.50 instead of GLSL 1.30. This seems to be required to get Tetra working on Mac.
0.2.9 - 2019-02-03
- Some optimizations have been made to the rendering code, mainly to avoid unnecessary allocations. This nearly doubled the performance of the
bunnymark
example in release mode!
0.2.8 - 2019-02-01
- The
time::get_fps
function was added, which returns the current FPS, averaged out over the last few seconds. (@selimeren in #96)
0.2.7 - 2019-01-23
- We now use the
hashbrown
implementation ofHashMap
/HashSet
instead of thefnv
hasher. The hope was that this would give a performance boost, but it didn't seem to have any real observable impact :( That said, several of Tetra's dependencies usehashbrown
, so in the interests of keeping the dependency tree light, we're switching anyway.
- A race condition between Rodio and SDL has been fixed.
- While testing
hashbrown
integration, it was found that the benchmark numbers in the FAQ were slightly inaccurate - this has now been fixed.
0.2.6 - 2019-01-20
- Audio playback has been added, using Rodio as the backend!
- A port of the popular 'BunnyMark' benchmark has been added, which can be helpful for comparing relative performance of different versions/configurations of Tetra.
- The documentation has been updated to detail the
sdl2_bundled
andsdl2_static_link
features.
- The code that handles sprite transformations has been rewritten, and is now around 10 times faster than 0.2.5 in debug mode, and twice as fast as 0.2.5 in release mode.
- The
build_matrix
method onDrawParams
was meant to be an internal utility, not a part of the public API. Tetra no longer uses it, so it has been deprecated, and will be removed in 0.3.
0.2.5 - 2019-01-06
- Custom shaders can now be used for rendering!
- The parameters contained within an instance of
DrawParams
are now publicly accessible - without these, it wasn't possible to write a proper custom implementation ofDrawable
. - Shaders now bind their outputs explicitly - this should help with compatability.
0.2.4 - 2019-01-04
- Fixed an issue where the OpenGL context would fail to initialize when using NVidia's proprietary Linux drivers.
0.2.3 - 2019-01-03
- Tetra now has support for gamepads! The API is roughly the same as that of keyboard and mouse, aside from having to specify which gamepad's state you're querying.
- Text is now drawn using the same shader as everything else - this likely won't be noticable now, but it will make things a lot easier once custom shaders get added!
- Some subtle issues around font cache invalidation have been fixed - in general we now let
glyph-brush
handle that side of things. - Texture flipping was broken in 2.0 - this has now been fixed.
- The OpenGL context now explicitly requests a 32 bit color buffer and double buffering.
- Shaders now bind their texture sampler explicitly, which should avoid black screens on some drivers.
0.2.2 - 2018-12-24
- Tetra now has a website, with a tutorial on how to get started using it.
run_with
is now less restrictive about what kinds of closure it will accept.
- We now always request an OpenGL 3.2 core profile context - this is required for us to support MacOS.
- The
TETRA_OPENGL_FORCE_CORE_PROFILE
environment variable has been removed, since we now always force a core profile.
0.2.1 - 2018-12-22
- Shader errors are now properly reported via
TetraError::OpenGl
.
- The shader attribute order is now explicitly defined - this fixes an issue with black screens on some drivers.
0.2.0 - 2018-12-21
Texture
now has methods to get the width and height.- The
bundled
andstatic-link
features from thesdl2
crate can now be used through Tetra by enabling thesdl2_bundled
andsdl2_static_link
features. (@VictorKoenders in #33) - New methods have been added to allow iterating over down/pressed/released keys on the keyboard. (@VictorKoenders in #35)
- Text input typed by the user can now be retrieved using the
input::get_text_input
function. (@VictorKoenders in #36) Text
now has a method for efficiently calculating (and caching) the outer bounds of the text. (@VictorKoenders in #41)- New methods have been added to
Animation
, allowing it to be modified after it is initially created. (@VictorKoenders in #48) - There are now numerous different
ScreenScaling
types that can be chosen from. - Extra options have been added to the
ContextBuilder
, allowing you to start the window in various different states (e.g. fullscreen). - There are now many new methods for manipulating the window/game loop in the
window
module. - The
update
anddraw
methods onState
are now both optional. - The
graphics
module now re-exportsVec2
. - In addition to the normal
run
method, there is now also arun_with
method that uses a closure to construct theState
. This is handy when method chaining - see the examples for how it can be used. - Public types now implement
Debug
andClone
where appropriate. TetraError
now implements the standard libraryError
trait.
- The library has been upgraded to the 2018 edition of Rust.
ContextBuilder::new
now takes the title and size as parameters. The old behavior of the function can be replicated by usingContextBuilder::default
instead.run
is now a method onContext
, instead of a free function.- The
update
anddraw
methods onState
now returntetra::Result
, allowing errors to be returned (or propagated via the?
operator). Any errors returned from these methods will stop the game - your main method can then handle the error (e.g. log it out). - The
scale
option onContextBuilder
has been renamed towindow_scale
, to better reflect its behavior. Shader::from_file
is now calledShader::new
, andShader::new
is now calledShader::from_string
. This is more consistent with the other constructors.- Tick rates are now specified in ticks per second.
- The
ContextBuilder
no longer consumes itself when called - this is more flexible for e.g. calling methods inside a conditional. quit
has been moved to thewindow
module.set_tick_rate
has been moved to thetime
module.- The functions for getting the game's internal width/height have been renamed to disambiguate them from the functions for getting the window width/height.
- Matching on
TetraError
will now force you to add a wildcard arm. This will prevent the addition of new error types from being a breaking change. Shader::from_string
now returnsResult
, as proper error handling will be added to to it eventually.
- The model matrix is now calculated once per
Drawable
, instead of once per vertex. This should speed up rendering. - The top left corner of a
NineSlice
no longer gets distorted if the x and y of thefill_rect
aren't equal. - The renderer now automatically flushes instead of panicking if it hits capacity.
- The renderer will now batch up to 2048 sprites, instead of 1024.
- The default shaders have been rewritten in an older/more compatible syntax, in order to fix some issues with black screens on Mesa drivers.
- The
is_mouse_button_pressed
andis_mouse_button_released
functions now work correctly.
0.1.6 - 2018-12-09
- The
Font
andText
types have been added, allowing you to render out text using a TTF font. - Inspired by FNA, the
TETRA_OPENGL_FORCE_CORE_PROFILE
environment variable can now be set to force the application to run using the 3.2 core profile. This might end up getting removed in favour of a more robust solution later on, but it's handy for testing (e.g. Renderdoc requires the core profile to be enabled).
- The internal framebuffer is now an RGB texture instead of an RGBA texture - this was causing some strange issues with blending.
0.1.5 - 2018-12-08
- The batcher was performing a flush after texture switches occured, not before.
0.1.4 - 2018-12-08
- Graphics can now be rotated using the
rotation
method onDrawParams
.
- The calculation of how many elements to render when flushing was broken, which could lead to geometry persisting between frames even when the associated graphic was no longer active.
0.1.3 - 2018-12-07
- The
NineSlice
type has been added, allowing you to easily create dialog boxes from small textures. - The window size can now be set explicitly. This will take precedence over the scale setting.
tetra::error::Result
andtetra::error::TetraError
are now re-exported in the root of the crate. This allows you to writetetra::Result
in your function signatures, which aligns a bit better with other customResult
types likeio::Result
.- An example of how to use the
Animation
type has been added.
0.1.2 - 2018-12-03
- Quick fix to the docs for the mouse button methods.
0.1.1 - 2018-12-03
- Functions for checking the state of the mouse buttons have been added.
- Scaling is now applied relative to the origin.
- Mouse positions now take into account letterboxing.
- Various fixes to the documentation and crate metadata.
0.1.0 - 2018-12-02
- Initial release!