4.2.2 | 23 May 2022 |
Added Turkish translation, thanks to Süleyman Saltuk Güngör. |
19 Dec 2021 |
(legacy iOS) Changed iOS Deployment Target to iOS 14, because Apple has stopped supporting iOS 12. Thus, in particular, I no longer have a maintainable iOS 12 device to test on. (legacy iOS) Added UINavigationBarAppearance so that navigation bars will have an opaque background when running on iOS 15. |
|
21 Oct 2021 |
(iOS) Changed UIRequiresFullScreen build setting from YES to NO. Once upon a time there might have been some reason that UIRequiresFullScreen was required for proper interaction with CMMotionManager, but I don't remember what the issue was, nor can I see any immediate problems with UIRequiresFullScreen = NO, other than the obvious fact that Curved Spaces looks best when it's got the full screen available. In any case, Curved Spaces will (if time permits) get replaced by a SwiftUI version (imitating the current SwiftUI version of Crystal Flight) and then later, I hope, get replaced with a VR version. |
|
4.2.1 | 3 Aug 2021 |
(iOS) Added Italian translation, thanks to Daniela, Isabella Eva and Davide Bigatti. (iOS) Updated Japanese translation, thanks to Tom Sawada. |
4.2 | 20 Jan 2021 |
(macOS) Runs natively on both Apple Silicon and Intel Macs. |
22 Nov 2020 |
Changed various GPU uniforms, colors in buffers, etc. to half-precision (__fp16 and faux_simd_half4) where appropriate. |
|
5 Nov 2020 |
Removed workaround for bug that function-constant assignments like |
|
4.1.5 | 18 Jul 2020 |
(Re-)added Spanish translation, thanks to Cristian Armendariz-Picon |
16 Jul 2020 |
Added Portuguese translation, thanks to Nuno Fernandes |
|
29 Jun 2020 |
Replaced manual texture loading with Asset Catalogs and MTKTextureLoader. |
|
16 Apr 2020 |
Renders to Wide Color (Display P3) when available. Some of the shared code that won't be needed in the upcoming SwiftUI versions of the Geometry Games apps has been migrated to "-LEGACY" files, to allow the SwiftUI versions to include desired utilities without including legacy cruft like PixelRGBA, ImageRGBA, etc. |
|
4.1.4 | 31 Mar 2020 |
(iOS) Converted launch screen format from .xib to .storyboard to comply with new App Store requirements. (iOS) Toolbar self-adjusts at runtime to default height for device (iPad or iPhone). (iOS) Made toolbar opaque to make it brighter. |
28 Nov 2019 |
Minor changes to Chinese translations of "Basic" / "Intermediate" / "Advanced". |
|
4.1.3 | 8 Nov 2019 |
Added spaces in support of the 3rd edition of The Shape of Space (see www.crcpress.com/The-Shape-of-Space/Weeks/p/book/9781138061217 ). Replaced functions deprecated in iOS 13 or macOS 10.15 with non-deprecated alternatives. |
4.1.2 | 10 Oct 2019 |
(iOS) Updated for compatibility with iOS 13. In particular, it delays the presentation of the initial popover until after the base view controller has finished setting up. |
4.1.1 | 11 Nov 2018 |
(macOS) Enabled Hardened Runtime to allow Notarization by Apple. |
31 Oct 2018 |
(iOS) Added screenshots for iPad Pro (3rd Gen). |
|
4.1 | 17 Oct 2018 |
(iOS) Table images, toolbar icons and other images re-created at @1x, @2x and @3x. Source files for those images all simplified and tidied up (now mostly as iDraw files). (iOS) Toolbar icons resized to 24pt, which is the new recommended size. |
16 Sep 2018 |
(iOS) Removed vestigial OpenGL ES code. |
|
13 Sep 2018 |
(iOS) Tests against an INCREMENTAL_PITCH_YAW_ROLL_THRESHOLD to avoid needlessly redrawing the scene when the scene isn't changing and the device is lying (almost) motionless on a table. |
|
5 Sep 2018 |
Replaced itsTilingRadius and itsDrawingRadius with itsHorizonRadius. Culls using bounding sphere instead of polyhedron to reduce CPU load. Tiles and culls to rigorously ensure that no "popping" can happen in the spherical and Euclidean cases. Fudges it a bit in the hyperbolic case because rigorously avoiding popping would incur too great a performance penalty (due to the exponentially increasing number of cells as a function of radius). |
|
4.0 | 5 Aug 2018 |
New: Curved Spaces for iOS Uses tilt-to-steer interface (with thanks to Daniela Bigatti and Mark Bell for this idea) |
5 Aug 2018 |
Graphics rewritten using Metal |
|
30 Apr 2018 |
(macOS) On multi-GPU systems, selects the GPU that's already running the displays attached to the main computer (but ignores any externally attached removable GPUs). If the system switches to a different GPU, this app switches to that GPU as well. (macOS) No longer calls [[NSNotificationCenter defaultCenter] removeObserver:self] because it's no longer necessary. |
|
14 Apr 2018 |
(macOS) Main content view is now layer-backed. When going fullscreen, avoids macOS 10.13.4 bug. |
|
28 Sep 2017 |
CPU code consistently uses "double" (rather than "float") for essentially everything. |
|
12 Dec 2016 |
(macOS) Exports images as PNG instead of TIFF. |
|
6 Dec 2016 |
(Mac) Mac version is now Metal-only. Reason: The Mac OpenGL version of the Geometry Games uses an older approach that would have been very time-consuming to rewrite using a CAOpenGLLayer to bring it into line with iOS OpenGL, iOS Metal and Mac Metal versions. It hardly seemed worth investing that much time into OpenGL code that would soon get phased out anyhow. In any case, users of older Macs will always be able to download an older, OpenGL-compatible version of each app. (Mac) Given that the Mac version is now Metal-only, it now requires macOS 10.12 or later. Reason: macOS 10.12 is the only version I can test the apps on, and I prefer not to release an app for earlier versions of the operating system, on which it's never been tested. |
|
30 Nov 2016 |
Created a single project document with targets for iOS and macOS. Created that single project document from scratch, to get rid of years of legacy cruft. |
|
3.7.1 | 19 July 2016 |
Modified touch interface to let rotations exactly track the mouse motion. |
21 June 2016 |
Added CURVED_SPACES_TOUCH_INTERFACE for immediate use on Win10 touchscreen computers, and as preparation for an iOS version as well. |
|
21 June 2016 |
(Win) Replaced GetCursorPos(), which gives the cursor position at the time of the call, with GET_X_LPARAM(lParam) and GET_Y_LPARAM(lParam), which gives the cursor position at the time of the event. |
|
15 May 2016 |
Separated OpenGL(ES)-specific data and code from graphics-system-independent data and code, in preparation for a migration from OpenGL(ES) to Metal on iOS and Mac (and maybe eventually to Vulkan on Android and to DX12 on Windows). |
|
3.7 | 17 Nov 2015 |
(Mac) Updated code for Mac OS X 10.10, replacing all deprecated method calls. Requires OpenGL 3.3. |
12 Nov 2015 |
(Mac) Converted memory management from Manual Retain-Release (MRR) to Automatic Reference Counting (ARC). |
|
16 Oct 2015 |
Suppressed the Language menu to avoid displaying UniHan characters incorrectly (and also because the Language menu wasn't really useful except in the Torus Games). |
|
19 Feb 2015 |
Added “back” buttons to Help pages' sample manifold files, and also tidied up the formatting. |
|
3.6.2 | 22 Aug 2014 |
Further migration to Char16. |
21 Aug 2014 |
Expanded visibility of OpenGL headers, so the ModelData can refer to OpenGL objects as GLuint instead of "unsigned int", thus improving clarity and avoiding integer conversion warnings. |
|
20 Aug 2014 |
Replaced L"…" → u"…" and L'·' → u'·'. The L syntax required -fshort-wchar to get 16-bit wide characters and generated copious warnings in Android, while the u syntax is part of the C11 standard. |
|
19 Aug 2014 |
Completed deferred maintenance of Windows version (accommodated changes from last 15 months when I had no Windows computer). |
|
16 Dec 2013 |
Handles localized text as UTF-16 instead of UTF-8. |
|
3.6.1 | 16 May 2013 |
(Win) Improved font quality (especially East Asian) on Windows Vista and newer. |
3.6 | 9 May 2013 |
First version requiring OpenGL 3.2 or OpenGL ES 2.0. |
3.5 | 2 May 2013 |
Last version compatible with OpenGL 2. |
3.4.8 | 30 Apr 2013 |
Public release of accumulated changes. |
24 Apr 2013 |
(Win) Moved much functionality from individual applications to shared code. (Win) Simplified implementation of various features. Removed cruft. |
|
5 Apr 2013 |
Added traditional Chinese (Hant) localization, separate from simplified Chinese (Hans) localization. |
|
8 Mar 2013 |
(Mac) Moved much functionality from individual applications to shared code. |
|
5 Mar 2013 |
Replaced platform-specific language lists with a single language list in app's common code. Simplified language menu handling. Moved endonyms and Win32 LANGIDs to Geometry Games shared code. |
|
28 Feb 2013 |
(Mac) Updated Objective-C syntax to use @{}, @[], @() and @autorelease. |
|
21 Nov 2012 |
(Mac) Re-organized instance variables, moving them from .h to .m files (@interface to @implementation) as allowed by the “new” Objective-C runtime. |
|
3.4.7 | 2 Oct 2012 |
(Win) To avoid bugs in Intel Integrated Graphics drivers, ignores VAO extension and directs all OpenGL 2 users (on Windows) to the legacy version of the program. Simplified extensions handling. |
3.4.6 | 25 Sep 2012 |
Added Chinese. Added Spanish. |
26 Aug 2012 |
Merged vertex shaders using #ifdef. |
|
27 Jun 2012 |
Public version offers mutually orthogonal sets of Clifford parallels. |
|
25 Jun 2012 |
Deeper tilings (best depth on computers from 2008 or later [i.e. OpenGL 3 era hardware]). |
|
12 Jun 2012 |
(Mac) imageAsBitmapImageRepOfSize rescales images larger than 1024×1024 when running with OpenGL 2 (on older computers), but leaves the requested size unchanged when running with OpenGL 3 (on mid-aged or newer computers). |
|
3.4.5 | 3 Feb 2012 |
(Mac) imageAsBitmapImageRepOfSize no longer rejects sizes greater than 1024×1024, but instead rescales the image. |
3 Feb 2012 |
(Win) The application as a whole is now willing to use the OpenGL 2 FBO extension for Copy/Save. However, to ensure that all users get correct basic functionality, it calls glGenerateMipmap only on OpenGL 3.3 or higher. On OpenGL 3.2 or earlier it falls back to glTexParameteri(…, GL_GENERATE_MIPMAP, …) to avoid buggy glGenerateMipmap implementations. |
|
3.4.4 | 20 Jan 2012 |
First version to require Vertex Array Objects. |
3.4.3.1 | 25 Sep 2012 |
Same as 3.4.3, but with Chinese and Spanish. |
3.4.3 | 20 Jan 2012 |
Last version to run without Vertex Array Objects (superseded by 3.4.3.1). |
18 Jan 2012 |
Disentangled Vertex Array Object (VAO) code from Vertex Buffer Object (VBO) code. |
|
16 Dec 2011 |
(Mac) Created an opaque ModelData typedef and move much more functionality into the GeometryGamesView class to reduce code duplication among different applications. |
|
5 Dec 2011 |
(Mac) Created a shared GeometryGamesView class to reduce code duplication among different applications. |
|
3.4.2 | 18 Nov 2011 |
(Mac) The ModelData is now packaged as an Objective-C object. The WindowController sees the ModelData and the View. The View sees the ModelData. This design goes against Apple's advice to let the Controller mediate between the Model and the View (as illustrated by the 2-way arrows in the figure at developer.apple.com/technologies/mac/cocoa.html ), but ultimately achieves much cleaner code. As an added bonus, the pointers WindowController→ModelData, WindowController→View and View→ModelData all point in a consistent direction (no cycles), so they may all be strong (retained) references. There's no longer any need for weak (non-retained) references. (Mac) The Mac OS 10.6 style fullscreen mode would switch the first responder to the WindowController, regardless of what it had been previously. Now that Mac OS 10.7 provides a far cleaner fullscreen mode (and I've eliminated the 10.6 fullscreen mode entirely), the first responder is the View, not the WindowController. The View now handles all keystroke and mouse activity, while the WindowController handles the menus. |
3.4.1 | 28 Jul 2011 |
(Mac) Uses OpenGL 3.2 on Mac OS 10.7. (Mac) Mac OS 10.7 fullscreen mode support. (Mac) Assorted small changes for Mac OS 10.7 compatibility. |
2 Jun 2011 |
(Mac) Pauses animation when hidden (⌘H). |
|
28 May 2011 |
Added additional Clifford parallel options for use in talks: centerlines only; or 1, 2 or 3 mutually orthogonal sets. |
|
3.4 | 20 May 2011 |
Dirichlet domain wall segments use absolute dimensions for texture coordinates, not just aspect ratios. |
19 May 2011 |
Triangulates Dirichlet domain wall segments with 4n vertices each instead of 2n+2 vertices each. It's a fraction of a percent slower but gets the texture coordinates right even when the faces are irregular. |
|
April & May |
Lots of small improvements and maintenance, which I got bored of recording in the revision histories. Includes improvements to support older, buggier OpenGL drivers as well as newer ones. |
|
2 Apr 2011 |
(Mac) Rewrote user interface, replacing old single-class based architecture with simpler and more logical AppDelegate/WindowController/View architecture. (Mac) Replaced groups of related menu command handlers with single tag-based handlers. |
|
31 Mar 2011 |
(Mac) Instead of using an Open File panel to select a space, uses a custom NSOutlineView. In the short run this lets the Save Image code take full advantage of Mac OS's built-in ability to return to the last directory it saved an image in. In the long run it paves the way towards an iOS version, where the file system is effectively hidden from the user. |
|
30 Mar 2011 |
(Mac) Simplified mouse handling. |
|
14 Mar 2011 |
(Win) GeometryGames-Win32-LoadEntryPoints.c loads entry points based on OpenGL version and available extensions. |
|
9 Mar 2011 |
Added full-screen mode (publicly available). Added dual-projector polarized stereo 3D, for Manuel Arala Chaves at Atractor and Jouko Koskinen at Heureka. It's not part of the public version. To activate it, uncomment #define RUN_DUAL_MONITOR_FULLSCREEN_STEREO_MAC and/or #define RUN_DUAL_MONITOR_FULLSCREEN_STEREO_WIN and recompile. Selecting "Full Screen" will still give ordinary full-screen mode on a single-monitor system, but on a dual-monitor system will give dual-projector polarized stereo 3D. |
|
28 Feb 2011 |
Moved SetUpOneShader() to shared code, and simplified parameter handling. |
|
24 Feb 2011 |
Replaced application-wide texture settings (for mipmapping, anisotropic filtering, etc.) with per-texture settings. The finer control lays the foundation for iOS versions of the software, where trilinear mipmapping and anisotropic filtering are computationally more expensive. Moved SetUpOneTexture() to shared code. |
|
15 Feb 2011 |
Having Copy/Save Image read the back/front buffer was a bit dicey, so Copy/Save Image now draws into an offscreen buffer instead. The new system has the flexibility to draw the image at any size, not necessarily the view size, even though there's still no user interface to set a custom size. |
|
11 Feb 2011 |
Extension checking moved to shared Geometry Games utilities. |
|
31 Jan 2011 |
New, simpler algorithm for handing window dimensions. Eliminates ResizeGLView(). Removed and archived Preferences panel along with corresponding Help pages. Removed and archived compile-time option for touchscreen mode, because touchscreen mode, which was written for the Mineralien- und Mathematikmuseum, was eventually incorporated into the stand-alone Kristalle software. Show spaceship only in monoscopic 3D, to avoid "seeing the sides of our own nose". (Suppressing just the nearest image of the spaceship is dicier than you'd thing -- see discussion of "Hack A" and "Hack B" in correspondence with James Jennings.) |
|
23 Jan 2011 |
Uses shared GeometryGames-OpenGL.h. Graphics code made OpenGL ES compatible. |
|
20 Jan 2011 |
Removed GeoWall support (could eventually get replaced with dual-projector full-screen mode if needed). Added greyscale vs. color anaglyphic 3D. |
|
13 Nov 2010 |
Replaced version-based runtime choices with extension-based runtime choices. |
|
10 Nov 2010 |
Uses shared Geometry Games utilities. |
|
7 Jul 2010 |
VAO usage now controlled by extension availability instead of version number. This allows greater VAO usage, but more importantly it simplifies the code by eliminating lots of #ifdef/#else/#endif blocks. |
|
4 Jun 2010 |
Removed Smooth Edges from menu [and preference panel]. Multisample now gets used iff the program wants its and the host computer provides it. (Mac) Minor changes:
|
|
30 May 2010 |
(Mac) Includes copy of gl3.h bundled with source code. |
|
29 May 2010 |
Added 3-sphere, projective 3-space and odd-order lens spaces. Restricted Clifford parallels to 3-sphere. (Now that the user stay in the central copy of the fundamental domain, the Clifford parallels display consistently only in the 3-sphere. The 3-sphere is the Clifford parallels natural home.) |
|
28 May 2010 |
Spherical shader modified to shade back hemisphere correctly. Accepts manifolds with no polyhedral Dirichlet domain, to accommodate spaces like the 3-sphere and projective 3-space. Always draws nearest image of spaceship. (Previous hack had avoided user's left and right eyes seeing different sides of the spaceship in stereo mode, but caused flickering when user flew along a wall of the fundamental domain. Thanks to James Jennings for reporting this bug.) Always keeps user in central copy of fundamental domain. (Previous hack had allowed display of Clifford parallels even in spherical spaces that didn't respect the particular finite set of Clifford parallels being displayed, but caused images of spaceship to mysteriously come and go. The code is cleaner now that it display only objects that live in the space itself, not in the universal cover.) |
|
16 May 2010 |
Colored spaceship's transom grey, so that when it fills the horizon in a spherical space, the user can tell that it's directed away from him/her rather than towards him/her. Thanks to James Jennings for this suggestion. |
|
3.3 | 6 May 2010 |
Revised graphics code OpenGL 2.0 → OpenGL 3.0. Compiles against the forward-compatible gl3.h instead of the backward-compatible gl.h. Removed all fixed-function (OpenGL 1) graphics code. Removed "shaders" Help page. |
4 May 2010 |
Far clipping plane adjusts in real-time to avoid clipping the antipodal image of the user's spaceship even when the user has chosen a field of view greater than 90°. Thanks to James Jennings for bringing this problem to my attention, as well as for various other improvements. |
|
14 Jan 2010 |
Moved all colors from plain (r,g,b,α) to premultiplied (αr, αg, αb, α) for correct transparency and mipmap generation. |
|
12 Dec 2009 |
Removed anisotropic filtering control from UI. Replaced "anisotropic filtering" Help page with "shaders" Help page. |
|
5 Dec 2009 |
Reorganized texture management. |
|
17 Nov 2009 |
Added side-by-side stereoscopic 3D for display on polarized lens systems like GeoWall. |
|
16 Nov 2009 |
Revised ResizeGLView() for greater flexibility. |
|
5 Nov 2009 |
Fixed error in call to glDrawRangeElements() that had been causing the spinning Earth to render incorrectly. |
|
3.2 OpenGL 1 archive |
29 Oct 2009 |
Reorganized drawing code to use programmable vertex and fragment shaders (OpenGL 2.0) instead of old-style fixed function pipeline (OpenGL 1.5). New code uses generic vertex attributes for forward compatibility with OpenGL 3.2. |
29 Oct 2009 |
Minor user interface improvements. |
|
28 Oct 2009 |
Set tiling radius and drawing radius according to the SpaceType, to allow deeper tilings in flat spaces than in hyperbolic ones. |
|
28 Oct 2009 |
Added spaceship to mark user's position and orientation in the manifold. |
|
26 Oct 2009 |
(Win) Simplified loading of Open GL entry points. |
|
21 Sep 2009 |
(Mac) Added workaround for Mac OS 10.6 OpenGL performance issue when fog is enabled. [This issue disappared when Curved Spaces moved to programmable shaders (OpenGL 2.0), and the workaround has been removed.] |
|
20 Sep 2009 |
(Mac) Migrated NSString literals with UTF-8 to newer, simpler format. |
|
20 Sep 2009 |
Rewrote menu translation code for Mac OS 10.6 compatibility. |
|
17 May 2009 |
Moved responsibility for requesting a display redraw from platform-dependent code to platform-independent code. Minor changes for OpenGL ES compatibility. |
|
4 May 2009 |
Minor maintenance on Win32 user interface |
|
3.1 | 22 Apr 2009 |
Reorganized drawing code to use Vertex Buffer Objects instead of display lists, because displays lists are deprecated in standard OpenGL and don't exist at all in OpenGL ES. New drawing code almost doubles the frame rate for large hyperbolic tilings (e.g. from 96fps to 186fps for the default scene) on current hardware. Note to self: glMultiDrawArrays() turned out to be a performance disaster. Replaced OpenGL quads with generic OpenGL meshes. Added data persistence ("user prefs" on Mac, "registry keys" on Windows) so KaleidoTile now remembers the multisampling ("Smooth Edges") setting from a previous session. |
10 Feb 2009 |
Simplified default language initialization on Mac OS X, eliminating LanguageCode.strings files. |
|
28 Jan 2009 |
Vertex shader avoids negative fog coordinate, which the MacBook OpenGL implementation would take the absolute value of. |
|
3.0.5 | 9 Nov 2008 |
Trivial tidying of code. Cosmetic improvements to user interface. |
17 Oct 2008 |
Avoids calling ErrorMessage() when the OpenGL context is active. |
|
8 Oct 2008 |
Provides a clear explanation if the application gets separated from its supporting files. |
|
4 Sep 2008 |
Re-organized internationalization paradigm so that
Suspends continuous redraw when display is static. |
|
3.0.4 | 4 Aug 2008 |
Re-organized internationalization paradigm on Mac OS X, to avoid maintaining multiple copies of the NIB file. Added Japanese, thanks to Tatsu Takeuchi. |
3.0.3 | 8 May 2007 |
(Win) Added Copy Image and Save Image… that work correctly with multisampling. |
3.0.2 | 5 Apr 2007 |
Minor menu reorganization. Added technical FAQs to website. (Mac) Modified image copying code to accommodate Mac OS 10.3.9. (Win) Revised error messages to refer to technical FAQ. |
3.0.1 | 6 Feb 2007 |
French added, thanks to Roland Lehoucq. For consistency with the Torus Games, double-click as well as single-click works to exit navigational mode. Documentation upgraded to HTML 4.0.1. Discontinued Win95 version. Fixed bug: Avoids calling glDisable() for unsupported features. Thanks to Paul Chavez for helping track this down. |
3.0 | 8 Nov 2006 |
MacOS X version added. Extensive internal re-organization to isolate platform-independent code from UI. Help Book written. Spinning Earth (as in Curved Spaces 1) added, with level-of-detail rendering. Texturing respects aspect ratio to avoid "texture creep". |
2.0 | 20 Jun 2006 |
Faster tiling algorithm: replaced O(n²) algorithm with O(n log n) algorithm. Faster rendering algorithm: 2-3 times faster. Smoother rendering algorithm: cells added and removed on a frame-by-frame basis. More flexible fog algorithm: automatically adapts to depth of tiling. Uses programmable vertex shader to move fog computation from CPU to GPU. Walls of fundamental cell may be fully closed, fully open or anywhere in between. Vertex figures displayed upon demand. Clifford parallels displayed upon demand (in spherical spaces). |
1.0 | ~2000 |
Original Curved Spaces 1.0 release. |