Skip to content

Release Notes

v0.6 Generation

v0.6.16 | 2025-04-07

Upgrade Guide from Previous Version

New Features

  • Added support for building with Xcode 16.3 (#1289)
  • Added Rect::chamfered(), RectF::chamfered() that return a Polygon with chamfered rectangle (#1268)
  • Added Geometry2D::SmallestEnclosingCircle() to find the smallest enclosing circle for point sets on a plane (#1272)
  • Enabled creation of sensors for triangle, quadrilateral, polygon, line segment shapes in 2D physics simulation (#916, #1251)
  • Added Line::withThickness() to create a rectangle by adding thickness to a line segment (#1276)
  • Added overloads like .stretched(Arg::left) etc. to Rect, RectF (#1277, #1279)
  • Added Font::getGlyphByGlyphIndex() (#1278)
  • Added SimpleMenuBar::mouseOver() (#1290)
  • Added String::choice() that returns a random element from a string (#1253)
  • Added Math::ClampAngle() (#1271)
  • Added serialization support for int128, uint128 (#1261)
  • Added operator== to YesNo class (#1282)

Specification Changes

  • Updated the internal Boost version from 1.74.0 to 1.83.0 for Windows and macOS versions. The detailed behavior of geometry calculation functions may change (#1292)
  • Updated The Parallel Hashmap library from v1.3.8 to v2.0.0 (#1297)
  • Removed all Lua-related source files as they were not being used (#1293, #1294)

Performance Improvements

  • Changed the return value of some DiscreteSample() overloads to references (#1275)

Bug Fixes

  • Fixed a bug where System::EnumerateWebcams() crashed on Windows when no webcam was connected (#1250)
  • Fixed a bug where .lookahead() of MemoryReader and MemoryViewReader did not read from the specified position (#1264)
  • Fixed bugs in MemoryWriter (#1266)
  • Fixed a bug where the mouse wheel interfered with camera behavior when CameraControl::None_ was set in Camera2D (#1295)
  • Fixed a bug where .read() and .lookahead() of MemoryReader and MemoryViewReader did not check for out-of-bounds access (#1264)
  • Fixed a bug on Windows where the program would stop until selection was cleared when text was selected in the console window during console output (#1254)
  • Fixed a bug where System::LaunchFile() on macOS/Linux could not open files with single quotes in their names (#1283)
  • Fixed a bug where DebugCamera3D sometimes focused on a different position than the focus point specified in the constructor (#1255, #1274)
  • Fixed a bug where GlyphInfo::buffer was sometimes not set depending on the acquisition method (#1256)
  • Fixed a bug where enum types could not be deserialized with Deserializer<MemoryViewReader> (#1288)
  • Fixed a bug where the spacing of ellipsis dots in text rendering within rectangles could vary depending on font size (#1273)
  • Fixed a bug in scene management where scene .draw() was called twice when fade time was set to 0 (#1258)
  • Fixed a bug where 2D physics-related classes caused compile errors in some environments (#1286)
  • Fixed a bug where fill was not reflected in some cases in RoundRect::drawShadow() (#1269)
  • Fixed a bug where Indexed() could return dangling references in special cases (#1247)
  • Fixed bugs in OpenGL ES 3.0 environment (#1244)
  • Fixed a bug where the read position could change on error in BinaryReader::lookahead() (#1265)
  • Fixed bugs in Linux builds (#1248, #1281)
  • Fixed typos in documentation (#1262, #1270)

Contributions

  • Raclamusi: Text rendering bug fixes within rectangles, DebugCamera3D bug fixes, DiscreteSample() improvements
  • yaito3014: Indexed() bug fixes, Linux build bug fixes
  • Appbird: Geometry2D::SmallestEnclosingCircle() implementation
  • Aikawa3311: 2D physics sensor feature implementation
  • sashi0034: Math::ClampAngle() implementation
  • leaf2326: Rect::stretched(Arg::left) etc. overload implementation
  • m4saka: YesNo operator== implementation
  • yksake: Scene management bug fixes
  • aFumihikoKobayashi: Linux build bug fixes
  • yukidoke: Documentation fixes
  • aoriika05: Documentation fixes

OpenSiv3D Challenge

  • #19 SmallestEnclosingCircle: Appbird, Nachia, Luke256, Raclamusi, polyester, sasa
v0.6.15 | 2024-07-03

Upgrade Guide from Previous Version

New Features

  • Added function font(text).fits(fontSize, rect) to check if text can be rendered within a specified rectangle without actually rendering (#1202)
  • Enabled starting drag operations for multiple files on Windows (#1218)
  • Added Vec2::normalized_or(Vec2) etc. that return a specified value when the vector is zero (#1152)
  • Enabled specifying default filename in Dialog::SaveFile() (#1199)
  • Added .lerp() to Circular (#1203, #1206)
  • Extended BMP file compliance (#1204, #1207)
  • Added functionality to get ID3D11Texture2D* from Texture (#1219)
  • Added Image::inBounds() (#1229)
  • Added function to check if program is running in IDE (#1230)
  • Added Camera2D::getGrabbedPos() (#1242)

Specification Changes

  • For Windows version, ensured that the executable directory is always the current directory even when the app is launched via command prompt or Start menu search (#1227)
  • Changed default model for OpenAI::Chat / Vision to the latest model GPT-4o (#1234)
  • Changed specification so that .normalize(), .normalized() for zero vectors return zero vectors (#1237)
  • Changed specification so that LineString::calculateBuffer() and LineString::calculateRoundBuffer() return shapes (square, circle) even for single points (#1209, #1210)
  • Updated LunaSVG version to v2.3.9 (#1211)
  • Changed implementation of String::levenshteinDistanceFrom() for non-SSE environments (#1239)
  • Enabled specifying ./ as default path in Dialog::SaveFile() for Windows version (#1240)

Performance Improvements

  • Accelerated Image::rotate90(), Image::rotate270() etc. (#1182, #1225))

Bug Fixes

  • Fixed bug where Parse<double>(U"") did not throw an exception but became assert (#1226)
  • Fixed bug where crashes could occur in Platform::Windows::Keyboard::GetEvents() (#1221)
  • Fixed template parameter constraints for AsyncTask (#1213))
  • Fixed build errors in Statistics::Mode(), Statistics::MultiMode() (#1214)
  • Fixed build error when loading CSV from Reader (#1215)
  • Fixed typos in documentation (#1216))
  • Changed Point::length(), Point::lengthSq() to implementation less prone to integer overflow (#1217)
  • Improved consistency of FileSystem::Extension(), FileSystem::FileName(), FileSystem::BaseName() (#1223)
  • Made engine initialization continue even if RegisterDragDrop fails during engine initialization (#1238)
  • Fixed default argument of StringView::lastIndexOfAny() from 0 to npos (#1241)

Contributions

  • Raclamusi: BMP file compliance extension, Image::rotate90(), Image::rotate270() etc. acceleration, LineString::calculateBuffer() and LineString::calculateRoundBuffer() specification changes, AsyncTask fixes
  • zaligan: Circular::lerp() implementation
  • Plinano: Documentation fixes
v0.6.14 | 2024-02-05

Upgrade Guide from Previous Version

New Features

  • Added Shader::QuadWarp (#998, #1183)
  • Added support for new OpenAI APIs and models including Vision and TextToSpeech (#1126, #1176, #1181, #1194)
  • Added Shape2D::Astroid() (#1191)
  • Added filter size options for Shader::GaussianBlur() (#1147, #1148)
  • Added shadow sample shaders (#1140, #1200)
  • Enabled specifying target players in MultiPlayer_Photon::sendEvent() (#1170)
  • Added .clear() to Trail, TrailMotion (#1149)
  • Added .with~() to Point, Vec2, Color, ColorF etc. that return a copy with only one element changed (#1143)
  • Added .computeConvexHull() to MultiPolygon (#1195)
  • Added .centroid() to MultiPolygon (#1186, #1190)
  • Added .area(), .perimeter() to MultiPolygon (#1185, #1187)
  • Added .rotate90() series member functions to Rect, RectF (#1094)
  • Added .getUTF8String(), .assignUTF8String() to JSON (#1177)
  • Added overloads that accept const char32* and StringView to PutText() (#1159)
  • Added overloads for Mat3x3::Homography() (#1163)
  • Added Cursor::SetCapture(), Cursor::IsCaptured() for future UI feature implementation (#1045)

Specification Changes

  • Increased the maximum number of simultaneous audio playbacks from 16 to 64 (#1123)
  • Updated color emoji version from Unicode 15.0 to Unicode 15.1 (#1144)
  • Changed DirectoryWatcher constructor argument to FilePathView (#1197)
  • Redesigned OpenAI-related API namespaces and functions (#1176)
  • Changed some FontAsset function arguments from const String& to StringView (#1158)
  • Updated fmt library from 8.1.1 to 10.1.1 (#1160)
  • Updated zstd library from 1.5.1 to 1.5.5 (#1161, #1162)

Performance Improvements

  • Slightly reduced overhead of MultiPolygon member functions (#1188, #1189)

Bug Fixes

  • Fixed multiple bugs in JSON (#1117, #1165, #1166, #1192)
  • Fixed the issue where both ends did not gradient in Circle::drawArc(LineStyle::RoundCap) and the bug where inner and outer colors were reversed (#1013, #1193, #1198)
  • Fixed a bug where RandomInt8(), RandomInt16(), RandomInt32(), RandomInt64() did not return minimum values (#1196)
  • Fixed a bug where Parse<double>(U"") returned 0 without throwing ParseError (#1173, #1174)
  • Fixed a bug where joinRoomReturn was not called in MultiPlayer_Photon (#1169)
  • Fixed a bug where Cursor::SetPos() did not properly coordinate with scene size (#1167, #1168)
  • Fixed rendering disturbance in RoundRect::drawShadow() when blur was large (#1164)
  • Fixed a bug where ConstantBuffer copying was not performed correctly (#1154, #1155)
  • Fixed the issue where some RectF constructors gave narrowing conversion warnings when receiving int32 (#1184)
  • Fixed the issue where frame rate was limited when VSync was disabled in some Windows environments (#1179)
  • Fixed a bug where GIF image resolution obtained by ImageDecoder::GetImageInfo() was incorrect (#1172)
  • Fixed the issue where loading GIF files with width or height larger than 16384px caused crashes (#1171)
  • Fixed the issue where DebugCamera3D::drawTouchUI() was missing const (#1091)
  • Fixed the issue where some constexpr member functions of shape classes used inactive union members (#1139, #1141)
  • Fixed the issue where message boxes were not displayed properly when in fullscreen + render target change (#1150)

Contributions

  • Ogame3334: MultiPolygon feature additions and improvements
  • m4saka: VSync-related issue fixes, GIF-related bug fixes
  • Raclamusi: Circle::drawArc() fixes, improvements to shape class constexpr support
  • sashi0034: Cursor::SetPos() fixes
  • comefrombottom: Feature additions to Rect, RectF
v0.6.13 | 2023-11-15

New Features

  • Added support for Visual Studio 2022 17.8 (#1136)
  • Enabled mipmap generation in DynamicTexture (#1130, #1135)
  • Enabled mipmap generation in RenderTexture, MSRenderTexture (#1129, #1134)
  • Added TextureFormat::R16G16_Unorm (#1122)

Specification Changes

  • Changed Texture::isMipped() to Texture::hasMipMap() (#1131)

Usability Improvements

  • Fixed inconvenience where Polygon and RoundRect could not be used when including <Siv3D/DLL.hpp> on Windows (#1120)
  • Fixed missing explicit on some Font constructors (#1115)

Performance Improvements

  • Mipmap generation for Texture is now performed on the GPU. Creating textures from images with TextureDesc::Mipped, emoji, and icons is significantly faster (#1133, #1137)
  • Improved speed and accuracy of bounding box recalculation for Polygon scale functions (#1069, #1132)

Bug Fixes

  • Fixed a bug where audio could not be played on macOS (Apple Silicon) (#1127)
  • Fixed a bug where mipmaps were sometimes not used when drawing textures with the OpenGL backend (#1128)
  • Fixed a bug where Subdivision2D::findNearest() did not store result coordinates in some cases (#1116)
  • Fixed a bug where Subdivision2D::initDelaunay() did not reset m_addedPoints (#1114)
  • Fixed an issue where some constexpr member functions of Rect, RectF could not be used in compile-time calculations (#1118)

Contributions

  • Raclamusi: Improvements to Polygon scale functions
v0.6.12 | 2023-09-27

New Features

  • Added functions to create a parallelogram Quad from Rect, RectF by specifying an angle (#1056, #1070)
  • Added functions to calculate 2D and 3D Morton Order (#1072)
  • Added SimpleGUI::IMECandidateWindow() to draw the conversion candidate window when using IME on Windows 11 (#1106, #1107)
  • Added .rotate90(N) etc. to Point, Vector2D (#1093, #1102)
  • Enabled specifying initial fade-in time in SceneManager::init() (#1078, #1081)
  • Added ==, != to compare two Images (#1099)
  • Added Image::rotate90(N) overload (#1089, #1090)
  • Added Point3D type (#1073, #1074)
  • Added operator% and operator%= to Point type (#1055, #1058)

Specification Changes

  • Improved consistency of arguments for some ScreenCapture:: functions (#1080)
  • Updated third-party libraries (#1100)

Performance Improvements

  • Significantly improved preload cost of SDF/MSDF fonts (#1095, #1096)
  • Significantly improved runtime performance of Image::clipped() etc. (#1087, #1108)
  • Fixed inefficiency where Shape2D::indices() returned by value instead of reference (#1065, #1071)
  • Added efficient member function overloads for rvalue Array, String, Polygon etc. (#1059, #1060, #1064)

Bug Fixes

  • Fixed noise in complex SDF/MSDF font characters (#1082, #1096)
  • Fixed a bug where .pressed() could return true when not pressing keys while window was inactive (#1083)
  • Fixed rendering anomaly in some cases of RoundRect::drawShadow() in v0.6.11 (#1076)
  • Fixed incorrect results from RandomHSV(hMinMax, sMinMax, vMinMax) (#1084, #1088)
  • Fixed runtime error when passing a string consisting only of whitespace to String::trimmed() (#1101)
  • Improved IME behavior on Windows (#1104, #1107)
  • Fixed runtime error when P2Body has an empty Polygon (#1075)
  • Fixed typo: Wave::MaxSampleRate was Wave::MaxSamlpeRate (#1105)
  • Fixed typo: PhongMaterial::ambientColor was PhongMaterial::amibientColor (#1105)
  • Fixed compile error with AsyncTask::wait_until() (#1068)
  • Fixed typos in some shader files (#1105)
  • Fixed documentation errors (#1054)

Contributions

  • Raclamusi: Implementation of efficient member function overloads for rvalue Array and other classes, Acceleration of Image::clipped() etc., fixing return value issues in some functions
  • yama-can: Implementation of Rect::skewedX() etc., Implementation of fade time specification in SceneManager::init()
  • comefrombottom: Implementation of Image::rotate90(n) etc., Implementation of .rotate90() for Point and Vector2D
  • ozone010: Added operator% and operator%= to Point type
  • voidproc: Fixed typos in documentation and source code
  • naga-karupi: Fixed RandomHSV() bug
  • sfpgmr: Fixed internal code
  • aoriika05: Fixed documentation
v0.6.11 | 2023-08-11

New Features

  • Added 2D trail rendering feature (#1006, #1043)
  • Added class for easy handling of "9-slice" (#1030, #1036)
  • Added simple 3D camera class SimpleFollowCamera3D that follows a target (#1048, #1049)
  • Added GPT3_5_Turbo_16K (gpt-3.5-turbo-16k) to OpenAI Chat API model constants (#1050)
  • Added option to .drawShadow() of Rect, RectF, RoundRectF to not fill the entire interior (#1039)
  • Added Math::Max(), Math::Min() to calculate max/min values between vector elements (#1032)
  • Added Line::normalizedVector() (#1029)
  • Added Triangle::isClockwise() (#1028)
  • Added Transition::reset() (#1025)
  • Added Math::MoveTowards() (#1024)
  • Added Triangle::FromPoints(p0, p1, p2) to create a clockwise Triangle from three vertices (#1015)
  • Added overload to Quaternion::RollPitchYaw() that takes Vec3 as argument (#1014)

Usability Improvements

  • Added feature to open troubleshooting web page when encountering common runtime errors for beginners (#1007, #1034, #1035)
  • Expanded detection of asset class initialization before engine startup (#1047)
  • Improved behavior of SimpleGUI::TextBox() (#997)

Specification Changes

  • Made Circle::drawPie(), Circle::drawArc(), Circle::drawSegmentFromAngles() draw clockwise triangles normally even when negative angle is specified (#1042)

Performance Improvements

  • Reduced CPU cost of .drawShadow() for Circle, Rect, RectF, RoundRect by 20-50% (#1037)

Bug Fixes

  • Fixed crash with mutex error on program termination on Windows (#1033)
  • Fixed bug where DrawableText::getXAdvances() result did not include newline characters (#1038)
  • Fixed misalignment of r in RoundRect::drawShadow() when specifying spread (#1040)
  • Fixed bug where outline and holes could be reversed in Font::renderPolygon() (#1019, #1027)
  • Fixed bug where tab spacing could be disrupted during Font drawing (#1002, #1026)
  • Fixed bug where Circle::pieAsPolygon() and Circle::arcAsPolygon() generated counterclockwise vertex Polygon (#1041)
  • Fixed build issues with some compilers (#1021)
  • Fixed Home, End key behavior in SimpleGUI::TextBoxAt() (#999)
  • Fixed typos in documentation and arguments (#1016, #1017)

Contributions

  • Raclamusi: Fixed Font::renderPolygon() bug, Fixed Font tab spacing drawing bug
  • yksake: Improved SimpleGUI::TextBoxAt() behavior
  • polyester-CTRL: Fixed build issues with some compilers
  • voidproc: Fixed typos in documentation and arguments
v0.6.10 | 2023-05-17

Important

New Features

  • Added Binary Values support for JSON (#1010)

Performance Improvements

  • Improved implementation of Optional::Optional(Optional<U>&&) (#1008)

Bug Fixes

  • Fixed bug where ParseOr<double>() and ParseOpt<double>() were performed with float precision (#1009)
  • Fixed bug where some elements of JSON created from binary formats (BSON/CBOR/MessagePack) could not be read properly (#1010)
v0.6.9 | 2023-04-16

New Features

Specification Changes

  • Changed Timer::isRunning() to return false when it reaches 0 (#987)
  • Grid::resize(w, 0) and Grid::resize(0, h) now preserve w and h (#989)

Performance Improvements

  • Improved implementation of Array::fetch() etc. (#990)

Bug Fixes

  • Fixed undefined behavior in Array::fetch() etc. (#990)
  • Fixed bug in Grid::assign() (#995)

Contributions

  • tomolatoon: Fixed and improved Array::fetch() etc.
  • m4saka: Fixed typo in SimpleTable
v0.6.8 | 2023-04-01

New Features

  • Added System::LaunchFile(fileName) to open a specified file with the default application (#888, #981)
  • Added System::LaunchFileWithTextEditor(fileName) to open a specified file with a text editor (#888, #981)
  • Updated bundled color emoji from Unicode 14.0 to Unicode 15.0 (#980)
  • Updated bundled Material Design Icons from v6.5.95 to v7.2.96 (700 new icons added) (#980)
  • Added functionality to handle OpenAI's Embeddings API (#982)
  • Added functions to get user's computer name, username, and language (#678, #968, #974)
  • Added functions to get drive information (Windows version) (#709, #978)
  • Added Network::IsConnected() to check internet connection (#975, #976)

Usability Improvements

  • Items in SimpleGUI::ListBox() can now be selected with up/down arrow keys (#984)

Bug Fixes

  • Fixed bug where fallback emoji were not displayed correctly under certain conditions (#971, #973)
  • Fixed bug where scrollbar thumb in SimpleGUI::ListBox() became too thin or disappeared when there were many items (#985)

Contributions

v0.6.7 | 2023-03-18

New Features

  • Added functionality to handle OpenAI API (Chat, Image) (#957)
  • Added functionality to handle OSC communication (#515, #919, #922)
  • Added functions to draw a circle cut by a secant: Circle::drawSegment(), Circle::drawSegmentFromAngles() (#956)
  • Added functions to draw rectangles with diagonal gradients (#955)
  • SimpleMenuBar now supports item checkmarks (#948)
  • Added JSONValidator class for JSON validation (#931, #959)
  • Added functions to directly get command line arguments: System::GetArgc(), System::GetArgv() (#964)
  • Addon execution priority can now be specified separately for update() and draw() (#949)
  • Enhanced functions related to SimpleHTTP asynchronous requests (#911, #962)
  • Added Math::NormalizeAngle() function to normalize angles to ranges [0, TwoPi) or [-Pi, Pi) (#927)
  • Added Periodic::Pulse0_1() / Periodic::Pulse1_1() that return rectangular waves with specified duty ratio over time (#966, #967)
  • Added Input::Serialize(), Input::Deserialize() to serialize Input (#920)
  • Added postPresent() to IAddon (#942)
  • TextEditState now supports serialization (string only) (#930)
  • Added validity checking to Base64 decoding (#845, #961)
  • Math::Damp(), Math::SmoothDamp() now support ColorF type (#947)
  • Added .contains(), .contains_if() with the same functionality as .includes(), .includes_if() to StringView, String, Array for consistency with C++23 (#944)
  • Enhanced JSON functionality (#925, #931, #959)

Usability Improvements

  • Added message box notification for asset creation/destruction issues every frame (#926)

Specification Changes

  • Renewed the default sample program "Hello, Siv3D" (#940)
  • Updated Photon addon to be compatible with the latest Photon SDK (#954)

Performance Improvements

  • Accelerated Base64 decoding (#845, #961)
  • Improved performance of some member functions of Array and MultiPolygon (#948)
  • Improved performance of Array::includes(), Array::contains() (#945)

Bug Fixes

  • Fixed issue where files could not be created in the current directory on macOS (#963)
  • Fixed bug where Optional behavior differed from std::optional (#938, #939)
  • Fixed bug where HTTPResponse content was from before redirect (#958)
  • Fixed compile error with JSON::Load() taking IReader as argument (#937)
  • Fixed bug where Polygon::calculateBuffer(), Polygon::calculateRoundBuffer() could fail (#965)
  • Improved mouse cursor behavior on SimpleMenuBar (#950)
  • Fixed bug where sound did not play in App/example/script/piano.as script (#935)
  • Fixed crash when drawing a joker card from default-constructed PlayingCard::Pack (#921)
  • Fixed bug where GeoJSONGeometry::get() could not be used (#933, #934)
  • Fixed bugs in some serialization macros (#923)
  • Fixed build issues on Arch Linux (#917, #918)

Contributions

  • nokotan: Updated Web version
  • tomolatoon: Added JSONValidator, Enhanced JSON functionality
  • m4saka: Fixed Optional bugs
  • Raclamusi: Improved Base64 decoding, improved performance of Array etc.
  • voidproc: Added Periodic functions
  • yksake: Improved SimpleMenuBar behavior, improved documentation
  • sthairno: Fixed GeoJSONGeometry bug
  • Aikawa3311: Fixed script
  • sfpgmr: Fixed serialization API bug
  • hashitaku: Fixed build on Arch Linux
v0.6.6 | 2022-11-22

New Features

  • Added simple menu bar functionality (#898)
  • Added functionality to abort input processing (#897)
  • Added OrderedTable type as a replacement for std::map (#909)
  • Enabled specifying vertical color gradients in RoundRect::draw() (#906)
  • Enabled specifying vertical color gradients in Rect::drawFrame(), RectF::drawFrame(), RoundRect::draw(), RoundRect::drawFrame() (#906)
  • (Windows version) Added functionality to display task progress in taskbar (#904)
  • Added function to return the overlapping area of two rectangles as a rectangle (#872)
  • Added bullet mode to P2Body (#901)
  • Time types now support _fmt() (#894, #895)
  • Added Rect::Empty(), RectF::Empty() to create empty rectangles (#881)
  • Added Rect::isEmpty(), Rect::operator bool(), RectF::isEmpty(), RectF::operator bool() to check if rectangles are empty (#879, #880)
  • Added Array::partition(), Array::stable_partition() (#869)
  • Camera2DParameters, LicenseManager, LicenseInfo, XInput can now be used in scripts (#868)

Usability Improvements

  • Performed refactoring to reduce header weight (#883, #886)
  • Resolved the issue on Windows where showing a message box during fullscreen would make the application unresponsive. A fallback message box is displayed within the scene (#915)
  • Improved template argument deduction for Array (#887)
  • Added CITATION.cff (#882)
  • Added overloads for Grid::resize() (#876)

Specification Changes

  • Updated various third-party libraries (#914)
  • Minor design adjustments to PlayingCard (#905)
  • PlayingCard.hpp moved from experimental to official feature (#885)

Performance Improvements

  • Reduced memory consumption of DisjointSet (#878)

Bug Fixes

  • Fixed bugs and improved compatibility for Web version
  • Fixed issue where some constructors of XMLReader could not be used (#896)
  • Fixed documentation (#871, #903)
  • Fixed issues with regex capture specification (#893)
  • Fixed infinite loop bug when passing empty string to String::removed(StringView) (#892)
  • Fixed issues with Allocator (#889, #891)
  • Fixed bug where DisjointSet::operator bool() returned inverted true/false (#877)
  • Fixed issues with _fmt() support for various classes (#873)
  • Fixed issue where LineString::calculateBufferClosed(), LineString::calculateRoundBufferClosed() sometimes did not close (#870)

Contributions

v0.6.5 | 2022-08-10

New Features

  • Added support for Visual Studio 2022 17.3 (#859)
  • Added LineString::extractLineString(double, CloseRing) overload (#866)
  • JSON now supports conversion to/from binary formats (BSON/CBOR/MessagePack) (#842)
  • Added FileSystem::PathAppend() to join file paths (#825)
  • Added member variables to TextEditState to detect input completion via Tab or Enter key (#808)
  • Added Triangle::FromPoints() to create an isosceles triangle from base center, apex, and base length (#865)
  • Added PercentEncode() for percent-encoding strings (#864)
  • Added overload to NavMesh::query() that takes result destination by reference (#861)
  • Added Dot() and Cross() to Math::. Previously, member functions of Vec2, Vec3 etc. had to be used (#848)
  • Added functions to return only X or Y coordinates of rectangle edges and center (#853)
  • Added member function to return coordinates at (relativeX, relativeY) when top-left of rectangle is (0, 0) and bottom-right is (1, 1) (#850)
  • Updated bundled Font Awesome from 5.15.2 → 6.1.1 (#846)
  • Added member functions to Blob (#843)
  • Added Font::height(double size) (#830)
  • Updated bundled monochrome Noto Emoji (#816)
  • Added .horizontalAspectRatio() function to Point, Float2, Vec2, Rect, RectF, Image, Texture, Emoji, Scene::, RoundRect to return horizontal aspect ratio (#810, #812)
  • Added timestamp-related functions to Multiplayer_Photon (#807)
  • Added .joinRandomRoomOrCreate() to Multiplayer_Photon (#806)
  • Added NotImplementedError exception class (#787)

Usability Improvements

  • Improved CMake for Linux version (#829)
  • Specified boost version range in Linux CMakeLists.txt (#847)
  • Improved behavior of SimpleGUI::TextBox() (#832, #804)
  • Specified = delete for BigInt operator ""_big(long double x) to prevent misuse (#826)
  • Added documentation to several header files

Specification Changes

  • Improved string conversion for BigFloat (#839)
  • Changed return value of Multiplayer_Photon::getLocalPlayerID() to LocalPlayerID (#809)
  • Changed AsyncHTTPTask::isReady to const member function (#805)
  • Updated various third-party libraries (#801)
  • Updated engine files (#817)

Performance Improvements

  • Improved execution performance of NavMesh::query() (#861)
  • Improved constructors of HLSL and GLSL classes (#835)
  • Changed string arguments in SimpleGUI from const String&StringView (#827)
  • Improved execution performance when subtracting arithmetic types from BigInt, BigFloat (#822)
  • Improved constexpr support for Rect, RectF (#813)

Bug Fixes

  • Fixed bug where LineString::extractLineString() could return incorrect results (#862)
  • Fixed bug where .calculateRoundBuffer() of LineString with matching start and end points could fail (#860)
  • Fixed issue where NULL was replaced with empty string by macro on macOS and Linux (#858)
  • Fixed rendering corruption when passing invalid values to RoundRect::drawFrame() (#856)
  • Fixed member function name from .getVerticlaFOV().getVerticalFOV() in BasicCamera3D (#854)
  • Fixed compile failure bug with Grid::choice() (#840)
  • Fixed buffer overrun bug in Base64::Decode() under certain conditions (#837)
  • Fixed bug where Parse<double> was performed with float precision (#831)
  • Fixed incorrect Line-to-Line Intersect, IntersectAt judgment under certain conditions (#823)
  • Fixed comparison operator bugs in BigInt, BigFloat (#821)
  • Fixed bug where FileSystem::SelectFolder() on macOS and Linux did not append / to the result (#824)
  • Fixed bug where FileSystem::FullPath() result could be incorrect on macOS (#824)
  • Fixed typo in SFMT header/folder name (#818)
  • Fixed issue where TCPClient disconnection was not communicated to TCPServer on macOS (#799)

Contributions

  • nokotan: Updated Web version
  • MurakamiShun: Improved CMake for Linux version
  • m4saka: Fixed Line-to-Line Intersect, IntersectAt bugs
  • Raclamusi: Improvements and bug fixes for BigInt, BigFloat, documentation improvements
  • kestrel-90r: Fixed source file name typo
  • ShivAlley: Added math functions to Math::
  • tas9n: Improved AsyncHTTPTask
  • ROCKTAKEY: Improved CMakeLists.txt
  • yknishidate: Code improvements
  • agehama: Documentation improvements
  • curay168: Documentation improvements
v0.6.4 | 2022-05-21

New Features

  • Added support for Visual Studio 2022 17.2 and later (#790)
  • Added support for Xcode 13.3 and later (#753)
  • Added Multiplayer_Photon addon (multiplayer functionality) that works with Photon SDK (#734)
  • Added UV transform to 3D standard vertex shader constant buffer (#764)
  • Added MeshData::RoundedBox() (#769)
  • Added functionality to dynamically write waveforms to playing audio (#736)
  • Added option to disable notification sound in Windows toast notifications (#748)
  • Added DisjointSet (Union Find) (#742)
  • Made texture filter changeable in Shader::LinearToScreen() (#762)
  • Added Polygon::addHole() overload (#786)
  • Added option to avoid ligatures in Font (#792)
  • Added Periodic:: functions that return range -1.0 to 1.0 (#761)
  • Added function to set custom trigger for reload in ManagedScript (#768)
  • Added functionality to get files included in Script (#767)
  • Added JSON::push_back() (#725)
  • Added more overloads for String::replace() (#729)
  • Enabled specifying maximum level in ImageProcessing::GenerateMips() (#763)
  • Made enum values displayable in scripts (#774)
  • Added OpenMode, TextEncoding, TextReader, TextWriter to scripts (#775)
  • Added Parse functions to scripts (#782)
  • Added INI to scripts (#783)
  • Added Deserializer<MemoryViewReader> (#777)
  • Added Serializer<Writer>::operator ->() const (#776)
  • Added overloads for Geometry2D::Or() (#793)

Usability Improvements

  • (Unofficial) Improved ARM builds (#707)
  • Improved SceneManager code (#750)
  • Enabled map construction in NavMesh constructor (#785)

Specification Changes

Bug Fixes

  • Fixed bug in Circle::boundingRect() (#718)
  • Fixed return value of SimpleAnimation::isDone() (#710)
  • Fixed use after move bug in TextEditState::TextEditState(String&& defaultText) (#703)
  • Fixed bug where empty arrays could not be created with JSON class (#723)
  • Fixed warning in operator>>(basic_istream&, Color&) (#720)
  • Fixed failure of System::EnumActiveMonitors() in remote desktop environment (#719)
  • Fixed bug where loading non-existent file with TOMLReader did not result in failure (#732)
  • Fixed issue where message box could appear behind window on Windows (#706)
  • Fixed script binding bugs (#741)
  • Fixed bug where triangle orientation was reversed when 5th argument of Shape2D::Stairs() was false (#708)
  • Fixed bug where RectanglePacking was not available on macOS (#754)
  • Fixed Image and OpenCV integration in ARM builds (#778)
  • Fixed out-of-bounds access bug that could occur in SimpleGUI::ListBox() (#780)
  • Fixed WaveSample conversion bugs (#795)

Contributions

OpenSiv3D Challenge

  • 12 Photon: mak1a, Luke, sthairno

v0.6.3 | 2021-11-14

New Features

  • Added support for Visual Studio 2022 (#683)
  • Added list box to SimpleGUI (#659)
  • Updated bundled Color Emoji to support Unicode 14.0 emoji (#694)
  • Added icon font fallback to GUI font by default. Icons can be displayed in SimpleGUI text using icon codes like U"\U000F0493 Setting" (#698)
  • Windows version's System::EnumerateMonitors() now retrieves more distinguishable monitor names (#695)
  • Added MeshGlyph class to represent characters as 3D Mesh (#680)
  • Added Leap Motion device support for Windows version (#677)
  • Added support for mathematical constant τ (tau) representing 2π, such as Math::Tau and 0.5_tau (#673)
  • Enabled comparison operations between different types of Optional (#670)
  • Added .isNan(), .isInf() member functions to BigFloat (#669)
  • Implemented three-way comparison operator for Array, Optional, BigInt, BigFloat (#658)
  • Implemented three-way comparison operator for String, StringView, UUIDValue (#664)
  • Added overload for DrawableText::regionBase() (#666)
  • Added Platform::Windows::Keyboard::GetEvents() for Windows to get keyboard input at a frequency higher than refresh rate (#662)

Performance Improvements

  • Delayed script engine initialization to reduce application initialization time when not using script features (saves tens of milliseconds) (#657)
  • Simplified GLSL shader file license descriptions to slightly reduce file size (#687)
  • Made HalfFloat member functions constexpr (#689)

Usability Improvements

  • Made engine initialization possible without including NotoEmoji-Regular.ttf in engine resources (#684)
  • Added engine/font/min/siv3d-min.woff containing minimum required glyphs as an alternative to NotoSansCJK-Regular.ttc.zstdcmp or NotoSansJP-Regular.otf.zstdcmp (#682)
  • Added more supported languages for Windows installer (#671)

Specification Changes

  • Removed SIV3D_MAINLOOP_BEGIN as Web version now supports normal main loop (#674)
  • On macOS and Linux, logs are now output to std::clog and std::cerr instead of std::cout (#630)
  • Updated engine and example folders (#686)

Bug Fixes

  • Fixed incorrect positioning bug in DrawableText::draw(double, Arg:: ...) and DrawableText::region(double, Arg ...) (#665)
  • Fixed bug where Window::IsToggleFullscreenEnabled() always returned false on Windows (#699)
  • Fixed bug where HalfFloat{ 0.0f } == HalfFloat{ -0.0f } was false (#660)
  • Resolved warning when using CircularBase<float, Oclock> (#667)

Contributions

  • nokotan: Updated Web version
  • tetsurom: Improved HalfFloat implementation, improved Optional implementation, improved BigFloat implementation, implemented three-way comparison operators for various classes
v0.6.2 | 2021-09-29

Performance Improvements

  • Accelerated application startup on Windows (#650, #651)
  • Reduced memory / VRAM consumption (#648)

Bug Fixes

  • Fixed issue where frame rate could be lower than v0.4.3 when performing heavy drawing on Windows (#652)
  • Moved stdafx.h in Windows project template to Header Files filter (#653)
v0.6.1 | 2021-09-21

New Features

  • Added Graphics2D::SetSDFParameters(const TextStyle&), Graphics2D::SetMSDFParameters(const TextStyle&) for easily specifying parameters when drawing SDF / MSDF textures (#647)

Usability Improvements

  • Suppressed 2 IntelliSense warnings that occurred during build in Windows projects (#643)
  • Added documentation

Specification Changes

  • Monitor was renamed to MonitorInfo (#649)
  • UUID was renamed to UUIDValue

Bug Fixes

  • Fixed issue in v0.6.0 where left click was less likely to be detected when performing touch operations on Windows (#645)
  • Fixed compile error when including <Siv3D/Windows/Windows.hpp> in v0.6.0 (#644)
  • Fixed issue where Platform::Windows::GetHWND() was not implemented in v0.6.0 (#646)
  • Made MathParser not throw exceptions when passed an empty string (#641)
v0.6.0 | 2021-09-18

New Features

  • Added support for basic 3D drawing
  • Added support for C++20, utilizing Concepts, Designated initialization, [[nodiscard]] for constructors, spaceship operator, more constexpr, new standard library features, etc.
  • Added experimental Web version implementation (see OpenSiv3D for Web for details)
  • OpenGL backend is now available on Windows (see Tutorial 35 for details)
  • Added HTTP client functionality for asynchronous file downloads
  • Added HighDPI support by default
  • Added support for loading SVG files
  • Added support for loading MIDI files
  • Added VideoTexture class to handle videos as textures
  • Added functionality to get pen tablet input (pressure, tilt) on Windows
  • Custom vertex shaders can now be used in 2D drawing. Custom vertex and pixel shaders can also be used in 3D.
  • Added support for audio fade-in/fade-out (play, stop, volume, pan, speed) on all platforms
  • Added real-time audio filter functionality such as HPF, LPF, pitch shift
  • Character outlines and Polygons can now be obtained accurately
  • SDF / MSDF can now be specified as Font rendering format
  • Added support for Font scaled drawing, outlines, and shadows
  • Added support for streaming playback of audio files
  • Added regular expression functionality supporting String type
  • Added functionality to obfuscate strings embedded in executables
  • Added function to perform demangling
  • Added class that performs Kahan's summation algorithm
  • Added 128-bit integer types
  • Stopwatch and Timer can now use user-defined reference time interface ISteadyClock, making it easy to pause multiple Stopwatch and Timer collectively or make them progress slower/faster
  • TimeProfiler now provides more detailed statistics
  • Added functionality to load GeoJSON, a geospatial data exchange format
  • Added many mathematical constants
  • Added JSON class that integrates JSONReader, JSONWriter
  • Added SimpleAnimation class for simple keyframe animations
  • Added functions for statistical processing
  • Added functionality for color mapping based on values
  • Added many convenient member functions to vector classes
  • Added many convenient member functions to shape classes
  • Added heart shape, bidirectional arrow, Squircle shape to Shape2D
  • Added functionality to flexibly map textures to Polygon
  • Added option to allow 90° rotation in rectangle packing
  • Added functionality for homography transformation
  • Various random functions can now take random engines as arguments
  • Added UUID generation functionality
  • Added functionality to get environment variables
  • Added functionality to get command line arguments
  • More detailed information such as monitor physical size can now be obtained
  • Added detailed options for serial communication
  • Added text-to-speech functionality using Klatt method
  • Added support for reading WebP, TIFF image formats
  • Added support for reading Opus, AIFF, FLAC, MIDI, WMA audio formats
  • Image processing can now be applied to parts of images
  • Added GrabCut functionality
  • Improved QR code generation functionality
  • Improved VideoWriter
  • Sound font files can now be used
  • Added mouse cursor styles
  • Added function to get all key inputs
  • Asynchronous loading in asset management became more convenient
  • Added many example files
  • Navigation mesh became easier to use
  • Added Spline2D class
  • Added support for obtaining parts of shape outlines
  • Added support for shape Lerp
  • Added support for GPU-only triangle drawing
  • Added support for custom mouse cursors
  • Added functionality to group audio and adjust volume by group
  • Added support for getting Ogg Vorbis loop tags
  • Added Levenshtein distance functionality
  • Added concave hull functionality
  • Added flexible image decoder and encoder classes
  • Added random generation with closed/open intervals specified
  • Added build-time engine configuration functionality via SIV3D_SET()
  • Effect recursion is now possible
  • Added CJK fonts, Print now supports Chinese and Korean display
  • Added VideoReader class to load video files
  • Added 2D physics simulation functionality
  • Added Siv3D-kun pixel art assets
  • Added Siv3D-kun .obj 3D model file
  • Added Image::stamp()
  • Line::drawDoubleHeadedArrow() can now draw bidirectional arrows
  • Screenshot save shortcut key can now be customized
  • Significantly improved script functionality
  • Supported more combinations for 2D shape intersection detection
  • Added many 3D shape classes
  • Improved IME behavior on Linux
  • Added user addon functionality
  • Many other new features have been added

Performance Improvements

  • Windows app startup time reduced by several hundred milliseconds
  • Heterogeneous lookup improves runtime performance when looking up HashTable or HashSet with string literals or StringView
  • File reading/writing, loading image and audio files became faster
  • Improved speed of Parse / ParseOpt / ParseOr

Usability Improvements

  • Inline functions moved from .hpp files to .ipp files, making header files more readable
  • Windows projects now use precompiled files by default, speeding up builds

Specification Changes

  • Many bool function parameters replaced with named YesNo types, improving code readability
  • Optional type improved to behave more like C++ standard std::optional
  • HashTable type improved to behave more like C++ standard std::unordered_map
  • KDTree can now be used with shorter notation
  • ConcurrentTask was renamed to AsyncTask
  • Child process creation functions integrated into ChildProcess class
  • Unicode::FromWString() was renamed to Unicode::FromWstring()
  • Floating-point U"{}"_fmt(x)` now displays all significant digits
  • Time::Get~ now returns time since application start, not system uptime
  • CustomStopwatch was renamed to VariableSpeedStopwatch
  • FileSystem::SpecialFolderPath() was renamed to FileSystem::GetFolderPath()
  • FileSystem::UniqueFilePath() now uses UUID functionality to create names
  • ByteArray replaced with Blob and MemoryReader
  • CSVData was renamed to CSV
  • INIData was renamed to INI
  • JSONReader, JSONWriter integrated into JSON
  • EasingController was renamed to EasingAB
  • Sprite replaced with Buffer2D
  • Index arrays now use TriangleIndex
  • MessageBox specification changed
  • Toast notification specification changed
  • Object detection functionality replaced with CascadeClassifier
  • Key became Input
  • Updated emoji and icon datasets, significantly increasing available emoji and icon types
  • Extended maximum Image size from 8192px → 16384px per side
  • ConstantBuffer size 16 × N byte constraint removed
  • Parallel execution features can now be used without defining SIV3D_CONCURRENT macro
  • High DPI windows became default, SIV3D_WINDOWS_HIGH_DPI macro deprecated

Bug Fixes

  • Fixed bugs in Array parallel functions
  • Resolved platform differences in AsyncTask
  • Fixed bugs in Windows MakeDragDrop()
  • Fixed PPM image loading bugs
  • Improved random reproducibility across platforms
  • Fixed QR code generation bugs

Important Notes

  • Argument order of Math::SmoothDamp() has changed. Cannot be detected by compile errors
  • Font vertical writing feature temporarily unavailable
  • Natural language processing feature temporarily unavailable
  • SimpleGUIManager feature cancelled
  • NoiseGenerator class temporarily unavailable
  • Shift_JIS text files no longer supported
  • Scene resize mechanism changed (see Tutorial 15)
  • Emoji design changed
  • Random reproducibility not compatible with v0.4.3
  • 2D physics simulation changed to use cm as default unit
  • Drawing method per Glyph unit changed
  • Windows version automatically includes precompiled <Siv3D.hpp> in all source files. # include <Siv3D.hpp> in Main.cpp is effectively meaningless. If # define NO_S3D_USING is needed, do it in stdafx.h for precompiled header creation
  • Audio no longer holds data in Wave compatible format. .getWave() replaced with .getSamples(). GlobalAudio::BusGetSamples() is also available

Contributions

  • nokotan: Led Web version development
  • Ebishu-0309: Implemented many functions in Geometry2D::, Implementation of Shape2D::Squircle(), implemented .boundingRect() for Bezier2, Bezier3, code improvements
  • taotao54321: Fixed Grid, code improvements
  • sthairno: Improved IME processing on Linux
  • itakawa: Provided Siv3D-kun .obj file
  • take-cheeze: Set up CI using GitHub Actions
  • Luke256: Code improvements
  • YASAI03: Proposed and implemented HTTP client functionality SimpleHTTP
  • falrnd: Improved Geometry2D intersection detection
  • yurkth: Proposed and implemented GeoJSON related functionality
  • ianCK: Code improvements
  • lriki: Provided Siv3D-kun pixel art assets
  • Ryoga-exe: Fixed Color::gamma() bug
  • sivboard: Added script functionality implementation and bug fixes
  • agehama: Fixed PPM image loading bug
  • kurokoji: Added Linux MessageBox
  • ichi-raven: Code improvements
  • azaika: Design and implementation of JSON class

OpenSiv3D Challenge

v0.4 Generation

v0.4.3 | 2020-04-11

Previous Versions