Compare commits

..

540 Commits

Author SHA1 Message Date
gary 59dbfe0db1 [studio] Cleanup
Build / build (push) Successful in 1m11s
2026-05-17 15:05:44 -05:00
gary 2c50ce48ed [ox/std] Add Result::reoriginate functions 2026-05-17 15:02:07 -05:00
gary 72e16cb285 [studio] Change output of Claw OC files to make them recognizable as test files 2026-05-17 14:53:42 -05:00
gary d1e410ac55 [ox/std] Add caseInsensitiveEquals 2026-05-17 14:30:43 -05:00
gary be32d575f5 [ox/claw] Add writeClaw Writer_c variant 2026-05-17 14:29:43 -05:00
gary f24929f421 [studio] Remove extra copyright header
Build / build (push) Successful in 1m16s
2026-05-16 16:44:13 -05:00
gary 2d426d2bb3 [studio] Fix change-format format reading
Build / build (push) Successful in 1m13s
2026-05-16 16:29:19 -05:00
gary f89af6fcb3 [studio] Fix change-format usage message
Build / build (push) Successful in 1m12s
2026-05-16 16:17:00 -05:00
gary 899eaa9dce [studio] Add change-format subcommand
Build / build (push) Successful in 1m13s
2026-05-16 16:12:29 -05:00
gary d32b1033c3 [nostalgia/gfx/studio] Cleanup 2026-05-16 14:11:20 -05:00
gary 1d2814bbd0 Merge commit '2e119b5683574d7243d30a9ba33c05b06bcdb8a4'
Build / build (push) Successful in 1m15s
2026-05-08 22:36:42 -05:00
gary 2e119b5683 Squashed 'deps/oxlib/' changes from 170d6e35a..a787fef61
a787fef61 Uncomment code that from Pico fix
298184d58 Fix build warning
51999199c [ox] Fix build problems on Raspberry Pi Pico
682fc5b85 Merge commit 'c286e3794d9d4cc571671548ad765ce370bcfcb4'
94209fd74 [ox/std] Make is_integral use raw types

git-subtree-dir: deps/oxlib
git-subtree-split: a787fef6147dcd11519c24f992289349f0ec355d
2026-05-08 22:36:42 -05:00
gary 46c6ba2e17 Merge commit 'c286e3794d9d4cc571671548ad765ce370bcfcb4' 2026-05-07 01:18:59 -05:00
gary c286e3794d Squashed 'deps/oxlib/' changes from 85f17c418..170d6e35a
170d6e35a [ox] Add dist to gitignore
83fd814d6 [ox] Bump required CMake version

git-subtree-dir: deps/oxlib
git-subtree-split: 170d6e35a67739b600aa95abfff7269972a45c00
2026-05-07 01:18:59 -05:00
gary 45cbede7e2 [ox/std] Make is_integral use raw types 2026-05-07 01:16:57 -05:00
gary 5aa133a788 [nostalgia] Fix Ox references
Build / build (push) Successful in 1m9s
2026-05-06 02:48:59 -05:00
gary fafe78ba80 [nostalgia] Adjust for new ox path
Build / build (push) Successful in 1m9s
2026-05-06 01:40:34 -05:00
gary 69fcd7ad10 Squashed 'deps/oxlib/' content from commit 85f17c41
git-subtree-dir: deps/oxlib
git-subtree-split: 85f17c4188e266b82ba8858d21f67289c72e7b9a
2026-05-06 01:38:00 -05:00
gary 335a61bd79 Merge commit '69fcd7ad1056940166a5d9524b4f03578f680834' as 'deps/oxlib' 2026-05-06 01:38:00 -05:00
gary 572b8b2c78 [ox] Remove Ox 2026-05-06 01:15:07 -05:00
gary 88e901e214 [keel] Cleanup
Build / build (push) Successful in 1m9s
2026-04-29 01:55:32 -05:00
gary d42e10fcbe [olympic] Cleanup pkg-gba 2026-04-29 01:52:59 -05:00
gary bc88333a59 [studio/modlib] Update ImGui drag/drop, other cleanup 2026-04-29 01:50:39 -05:00
gary 4048753205 [ox/std] Add call and logCatch for safe calling of throwing functions 2026-04-29 01:47:15 -05:00
gary 5c146c6660 [ox/std] Add call and logCatch for safe calling of throwing functions 2026-04-29 01:45:56 -05:00
gary 0885919dbd [ox/std] Cleanup 2026-04-29 01:44:43 -05:00
gary 8c7d8cd08b [ox/model] Cleanup TypeNameCatcher and TypeInfoCatcher 2026-04-29 01:42:53 -05:00
gary 110d4a2e6a [keel] Cleanup
Build / build (push) Successful in 1m16s
2026-02-07 15:29:53 -06:00
gary e29a50d0dc [ox] Rename UniquePtr to UPtr 2026-02-07 14:17:55 -06:00
gary 93d16cafb2 [ox/std] Add Error::throwException() 2026-02-07 14:15:15 -06:00
gary 54d7c706eb [studio] Make FileInfo free resources on close
Build / build (push) Successful in 1m15s
2026-02-06 21:36:39 -06:00
gary c9cb186462 [studio] Cleanup useless complexity
Build / build (push) Successful in 1m16s
2026-02-06 21:28:46 -06:00
gary f204d01a3d [studio] FileInfo: reset file info when opening
Build / build (push) Successful in 1m12s
2026-02-05 22:22:07 -06:00
gary 62337bd29e [studio] FileInfo: Rename ID to Asset ID, allow for no value of fields
Build / build (push) Successful in 1m12s
2026-02-05 22:15:00 -06:00
gary 7b24b33849 [nostalgia] Update release notes
Build / build (push) Successful in 1m11s
2026-02-05 21:40:10 -06:00
gary 86c2c26d8d [studio] Fix warning
Build / build (push) Successful in 1m11s
2026-02-05 21:35:39 -06:00
gary f8b2700ea7 [studio] Add Get Info file dialog
Build / build (push) Failing after 1m9s
2026-02-05 21:32:36 -06:00
gary 7848cbbbff [nostalgia/gfx/keel] Cleanup
Build / build (push) Successful in 1m9s
2026-02-03 02:22:58 -06:00
gary 96c5223e44 [ox/std] Fix possible false positive in HashMap::operator==
Build / build (push) Successful in 1m13s
2026-01-30 21:03:58 -06:00
gary d19b848427 [ox/std] Reduce AnyPtr to 2/3 the size
Build / build (push) Successful in 1m13s
2026-01-30 20:54:17 -06:00
gary c812051ec0 [nostalgia/gfx/studio] Cleanup
Build / build (push) Successful in 1m11s
2026-01-30 00:31:19 -06:00
gary 3c07eb2df7 [nostalgia/gfx/studio] Cleanup
Build / build (push) Successful in 1m7s
2026-01-29 19:30:32 -06:00
gary ca851e1059 [ox] Cleanup some expensive headers
Build / build (push) Successful in 1m7s
2026-01-28 22:55:26 -06:00
gary 11e75cb6ca [ox/std] Add Error::reoriginate
Build / build (push) Successful in 1m13s
2026-01-28 00:46:55 -06:00
gary 8c4add57e4 [ox/std] Fix build
Build / build (push) Successful in 1m17s
2026-01-28 00:45:26 -06:00
gary 5e1698a321 [ox/std] Cleanup serialize code
Build / build (push) Failing after 52s
2026-01-27 23:15:53 -06:00
gary 3e95bc0842 [ox/model] Update style for ModelHandlerAdaptor 2026-01-27 23:09:53 -06:00
gary 58e19fad48 [ox] Cleanup MetalClawWriter and FieldBitmapWriter 2026-01-27 23:05:03 -06:00
gary a3a56b24e8 [ox/std] Fix is_integer_v 2026-01-27 23:03:07 -06:00
gary 7681830ca6 [ox] Remove some unnecessary const_casts 2026-01-27 23:01:36 -06:00
gary 46a7331754 [ox/mc] Cleanup, fix possible overflow bug
Build / build (push) Successful in 1m8s
2026-01-26 00:55:55 -06:00
gary 56c19ad2a6 [ox/std] Add remove_pointer_t alias 2026-01-26 00:46:12 -06:00
gary c6ecadf9a8 [ox/mc] Cleanup
Build / build (push) Successful in 1m10s
2026-01-26 00:21:16 -06:00
gary 2ed469f2dd [ox] Cleanup
Build / build (push) Successful in 1m11s
2026-01-25 23:58:46 -06:00
gary 53aea9731d [ox] Cleanup
Build / build (push) Successful in 1m9s
2026-01-25 23:46:54 -06:00
gary 0e028ff653 [ox] Cleanup
Build / build (push) Successful in 1m10s
2026-01-25 22:05:49 -06:00
gary 07688a2c29 [ox] Remove oxExpect macro
Build / build (push) Successful in 1m9s
2026-01-25 21:52:26 -06:00
gary 9ce4d3f8c7 [keel,nostalgia/gfx] Minor cleanup of tests 2026-01-25 21:51:10 -06:00
gary 4aa8255c55 [ox] Update formatting in recently edited files
Build / build (push) Successful in 1m11s
2026-01-25 21:26:44 -06:00
gary bfdfc10425 [nostalgia/gfx] Update panic
Build / build (push) Successful in 1m11s
2026-01-25 21:11:54 -06:00
gary cdd574d873 [ox] Change panic and assert to use std::source_location 2026-01-25 21:11:22 -06:00
gary bc05bd12e5 [ox/model] Rename and fix isBString helpers
Build / build (push) Successful in 1m8s
2026-01-25 02:06:14 -06:00
gary b754c66cf5 [ox] Remove enable_if
Build / build (push) Successful in 1m8s
2026-01-23 01:38:53 -06:00
gary 6a42303239 [ox/std] Slight optimization 2026-01-23 01:38:31 -06:00
gary 7477ede222 [ox/std] Cleanup some enable_ifs
Build / build (push) Successful in 1m7s
2026-01-21 23:35:19 -06:00
gary 65e3153dda [ox/std] Add Union_c concept 2026-01-21 23:35:02 -06:00
gary 53a224cf8f [ox/std] Cleanup 2026-01-21 23:34:36 -06:00
gary 592e641ba9 [ox/std] Fix writeItoa to work with max length 64 bit ints
Build / build (push) Successful in 1m8s
2026-01-21 23:28:13 -06:00
gary 689da4a019 [ox] Update docs
Build / build (push) Successful in 1m10s
2026-01-21 21:04:17 -06:00
gary bdf7755ee2 [nostalgia/developer-handbook] Update developer handbook 2026-01-21 21:03:47 -06:00
gary 63f627377d [ox/std] Remove excess char from intToStr return
Build / build (push) Successful in 1m9s
2026-01-20 01:29:37 -06:00
gary ff9002ad9a [nostalgia/developer-handbook] Update error handling section
Build / build (push) Successful in 1m8s
2026-01-20 01:22:05 -06:00
gary 4d0da022cf [ox] Update error handling docs
Build / build (push) Successful in 1m8s
2026-01-20 00:47:51 -06:00
gary 02332d99b5 [ox] Fix issues in String Types section of docs
Build / build (push) Successful in 1m8s
2026-01-20 00:26:38 -06:00
gary a566ed2a8b [ox/std] Fix writeItoa to work with negatives
Build / build (push) Successful in 1m9s
2026-01-19 23:00:16 -06:00
gary 815c3d19bf [ox/std] Make StringLiteral constructors non-explicit
Build / build (push) Successful in 1m8s
2026-01-19 21:00:58 -06:00
gary 522bb14f18 [ox/std] Fix intToStr to have room for negatives 2026-01-19 21:00:12 -06:00
gary f40d5515f9 [ox] Add strings section to docs
Build / build (push) Successful in 1m11s
2026-01-18 19:00:24 -06:00
gary 941d1d90dc [ox/std] Add Vector::reserveResize
Build / build (push) Successful in 1m15s
2026-01-07 21:48:04 -06:00
gary 3e880dcdcc [nostalgia/gfx/studio] Remove unused EBO management
Build / build (push) Successful in 1m16s
2026-01-07 21:33:16 -06:00
gary 03328ac10f [turbine/glfw] Fix to handle null click handler
Build / build (push) Successful in 1m9s
2025-12-03 20:44:01 -06:00
gary 63d0abaa3c [nostalgia/gfx/gba] Remove teagba scroll bg function call
Build / build (push) Successful in 1m15s
2025-11-22 23:53:18 -06:00
gary ef2a8cda77 [teagba] Remove bg scroll, cleanup 2025-11-22 23:53:04 -06:00
gary 671fa54f6f [ox/std] Make ox::Vector::push_back comply with std::vector::push_back
Build / build (push) Successful in 1m12s
2025-09-10 23:47:36 -05:00
gary 517432679b [nostalgia/gfx/studio] Cleanup includes
Build / build (push) Successful in 1m15s
2025-09-04 22:40:58 -05:00
gary b31c01f724 [keel,studio] Cleanup 2025-09-04 22:37:01 -05:00
gary f41213f13f [ox/std] Fix channel format for oxLogError
Build / build (push) Successful in 1m8s
2025-09-04 21:11:52 -05:00
gary 28be7c4650 [ox/fs] Fix write functions to take SpanViews 2025-09-04 21:11:52 -05:00
gary 2f340b13b2 [ox/std] Fix Windows GCC build
Build / build (push) Successful in 1m15s
2025-09-04 01:21:13 -05:00
gary 312c818866 [nostalgia/gfx/studio] Remove unused variable
Build / build (push) Successful in 1m10s
2025-08-29 22:18:37 -05:00
gary 0d69d0c4a2 [ox/std] Remove oxDebug line
Build / build (push) Successful in 1m18s
2025-08-19 21:02:13 -05:00
gary 81a0b8c820 [ox/mc] Remove an oxDebug line
Build / build (push) Failing after 22s
2025-08-19 20:59:51 -05:00
gary 172b5aee90 [ox/oc] Remove an oxDebug line
Build / build (push) Failing after 17s
2025-08-19 20:58:32 -05:00
gary 2b5338a9df [nostalgia] Improve Makefile dependency handling
Build / build (push) Failing after 9s
2025-08-17 14:10:45 -05:00
gary 8a430faf4c [keel] Cleanup
Build / build (push) Successful in 1m19s
2025-08-12 22:57:13 -05:00
gary e59382dd60 [keel] Address undefined behavior 2025-08-12 22:39:08 -05:00
gary 3006e77ef3 [ox/std] Add and integrate std::launder
Build / build (push) Successful in 1m30s
2025-08-12 22:37:21 -05:00
gary 59c112a69c [studio] Fix navigate back not to iterate on the first item twice
Build / build (push) Successful in 1m55s
2025-08-09 15:15:34 -05:00
gary 31b39982c5 [keel] Fix AssetRef to call incRef on initial creation of ref, not just copy
Build / build (push) Successful in 1m18s
2025-07-31 22:06:52 -05:00
gary 5476417be2 [nostalgia] Add release notes for d2025.07.0
Build / build (push) Successful in 1m18s
2025-07-31 01:05:29 -05:00
gary e03be694c2 Merge commit 'b67b95767b7bfcd5f618ebc8e14ddbc83edcbe36'
Build / build (push) Successful in 1m37s
2025-07-31 00:41:06 -05:00
gary 490c0368bc [nostalgia/gfx] Add lists for file extensions 2025-07-31 00:39:55 -05:00
gary a24fc407c5 [ox/std] Fix MSVC build 2025-07-31 00:38:26 -05:00
gary e38b85b4f4 [studio] Eliminate redundant serialization and deserialization
Build / build (push) Successful in 1m42s
2025-07-30 21:48:44 -05:00
gary f7c3c02c4c Merge commit '1bfb7f99c215e2c74556bd3281f44962b8faaa96'
Build / build (push) Successful in 1m35s
2025-07-30 00:42:42 -05:00
gary 8f0f1fea39 [nostalgia/gfx/studio] Make editors use Project::loadObj for their primary assets 2025-07-30 00:37:59 -05:00
gary 2f36a3f6f0 [studio] Add File -> Reload Project menu item 2025-07-30 00:37:23 -05:00
gary 07e5bf9054 [keel] Make keel attempt to delete all existing assets when FS is changed 2025-07-30 00:36:56 -05:00
gary aacff3daf9 [ox/std] Fix UPtr::reset to conform to unique_ptr::reset 2025-07-30 00:29:34 -05:00
gary e27eee50f0 [teagba] Add set and scroll background offset functions
Build / build (push) Successful in 1m15s
2025-07-29 00:34:41 -05:00
gary fd610454d6 [nostalgia/gfx] Fix compiler warning
Build / build (push) Failing after 24s
2025-07-29 00:30:17 -05:00
gary e61d4647b5 [nostalgia/gfx] Fix BG tilesheet loading, add background offset functions
Build / build (push) Failing after 20s
2025-07-28 21:54:50 -05:00
gary c275c5f5e6 [hull] Disable building hull for now
Build / build (push) Successful in 1m22s
2025-07-26 18:33:24 -05:00
gary fbf49ba511 [ox/std] Add pre- and post-increment operators to Span
Build / build (push) Failing after 8s
2025-07-26 18:31:55 -05:00
gary 92f74b27d1 [ox/std] Add null check for deallocating in consteval context Vector 2025-07-26 18:31:41 -05:00
gary 934f0c9232 [ox/std] Add beginsWith and endsWith variants that that cingle chars 2025-07-26 18:31:03 -05:00
gary ee9a3e1152 [ox/std] Cleanup 2025-07-26 18:30:12 -05:00
gary 16886cdf1c [hull] Add start on command interpreter 2025-07-26 18:29:51 -05:00
gary 08b9508d83 [ox/std] Give std::ignore a named type 2025-07-26 15:09:10 -05:00
gary 69bd968f98 [nostalgia/player] Fix build
Build / build (push) Successful in 1m28s
2025-07-25 22:54:43 -05:00
gary 4e7dc66610 [nostalgia,olympic] Rename string len() functions to size() 2025-07-25 22:48:08 -05:00
gary bea0cf5a0c [ox/std] Rename string len() functions to size() 2025-07-25 22:47:56 -05:00
gary c7bc2a954f [nostalgia/gfx] Style update
Build / build (push) Successful in 1m15s
2025-07-24 21:35:21 -05:00
gary 7372036a0a [nostalgia/gfx] Add function missing from header
Build / build (push) Successful in 1m14s
2025-07-24 21:25:26 -05:00
gary 7461d832b6 [nostalgia/gfx/studio,studio] Fix CLI tool output to only show usage if no args given
Build / build (push) Successful in 1m19s
2025-07-24 21:17:58 -05:00
gary 6052798fea Merge commit 'dceeaaa9302b7e9ce85fa773fc187bc593f3c93c'
Build / build (push) Successful in 1m16s
2025-07-24 01:58:27 -05:00
gary fae1e73e54 [nostalgia/gfx] Make getSubSheet check root subsheet name
Build / build (push) Successful in 1m17s
2025-07-24 01:54:06 -05:00
gary 51f2905c9c [nostalgia/gfx/studio] Make TileSheetEditor use export-tilesheet functions for export, fix exporting Root subsheet
Build / build (push) Successful in 1m18s
2025-07-24 01:45:27 -05:00
gary 0c866d1b96 [studio,nostalgia/gfx] Add system for adding sub-commands in Modules, add export-tilesheet command
Build / build (push) Successful in 1m16s
2025-07-24 01:29:09 -05:00
gary fdf39d1a25 [ox/std] Add Result::transformError 2025-07-24 01:24:11 -05:00
gary a523a75e4b [ox/std] Add missing include to StringParam 2025-07-24 01:23:58 -05:00
gary cdaa64ed3f [ox/clargs] Fix arg parsing for first '-' 2025-07-24 01:23:31 -05:00
gary 801d35c823 [keel] Make type converters work with functions that take const src arg 2025-07-23 00:41:33 -05:00
gary 37b5fcc0f7 [teagba] Put parentheses around all registers
Build / build (push) Successful in 1m18s
2025-07-07 23:36:34 -05:00
gary f5f2c3bee6 [studio/applib] Make Studio remove files unable to be opened from open file list in config 2025-07-07 23:35:28 -05:00
gary f6ef2b5acb [turbine,nostalgia] Make memory regions cast to bounded ox::Arrays
Build / build (push) Successful in 1m16s
2025-06-29 23:32:36 -05:00
gary bf958a4a6e [teagba] Make memory regions cast to bounded ox::Arrays 2025-06-29 23:32:11 -05:00
gary 6a70e478a6 [nostalgia/gfx] Cleanup 2025-06-29 17:46:13 -05:00
gary 671b8edaad [ox/std] Make StringLiteral constructors consteval
Build / build (push) Successful in 1m29s
2025-06-27 23:05:42 -05:00
gary 952637a1ea Merge commit 'cbf4414fcaf00c00a2abf73b5c04a055180ad980'
Build / build (push) Successful in 1m37s
2025-06-25 21:33:16 -05:00
gary 7569698e95 [nostalgia,studio] Add FileExts_TileSheet const, and corresponding FilePickerPopup constructor 2025-06-25 21:30:49 -05:00
gary 21713ba945 [ox/std] Fix StringLiteral::operator= to work with DevkitARM 2025-06-25 21:29:41 -05:00
gary 73273b6fa7 [nostalgia/gfx] Add isTileSheet function for checking paths against both file extensions 2025-06-25 21:03:45 -05:00
gary 9f040392c7 [olympic,nostalgia] Cleanup style
Build / build (push) Successful in 1m18s
2025-06-24 01:59:22 -05:00
gary f4f7e5d053 Merge commit '9b5f7886cadc5c3dc826d00fa5b2e71696151dfd' 2025-06-23 20:49:01 -05:00
gary f847289bd4 [glutils] Cleanup
Build / build (push) Successful in 1m20s
2025-06-23 01:39:47 -05:00
gary 94b0020d15 [nostalgia,olympic] Cleanup
Build / build (push) Successful in 1m16s
2025-06-23 01:30:33 -05:00
gary c54c0bad38 [teagba] Cleanup
Build / build (push) Successful in 1m20s
2025-06-23 01:03:33 -05:00
gary b9ffae0269 [nostalgia/gfx] Cleanup
Build / build (push) Successful in 1m18s
2025-06-23 00:47:46 -05:00
gary 003f3e01c6 [nostalgia] Update release notes 2025-06-22 01:01:09 -05:00
gary 9028e74af0 [nostalgia/gfx/studio/tilesheet] Disable paste when nothing is selected 2025-06-22 01:00:56 -05:00
gary f5ccab5f2c [studio] Cleanup 2025-06-21 19:19:39 -05:00
gary c27726a4a9 Merge commit '6bbcae10cc7b21b73171ec0ff196f4baf6304404' 2025-06-21 14:29:47 -05:00
gary 37cfa927d1 [nostalgia/gfx] Address a couple of implicit conversions
Build / build (push) Successful in 1m19s
2025-06-21 14:16:17 -05:00
gary 0efed70b57 [studio] Fix Studio to clear editor pointers when opening a new project
Build / build (push) Successful in 1m20s
2025-06-21 14:12:45 -05:00
gary baf5fa3199 [nostalgia] Move d2025.05.2 release notes to d2025.06.0
Build / build (push) Successful in 1m19s
2025-06-21 08:54:57 -05:00
gary bd24a775b2 Merge commit '7371df429534f264c179684412f6197f7968ebfa' 2025-06-21 08:48:13 -05:00
gary 857587c18b [studio] Cleanup
Build / build (push) Successful in 1m16s
2025-06-21 08:31:27 -05:00
gary eb3d53c955 [studio] Cleanup
Build / build (push) Successful in 1m15s
2025-06-21 08:22:13 -05:00
gary 14d58f3f5b [studio] Fix Navigation shortcuts for non-Mac systems
Build / build (push) Successful in 1m18s
2025-06-21 08:13:14 -05:00
gary 5f2397903a [studio,nostalgia/gfx/studio/tilesheet] Fix copy/cut/paste enablement when there is no selection
Build / build (push) Successful in 2m2s
2025-06-21 00:20:06 -05:00
gary 58e0ecb469 [studio] Make FilePickerPopup accept on double click of a file
Build / build (push) Successful in 1m22s
2025-06-20 23:58:29 -05:00
gary 8838bf420e [studio] Fix to properly copy file that has the same name as deleted file
Build / build (push) Successful in 1m24s
2025-06-20 23:36:20 -05:00
gary bddc544d7c [nostalgia] Update release notes
Build / build (push) Successful in 1m33s
2025-06-20 22:48:39 -05:00
gary a9437191bf [studio,turbine] Add support for mouse back/forward buttons
Build / build (push) Successful in 1m30s
2025-06-20 22:44:09 -05:00
gary 9d8da7ccda [ox/std] Make strToInt return error for empty string
Build / build (push) Has been cancelled
2025-06-20 22:43:33 -05:00
gary 394b568e72 [studio] Add Back/Forward navigation
Build / build (push) Successful in 1m14s
2025-06-20 20:58:42 -05:00
gary 78e9f70db6 [nostalgia] Update release notes
Build / build (push) Successful in 1m20s
2025-06-19 23:58:42 -05:00
gary 12e5623fe6 [ox/logconn] Add exception handling for logger thread
Build / build (push) Successful in 1m18s
2025-06-19 23:56:26 -05:00
gary cfdfb0a8c9 [studio] Fix file deletion to close file even if not active 2025-06-19 23:55:47 -05:00
gary 56e665301f [studio] Cleanup
Build / build (push) Successful in 1m29s
2025-06-19 21:37:57 -05:00
gary 7415ce4bd9 [nostalgia/gfx/studio] Cleanup
Build / build (push) Successful in 2m53s
2025-06-17 20:45:24 -05:00
gary 05f42150a1 [olympic] Add new loc command to Makefile
Build / build (push) Successful in 1m19s
2025-06-09 21:29:27 -05:00
gary 8ea2bc6934 [nostalgia] Update release notes
Build / build (push) Successful in 1m16s
2025-06-09 00:22:17 -05:00
gary c780924122 [studio] Add [DEBUG] tag to About in debug builds
Build / build (push) Successful in 1m18s
2025-06-08 21:33:17 -05:00
gary 8c538560ca [nostalgia/gfx/studio/palette] Make RGB key shortcuts work when color channel inputs are focused
Build / build (push) Successful in 1m16s
2025-06-08 17:00:52 -05:00
gary c3e75bdb55 [nostalgia/gfx/studio/tilesheet] Cleanup
Build / build (push) Successful in 1m16s
2025-06-08 16:26:55 -05:00
gary 4419dff299 Merge commit '7688c05bac8c20bc267cae62ec78d55e5d0c493b' 2025-05-31 02:14:15 -05:00
gary e78c405046 [nostalgia/gfx] Cleanup
Build / build (push) Successful in 1m19s
2025-05-31 01:53:59 -05:00
gary 6b7c5d896e [nostalgia] Update release notes
Build / build (push) Successful in 1m14s
2025-05-31 01:48:07 -05:00
gary a33a73d73a [nostalgia/gfx/studio/palette] Add preview to color editor
Build / build (push) Successful in 1m16s
2025-05-31 01:34:00 -05:00
gary 536999c070 Merge commit '47eee1d56d591e3631d16e95a78ea3629ee312ee' 2025-05-30 23:38:53 -05:00
gary e1cfcc8b5f [nostalgia] Update release notes
Build / build (push) Successful in 1m13s
2025-05-30 23:37:58 -05:00
gary 514cb97835 [nostalgia/gfx/studio/tilesheet] Fix draw command to work on same pixel after switching subsheets 2025-05-30 23:32:51 -05:00
gary 4b5218c4f1 [nostalgia/gfx] Cleanup 2025-05-30 23:32:27 -05:00
gary 2ca77173d3 [keel] Add isUuidUrl function 2025-05-30 23:29:42 -05:00
gary cce5f52f96 [nostalgia/gfx/studio/tilesheet] Fix manual redo of draw actions, fix drawing to pixel 0, 0 as first action
Build / build (push) Successful in 1m15s
2025-05-29 22:12:10 -05:00
gary b55993294a [studio/modlib] Fix headerizeConfigFile to handle slashes in file name
Build / build (push) Successful in 1m12s
2025-05-25 01:20:20 -05:00
gary d8f847d707 [studio/applib] Move popup types into their own directory
Build / build (push) Successful in 1m20s
2025-05-24 15:01:17 -05:00
gary a5535ef59a Merge commit '08236fc790e711afe886b6ef545511d35e4e5c6c' 2025-05-24 01:44:07 -05:00
gary 8419b137e5 [turbine,studio] Fix some popup window resize weirdness, cleanup some function names
Build / build (push) Successful in 1m17s
2025-05-24 01:32:14 -05:00
gary ed1160ec74 [nostalgia] Update release notes
Build / build (push) Successful in 1m14s
2025-05-24 00:50:22 -05:00
gary 1e21778059 [nostalgia/gfx/studio/tilesheet] Ensure config file has a Claw header 2025-05-24 00:48:54 -05:00
gary 78379f58c8 [studio] Add ability to remember recent projects in config 2025-05-24 00:48:10 -05:00
gary 4322f720ba [keel] Fix ox::Result<DstType> convert(Context &ctx, ox::BufferView const&src) 2025-05-24 00:47:39 -05:00
gary 26f1a6051f [ox/std] Make Vector::remove take a MaybeView_t
Build / build (push) Successful in 1m17s
2025-05-24 00:46:39 -05:00
gary c4c1d4777b [keel] Cleanup ox::Error(0) instance 2025-05-23 20:25:08 -05:00
gary fab012d3e7 [ox] Cleanup all ox::Error(0) instances 2025-05-23 20:24:58 -05:00
gary a90380f377 Merge commit 'e90dd887477452922f783535edb3d4c55e9a0d2c' 2025-05-23 03:23:17 -05:00
gary 312097a799 [ox/std] Fix implementation of std cmp functions
Build / build (push) Successful in 1m12s
2025-05-23 03:22:27 -05:00
gary a40198ab8d [nostalgia] Update release-d2025.05.2 release notes
Build / build (push) Successful in 1m23s
2025-05-22 20:45:34 -05:00
gary 52d8c0bdc8 [nostalgia/gfx] Replace static_cast compare with std::cmp_equal 2025-05-22 20:43:27 -05:00
gary c19d7f4ea3 [nostalgia] Add .vs and cmake-build-* to .gitignore 2025-05-22 20:42:09 -05:00
gary 159b7e7ee7 [buildcore] Make pybb cmake_build specify --config debug/release 2025-05-22 20:41:30 -05:00
gary c93eec4f05 [teagba] Make cstart.cpp only compile if GCC 2025-05-22 20:40:33 -05:00
gary e7e7a22390 [nostalgia/sample_project] Make sample_project exempt from autocrlf 2025-05-22 20:39:56 -05:00
gary 26d5048e67 [ox/fs] Fix new build error in MSVC (VS 17.14) 2025-05-22 20:05:09 -05:00
gary 3b8f97cc41 [nostalgia/gfx] Cleanup
Build / build (push) Successful in 1m15s
2025-05-21 22:15:56 -05:00
gary f1e68e0a04 [nostalgia/gfx/studio/tilesheet] Fix overrun errors when switching subsheets, clear selection on switch 2025-05-21 22:15:07 -05:00
gary d6e4ab7a24 [keel] Cleanup
Build / build (push) Successful in 1m24s
2025-05-18 14:08:39 -05:00
gary 2000b2deee [nostalgia/gfx/studio] Cleanup 2025-05-17 23:35:10 -05:00
gary 7d92400f6d [nostalgia/gfx/studio] Add type specific navigateTo functions 2025-05-17 23:26:23 -05:00
gary cb304ecf28 [applib] Cleanup
Build / build (push) Successful in 1m12s
2025-05-17 17:46:38 -05:00
gary ea17377700 [ox/std] Make StringViewCR honest
Build / build (push) Successful in 1m17s
2025-05-17 17:34:22 -05:00
gary c424bde06d [nostalgia] Style cleanup
Build / build (push) Successful in 1m14s
2025-05-17 17:31:47 -05:00
gary ee7d5c6d51 [nostalgia/gfx] Cleanup
Build / build (push) Successful in 1m14s
2025-05-17 17:22:13 -05:00
gary 99247cee32 [nostalgia/gfx/test] Cleanup
Build / build (push) Successful in 1m15s
2025-05-17 17:18:51 -05:00
gary 7b8ddc189a [nostalgia/gfx] Consolidate implementations into single files, remove unnecessary function exports
Build / build (push) Successful in 1m17s
2025-05-17 17:13:13 -05:00
gary a6814030ee [studio/applib] Cleanup
Build / build (push) Successful in 1m13s
2025-05-17 16:15:32 -05:00
gary 9937a01042 [turbine] Cleanup 2025-05-17 16:12:16 -05:00
gary abcf2adc56 [nostalgia/gfx] Cleanup
Build / build (push) Successful in 1m14s
2025-05-17 03:02:59 -05:00
gary 05f9023550 [nostalgia/gfx] Cleanup
Build / build (push) Successful in 1m14s
2025-05-17 02:51:56 -05:00
gary 5ba0bcf963 [turbine] Consolidate some files that didn't have sensible distinctions
Build / build (push) Has been cancelled
2025-05-17 02:51:23 -05:00
gary 3ccadba2f5 [nostalgia/gfx/studio/tilesheet] Fix dragging cursor on image
Build / build (push) Successful in 1m20s
2025-05-16 21:22:33 -05:00
gary 00e52b6491 [nostalgia] Make pkg-dmg more versatile
Build / build (push) Successful in 1m14s
2025-05-15 22:26:35 -05:00
gary ae40487990 [nostalgia/gfx] Add navigateTo handler to TileSheetEditor
Build / build (push) Successful in 1m20s
2025-05-15 20:39:50 -05:00
gary 84b612c693 [studio/modlib] Give navigateTo a default argument 2025-05-15 20:39:01 -05:00
gary 3c2a6b047e [studio/applib] Make navigateTo handle UUID paths 2025-05-15 20:38:27 -05:00
gary 626da322d9 [ox/std] Add StringParam(IString const&) constructor 2025-05-15 20:37:44 -05:00
gary 0de428a2e5 [studio/applib] Cleanup
Build / build (push) Successful in 1m19s
2025-05-14 22:11:43 -05:00
gary 8a52df4f76 [nostalgia/gfx] More cleanup
Build / build (push) Successful in 1m16s
2025-05-14 01:43:59 -05:00
gary efec6eb3c8 [nostalgia/gfx/studio/palette] Add RGB key shortcuts for focusing color channels
Build / build (push) Successful in 1m15s
2025-05-14 01:13:40 -05:00
gary 56eeb24900 [nostalgia/gfx/opengl] More cleanup
Build / build (push) Successful in 1m56s
2025-05-13 22:06:08 -05:00
gary ae81f6b3de [ox/std] Make Span::operator[] const
Build / build (push) Successful in 1m17s
2025-05-13 22:02:23 -05:00
gary c1108301c0 [nostalgia/gfx] Cleanup 2025-05-13 22:01:59 -05:00
gary 83fbe6ac74 [keel,turbine,studio] Fix some install mistakes
Build / build (push) Successful in 2m17s
2025-05-13 21:39:37 -05:00
gary 80b452833f [nostalgia/gfx] Cleanup
Build / build (push) Successful in 2m28s
2025-05-13 21:24:04 -05:00
gary 0fa394333b [nostalgia] Add release note about Mac menubar using Cmd
Build / build (push) Successful in 1m15s
2025-05-10 01:01:11 -05:00
gary cae7535034 [nostalgia] Fix typos in release notes
Build / build (push) Successful in 1m15s
2025-05-10 00:57:45 -05:00
gary df87832324 [studio] Add build date to About
Build / build (push) Successful in 1m15s
2025-05-10 00:21:54 -05:00
gary d585794cbe [nostalgia/gfx/studio/tilesheet] Fix Insert tile command 2025-05-09 20:34:42 -05:00
gary 209658549c [nostalgia/gfx/studio/tilesheet] Cleanup 2025-05-09 20:34:04 -05:00
gary 02383a4aed [ox/std] Cleanup 2025-05-09 01:22:29 -05:00
gary 185a76282a [nostalgia] Make pkg-dmg delete bundle after archive created
Build / build (push) Successful in 1m15s
2025-05-08 23:29:36 -05:00
gary b722b4f701 [nostalgia] Update release notes
Build / build (push) Has been cancelled
2025-05-08 23:28:58 -05:00
gary 459ab5aad9 [studio] Remove ability to re-order Editor tabs 2025-05-08 23:28:51 -05:00
gary 565f621cfc [nostalgia/gfx/studio/tilesheet] Fix Delete Tile functionality
Build / build (push) Successful in 1m15s
2025-05-08 01:57:59 -05:00
gary 9589ca9148 [keel] Cleanup 2025-05-08 01:37:18 -05:00
gary 164db5007b [keel] Cleanup
Build / build (push) Successful in 1m25s
2025-05-08 00:49:50 -05:00
gary cbfb167d29 [nostalgia] Remove unused project directory
Build / build (push) Successful in 1m33s
2025-05-07 20:23:48 -05:00
gary e7b83be867 [nostalgia] Update release notes
Build / build (push) Successful in 2m28s
2025-05-07 20:18:08 -05:00
gary 649da5fca8 [nostalgia/sample_project] Delete Scenes directory 2025-05-07 20:16:35 -05:00
gary aa095f7680 [studio] Make Delete key initiate deletion of selected directory 2025-05-07 20:15:38 -05:00
gary bb99c99f01 [studio] Make deleting a directory close files in that directory 2025-05-07 20:10:34 -05:00
gary 7f0dcdd280 [nostalgia/gfx/studio/tilesheet] Cleanup
Build / build (push) Successful in 1m20s
2025-05-07 19:57:27 -05:00
gary 6029ad5d47 [nostalgia/studio] Add command for bundling Mac app 2025-05-07 02:48:14 -05:00
gary 26fe266b09 [ox/mc] Fix break from using strnlen_s inappropriately
Build / build (push) Successful in 1m16s
2025-05-07 01:18:14 -05:00
gary 091eda7b44 Merge commit 'ce53be92716b0f5201882d6959c398b61c6cc93c'
Build / build (push) Successful in 1m23s
2025-05-07 00:12:52 -05:00
gary 9676ea5978 [turbine/glfw] Fix programmatic shutdown to invoke shutdownHandler
Build / build (push) Successful in 1m50s
2025-05-07 00:06:21 -05:00
gary de8ac10653 [turbine/glfw] Fix closing when no shutdown handler is set
Build / build (push) Successful in 1m53s
2025-05-07 00:01:49 -05:00
gary 88a6cd59f3 [turbine/glfw] Treat close window event like other events with regard to a mandatory refresh period
Build / build (push) Waiting to run
2025-05-06 23:56:49 -05:00
gary cd43fb7f38 [turbine,studio] Fix confirm app close pop up to work with Ctrl-Q
Build / build (push) Successful in 2m1s
2025-05-06 23:25:00 -05:00
gary 136f422401 [nostalgia] Update release notes
Build / build (push) Successful in 1m16s
2025-05-06 23:11:06 -05:00
gary e773d6f0ee [studio] Rename StudioContext to Context
Build / build (push) Successful in 1m16s
2025-05-06 22:37:21 -05:00
gary 7da2f68d30 [nostalgia/sample_project] Add assets
Build / build (push) Successful in 1m22s
2025-05-06 22:30:28 -05:00
gary d20889aef1 [nostalgia/gfx/studio] Update for Ox changes 2025-05-06 22:29:51 -05:00
gary 50c8302f4a [ox] Rename itoa to intToStr 2025-05-06 22:29:31 -05:00
gary d8195d300d [olympic,nostalgia] Address unsafe buffer warnings 2025-05-06 22:25:36 -05:00
gary a8c1387d5a [ox] Address unsafe buffer warnings 2025-05-06 22:25:13 -05:00
gary ff1e8f260b [studio] Add popup to warn about UUID duplication 2025-05-06 22:22:26 -05:00
gary d4329981e7 [studio,nostalgia] Cleanup
Build / build (push) Successful in 1m14s
2025-05-06 01:11:47 -05:00
gary 0003454311 [studio,nostalgia/gfx/studio] Cleanup
Build / build (push) Successful in 1m14s
2025-05-06 01:00:04 -05:00
gary 8c6b2234ec [olympic/util] Make pkg-gba script check return code of subprocesses
Build / build (push) Successful in 1m14s
2025-05-05 23:11:37 -05:00
gary aad4b8a44c [studio] Cleanup 2025-05-05 23:10:18 -05:00
gary 7cab133127 [keel] Add ability to log UUID duplication
Build / build (push) Successful in 1m14s
2025-05-05 21:54:24 -05:00
gary 640ac85de4 [nostalgia/gfx/studio/palette] Make page rename dialog accept on enter if input focused
Build / build (push) Successful in 1m19s
2025-05-04 00:15:30 -05:00
gary b8d7658626 [nostalgia/studio] Update generated icondata.cpp with Clang fix
Build / build (push) Successful in 1m26s
2025-05-02 21:05:21 -05:00
gary 2503bb3b2c [nostalgia/sample_project] Update type descriptors 2025-05-02 21:04:36 -05:00
gary e5dd448fe7 [turbine,studio] Make Studio confirm with user before closing app if any unsaved changes
Build / build (push) Successful in 1m15s
2025-05-01 23:15:06 -05:00
gary 4770bb6a93 [olympic/util] Cleanup
Build / build (push) Successful in 1m17s
2025-04-20 21:44:36 -05:00
gary c0bac696dc [nostalgia/gfx/studio/paletteeditor] Fix color number key range
Build / build (push) Successful in 1m16s
2025-04-19 14:43:07 -05:00
gary 95f7c33419 [studio] Change Studio font
Build / build (push) Successful in 1m16s
2025-04-19 00:23:36 -05:00
gary 535d8876d3 [keel] Cleanup 2025-04-19 00:22:28 -05:00
gary 845e433221 [turbine] Fix Mac build 2025-04-18 01:38:32 -05:00
gary 5169a607cf [turbine] Disable useless window icon on Mac, it causes GLFW warning
Build / build (push) Successful in 1m16s
2025-04-17 21:36:56 -05:00
gary 8f03af99a7 [keel] Style updates 2025-04-17 21:36:24 -05:00
gary ee63a4a1e4 [keel] Cleanup
Build / build (push) Successful in 1m17s
2025-04-17 21:04:43 -05:00
gary ac29f7a0f2 Merge commit 'ec6cf92c4763be5933ee6debbf97bce25b9fcfc9' 2025-04-17 20:12:48 -05:00
gary 89ae226b1d [keel] Improve correctness
Build / build (push) Successful in 1m18s
2025-04-17 01:17:40 -05:00
gary 477834ac04 [keel] Cleanup
Build / build (push) Successful in 1m16s
2025-04-17 01:06:08 -05:00
gary 97b707b61c [keel] Fix MSVC build
Build / build (push) Successful in 1m16s
2025-04-17 01:01:22 -05:00
gary e86180e842 [nostalgia/core/keel] Consistency cleanup
Build / build (push) Successful in 1m16s
2025-04-17 00:39:34 -05:00
gary 035ba8810f [keel,nostalgia] Fix converter type names 2025-04-17 00:37:05 -05:00
gary f1c2113dd3 [keel] Fix some completely incomprehensible build break in GCC12...
Build / build (push) Successful in 1m16s
2025-04-17 00:32:38 -05:00
gary 56b79f414d [keel,nostalgia] Further simplify writing type converters
Build / build (push) Failing after 14s
2025-04-17 00:22:47 -05:00
gary 844656d557 [nostalgia/gfx/keel] Update type converter style
Build / build (push) Successful in 1m14s
2025-04-16 23:12:24 -05:00
gary 849aceb86d [keel] Add cleaner way to write type converters 2025-04-16 23:11:47 -05:00
gary eef51a6d2b [olympic] Improve error handling in file-to-cpp 2025-04-16 20:11:28 -05:00
gary c84b85102c [nostalgia/gfx/studio] Cleanup
Build / build (push) Successful in 1m15s
2025-04-15 22:05:46 -05:00
gary 3fe62464c3 [nostalgia/sample_project] Add NS_Logo32
Build / build (push) Successful in 1m18s
2025-04-14 22:20:06 -05:00
gary db55fc722f [nostalgia/player] Cleanup 2025-04-14 22:05:23 -05:00
gary 2094450898 [studio] Cleanup
Build / build (push) Successful in 1m22s
2025-04-14 22:00:05 -05:00
gary 889bec04b1 [nostalgia/gfx/studio/tilesheet] Cleanup 2025-04-13 23:20:49 -05:00
gary ac1e34d4cd [nostalgia] Update release notes
Build / build (push) Successful in 1m19s
2025-04-13 00:37:32 -05:00
gary 55ed75f44d [nostalgia/gfx/studio/tilesheet] Fix selection clearing to work when clicking outside image
Build / build (push) Successful in 1m19s
2025-04-13 00:33:06 -05:00
gary 2751872c59 [nostalgia] Cleanup file-to-cpp output
Build / build (push) Successful in 1m15s
2025-04-12 16:50:09 -05:00
gary 2a3cd35cc4 [nostalgia] Fix release notes version, add d2025.02.1
Build / build (push) Waiting to run
2025-04-12 16:45:58 -05:00
gary b66f459f75 [nostalgia] Cleanup icon rsrc generation
Build / build (push) Waiting to run
2025-04-12 16:40:49 -05:00
gary 3910f4e77c [nostalgia] Fix debug and gba-run commands in Makefile
Build / build (push) Waiting to run
2025-04-12 14:04:41 -05:00
gary c0e96216ae [turbine] Make accessor functions take const ref to Context
Build / build (push) Waiting to run
2025-04-12 13:49:43 -05:00
gary f9512d72e8 [turbine/glfw] Fix implicit conversion
Build / build (push) Waiting to run
2025-04-12 00:22:49 -05:00
gary b7f2c169ec [nostalgia/studio/gfx] Fix typo
Build / build (push) Waiting to run
2025-04-11 23:14:57 -05:00
gary 1e5057d6e6 [nostalgia] Add app icon note to release notes
Build / build (push) Waiting to run
2025-04-11 23:12:36 -05:00
gary c6255e3224 [nostalgia/studio] Add icon 16 src
Build / build (push) Waiting to run
2025-04-11 23:06:42 -05:00
gary 02230ef619 [turbine,studio,nostalgia/studio] Add support for window icon scaling, expand icons sizes for Nostalgia Studio
Build / build (push) Waiting to run
2025-04-11 22:45:11 -05:00
gary 9b6b60e4d1 [turbine] Cleanup
Build / build (push) Waiting to run
2025-04-11 21:47:26 -05:00
gary b9a26ab61e [turbine] Fix GLFWimage member init order
Build / build (push) Waiting to run
2025-04-11 21:44:52 -05:00
gary a521887ddd [studio,turbine] Add support for window icons
Build / build (push) Waiting to run
2025-04-11 21:41:30 -05:00
gary 5ca7e2f226 [ox/fs] Cleanup
Build / build (push) Successful in 1m14s
2025-04-02 01:30:58 -05:00
gary 125a235dd1 [ox/fs] Cleanup
Build / build (push) Successful in 1m26s
2025-04-02 01:29:02 -05:00
gary 91a7129f8f [nostalgia/gfx/keel] Cleanup 2025-04-02 01:07:26 -05:00
gary df48a232ec [nostalgia/studio] Add icon to Windows executable
Build / build (push) Successful in 1m28s
2025-04-02 00:49:13 -05:00
gary ab11b885e6 [keel] Add missing new line to log message
Build / build (push) Successful in 1m25s
2025-03-24 21:02:20 -05:00
gary 36fc25fb7e [studio] Fix closing tab with unsaved changes 2025-03-24 21:02:20 -05:00
gary 4803cca334 [nostalgia/player] Cleanup
Build / build (push) Successful in 1m29s
2025-03-08 22:28:29 -06:00
gary 6bd74611cd [nostalgia] Update release notes
Build / build (push) Successful in 1m28s
2025-02-25 20:02:52 -06:00
gary c3f9cf9a64 [studio] Fix New Project opening project, disable New if no project open
Build / build (push) Has been cancelled
2025-02-25 20:01:33 -06:00
gary 646ab1283f [nostalgia/gfx] Cleanup
Build / build (push) Successful in 1m26s
2025-02-24 21:45:45 -06:00
gary 74cf055610 [nostalgia] Cleanup
Build / build (push) Successful in 1m32s
2025-02-24 19:43:10 -06:00
gary 0d8ba1b154 [nostalgia/gfx] Cleanup formatting mistake
Build / build (push) Successful in 1m26s
2025-02-23 23:21:59 -06:00
gary 20edbb7f38 [buildcore] Map aarch64 to arm64
Build / build (push) Successful in 1m27s
2025-02-23 01:00:12 -06:00
gary 6febc7cc73 [nostalgia] Fix build
Build / build (push) Successful in 1m32s
2025-02-23 00:51:30 -06:00
gary b94d6b5061 [nostalgia] Remove scene package, finish stubbing out sound
Build / build (push) Failing after 21s
2025-02-23 00:49:58 -06:00
gary b3952cabbc [nostalgia] Add build upload step to CI
Build / build (push) Successful in 1m39s
2025-02-22 21:30:35 -06:00
gary 2ffc11b04e Merge commit 'e723ead864edb4bc160e4d69713309174ad9e82e'
Build / build (push) Successful in 1m34s
2025-02-22 20:55:17 -06:00
gary 96cace2cbb [studio] Cleanup 2025-02-22 19:51:55 -06:00
gary 472f5702bd [nostalgia/gfx/studio/tilesheet] Change max export scale to 135
Build / build (push) Successful in 1m32s
2025-02-22 15:31:39 -06:00
gary c0ac4345d3 [studio] Cleanup
Build / build (push) Successful in 1m30s
2025-02-22 15:16:26 -06:00
gary fbebf4ef83 [nostalgia/gfx/studio/tilesheet] Fix export for 4bpp images
Build / build (push) Successful in 1m27s
2025-02-22 00:58:12 -06:00
gary 20513f7749 [nostalgia/sample_project] Add type descriptors 2025-02-21 00:41:04 -06:00
gary 25a7873ea2 [nostalgia,studio] Fix crash that occurred when navigating to file that is not already open
Build / build (push) Successful in 1m32s
2025-02-20 23:57:02 -06:00
gary d0a32e247e [ox/std] Add Vector::remove
Build / build (push) Successful in 1m42s
2025-02-20 23:34:36 -06:00
gary 03d4a5736e [nostalgia,studio] Add ability to navigate from tile sheet to palette color
Build / build (push) Successful in 1m52s
2025-02-20 23:30:50 -06:00
gary a2e41e6527 Merge commit '4e94c925686cdda4b1ac777045dd7a17c7dc0329'
Build / build (push) Successful in 1m38s
2025-02-20 20:11:03 -06:00
gary 40a7caff90 [ox/std] Make bounds checking its own option enable-able in release builds 2025-02-20 20:05:07 -06:00
gary 26fc5565e8 [nostalgia/gfx] Make dangling reference warning suppressions check for GCC 13
Build / build (push) Successful in 1m30s
2025-02-20 19:40:08 -06:00
gary 388541ce32 [nostalgia/player] Cleanup
Build / build (push) Successful in 1m24s
2025-02-20 00:01:29 -06:00
gary 6c194667b9 [nostalgia] Fix NostalgiaGfx lib name, stub out sound package
Build / build (push) Successful in 1m27s
2025-02-19 22:19:16 -06:00
gary 62d0579f40 [ox/fs] Restructure stat error handling to make easier to debug
Build / build (push) Successful in 1m25s
2025-02-19 21:47:47 -06:00
gary 202595b2a6 [keel] Fix loading assets by path 2025-02-19 21:47:00 -06:00
gary cb21ff3f04 Merge commit 'a6b9657268eb3fe139b0c22df27c2cb2efc0013c' 2025-02-19 00:34:26 -06:00
gary 2a8e3c2dc4 [nostalgia/gfx] Remove unnecessary cast
Build / build (push) Successful in 1m26s
2025-02-18 23:01:15 -06:00
gary 998066d377 [ox/std] Add comparison functions
Build / build (push) Successful in 1m24s
2025-02-18 21:46:41 -06:00
gary fefb876fe7 [nostalgia/gfx] Add checks for GCC version for warning suppression
Build / build (push) Successful in 1m24s
2025-02-18 20:33:29 -06:00
gary 5979e9885e [jsoncpp] Up required CMake version 2025-02-18 20:26:47 -06:00
gary a17abe4639 [nfde] Up required CMake version 2025-02-18 20:26:47 -06:00
gary d62f913855 [nostalgia/gfx] Suppress some superfluous warnings
Build / build (push) Failing after 1m9s
2025-02-18 20:22:56 -06:00
gary 12bb7475fc [nostalgia/gfx/studio/tilesheet] Adjust pixel line size on Windows
Build / build (push) Successful in 1m25s
2025-02-18 20:19:51 -06:00
gary df2c7e2b67 [nostalgia] Update release notes
Build / build (push) Successful in 1m26s
2025-02-08 18:10:49 -06:00
gary 713aec887b [buildcore] Change mypy invokation
Build / build (push) Successful in 1m28s
2025-02-07 20:38:44 -06:00
gary 3089cd7afc Change builder type to olympic
Build / build (push) Has been cancelled
2025-02-07 20:34:22 -06:00
gary 00638bc812 [nostalgia/gfx/studio/tilesheet] Mark DrawCommands as obsolete if no changes
Build / build (push) Successful in 3m37s
2025-02-05 20:26:47 -06:00
gary e002109829 [studio] Make undo/redo skip over obsolete commands 2025-02-05 20:26:03 -06:00
gary b4798fd2ab [nostalgia/gfx/studio/tilesheet] Make rotate only available for square subsheets or selections
Build / build (push) Successful in 3m39s
2025-02-05 01:54:41 -06:00
gary 3c804bf62a [studio] Give MakeCopy popup an error message for files that already exist
Build / build (push) Successful in 3m36s
2025-02-03 23:30:07 -06:00
gary d39d552bd9 [nostalgia/studio] Update icon to higher resolution 2025-02-03 23:29:26 -06:00
gary b7202a2b0d [nostalgia/player] Disable Keel mods on GBA
Build / build (push) Successful in 3m34s
2025-02-03 22:48:07 -06:00
gary 4e27a4c1f5 [nostalgia/core/studio/tilesheet] Fix palette path display update
Build / build (push) Successful in 3m37s
2025-02-03 22:43:20 -06:00
gary 4ef31762d0 [nostalgia/core/studio/tilesheet] Cleanup 2025-02-03 22:43:02 -06:00
gary 8b22a8f339 [keel] Make buildUuidMap only read the first 40 bytes of each file 2025-02-03 20:29:06 -06:00
gary d45ff05bcd [ox/fs] Add new partial file read functions 2025-02-03 20:28:25 -06:00
gary 671dd86206 [keel,studio] Add Make Copy option to ProjectExplorer
Build / build (push) Successful in 3m46s
2025-02-03 02:01:40 -06:00
gary 0abadc1850 [studio] Fix QuestionPopup to only emit a response when there is a response
Build / build (push) Successful in 3m36s
2025-02-03 00:35:37 -06:00
gary 4e068d628c [studio] Fix misrender flash on tab close 2025-02-03 00:19:14 -06:00
gary 4461f99fa4 [studio] Add Ctrl-W shortcut for closing active tab
Build / build (push) Successful in 3m36s
2025-02-02 23:13:15 -06:00
gary cd1f4bdaa3 [studio] Add confirmation for closing file with unsaved changes 2025-02-02 23:07:59 -06:00
gary 4728699585 [studio] Add combobox that will take string views
Build / build (push) Successful in 3m47s
2025-02-02 20:46:08 -06:00
gary 105a1e5559 [nostalgia/core/studio/tilesheet] Rework operation ctrls into a dropbox
Build / build (push) Failing after 1m1s
2025-02-02 20:43:01 -06:00
gary 1bc18e34a8 [nostalgia/core/studio/tilesheet] Add ability to rotate a selection 2025-02-02 20:22:20 -06:00
gary fb8d295fcb [nostalgia/core/studio/tilesheet] Add rotate functionality 2025-02-02 14:46:21 -06:00
gary 8459d3baea Merge commit 'c42adc290cd8a27d01bb6d9877032dd2c963a4b7' 2025-02-01 22:55:46 -06:00
gary 804d78e116 [nostalgia/gfx/studio] Cleanup
Build / build (push) Successful in 3m32s
2025-02-01 15:14:24 -06:00
gary 5351e9aa0a [nostalgia/core/studio/tilesheet] Add line drawing tool
Build / build (push) Successful in 3m36s
2025-02-01 14:14:09 -06:00
gary b5954f15c5 [studio] Restore context menu for root dir, but exclude Delete
Build / build (push) Successful in 3m33s
2025-01-29 18:47:48 -06:00
gary 5dce9dd377 [studio] Suppress context menu for root dir in ProjectExplorer
Build / build (push) Successful in 3m32s
2025-01-28 01:27:51 -06:00
gary 0570f76236 [ox/fs] Fix PassThroughFS::stripSlash
Build / build (push) Successful in 3m32s
2025-01-28 01:18:44 -06:00
gary e22b658a67 [studio] Fix isParentOf check in Project to ensure child dir path ends with /
Build / build (push) Has been cancelled
2025-01-28 01:04:17 -06:00
gary 56b9cb6ebf [studio] Fix file explorer to treat empty directories as directories
Build / build (push) Successful in 3m32s
2025-01-27 23:31:58 -06:00
gary eaa9a2415e [keel] Make reloadAsset check if file is loaded 2025-01-27 21:59:57 -06:00
gary 95256a9a0d [studio] Make rename file give error message if the file already exists
Build / build (push) Successful in 3m32s
2025-01-27 00:54:58 -06:00
gary 2286238abc [studio] Make rename file accept input upon pressing Enter if text input is focused
Build / build (push) Successful in 3m36s
2025-01-27 00:33:14 -06:00
gary 13f0bf57e4 [studio] Make deleting a file close tabs associated with it 2025-01-27 00:30:27 -06:00
gary 8eb1ac215b [studio] Fix not to try moving a parent directory to its child
Build / build (push) Successful in 3m34s
2025-01-27 00:10:25 -06:00
gary e132f2fd1b [studio] Make file move do nothing if the file already exists 2025-01-26 23:59:13 -06:00
gary 12f6b22c8b [nostalgia/gfx/studio/palette] Cleanup 2025-01-26 23:35:03 -06:00
gary 6c858e0c4e [nostalgia/gfx/studio/tilesheet] UI cleanup
Build / build (push) Successful in 3m35s
2025-01-26 22:30:39 -06:00
gary c6b58f7c63 [nostalgia] Update release notes
Build / build (push) Successful in 3m35s
2025-01-26 22:16:04 -06:00
gary a22aafaf96 [nostalgia/gfx/studio/palette] Add ability to reorder Palette pages 2025-01-26 22:12:57 -06:00
gary 6298ac3a21 [nostalgia] Update release notes
Build / build (push) Successful in 3m28s
2025-01-26 20:58:22 -06:00
gary cd63afacfe [studio] Remove Ctrl-0 tab shortcut 2025-01-26 20:53:47 -06:00
gary 2859183742 [nostalgia/gfx/studio/tilesheet] Add the ability to move subsheets 2025-01-26 20:46:15 -06:00
gary 8d04af691e Merge commit 'ab760b064fd6a302bad13274e0e02b2b2c957b67' 2025-01-26 15:42:50 -06:00
gary 055165974e [nostalgia/sample_project] Update test assets 2025-01-26 15:41:40 -06:00
gary be51838775 [nostalgia/gfx/studio/tilesheet] Add flip x and flip y functionality
Build / build (push) Successful in 3m33s
2025-01-26 15:41:13 -06:00
gary 1207dadee8 [studio] Add ability to move directories
Build / build (push) Successful in 3m29s
2025-01-26 09:38:27 -06:00
gary 109e1898cc [studio] Add ability to drag files between directories
Build / build (push) Successful in 3m29s
2025-01-26 02:03:54 -06:00
gary a24bf7ffb9 [studio] Fix config to update when open file name changes 2025-01-26 01:01:48 -06:00
gary 046834c2b9 [studio,nostalgia] Update tab name when corresponding file's name changes
Build / build (push) Successful in 3m30s
2025-01-26 00:52:11 -06:00
gary f840240aac [nostalgia/gfx/studio/tilesheeteditor] Rework system for tracking current palette path
Build / build (push) Successful in 3m29s
2025-01-25 22:59:51 -06:00
gary cfa91d3d39 [keel,studio] Add ability to rename files 2025-01-25 22:59:01 -06:00
gary f7a7a66a6a [ox/event] Add Signal::connectionCnt 2025-01-25 22:58:18 -06:00
gary 5145595d57 [ox/std] Fix HashMap collision handling 2025-01-25 22:16:42 -06:00
gary f01d303381 [ox/std] Fix UPtr compare with nullptr 2025-01-25 20:13:47 -06:00
gary 098c8cb844 [nostalgia/gfx/studio] Make move color commands affect all pages
Build / build (push) Successful in 3m25s
2025-01-24 23:46:26 -06:00
gary 04ad0f0264 [studio] Add drag/drop functions that use model TypeName for name
Build / build (push) Successful in 3m23s
2025-01-24 23:26:30 -06:00
gary 695e7a4561 [nostalgia/gfx/studio/paletteeditor] Change move color mechanism to use drag/drop
Build / build (push) Failing after 54s
2025-01-24 23:19:45 -06:00
gary 7d53028faf [studio] Cleanup 2025-01-24 00:21:28 -06:00
gary 6c34198f58 Merge commit '897a59cdad66e593fd45eece9414d8414fa7f1ae' 2025-01-23 23:51:13 -06:00
gary 7e3e046109 [ox/model] Fix possible infinite recursion
Build / build (push) Successful in 3m26s
2025-01-23 23:48:40 -06:00
gary f63c58169f [studio] Add filepickerpopup.hpp to studio.hpp 2025-01-23 22:19:59 -06:00
gary e40b11246d [nostalgia/gfx/studio/paletteeditor] Fix num key shortcuts to ignore if ctrl is down
Build / build (push) Successful in 3m25s
2025-01-23 21:56:47 -06:00
gary 161194c8b2 [nostalgia/gfx/studio/tilesheeteditor] Add FilePicker to for choosing a Palette
Build / build (push) Successful in 3m25s
2025-01-23 21:24:10 -06:00
gary 48603ea2c5 [studio] Make tabs not draw while closing 2025-01-23 21:24:10 -06:00
gary e2f2a17315 [studio] Add FilePickerPopup 2025-01-23 21:24:10 -06:00
gary e8a0ce88c5 Merge commit 'dff9f81e073bb994d5ce96a6eaa1bfa547f1fdf4'
Build / build (push) Waiting to run
2025-01-23 21:21:58 -06:00
gary 82e2ea747f [studio] Fix NewMenu to track prev stage correctly when going back two stages 2025-01-23 21:13:58 -06:00
gary ff666eda9b [studio] Make NewMenu default Name field to focus when it appears
Build / build (push) Successful in 3m30s
2025-01-23 00:55:10 -06:00
gary 0d8b82ba49 [studio] Cleanup
Build / build (push) Successful in 3m10s
2025-01-23 00:32:03 -06:00
gary 5598dfdd87 [nostalgia/player] Update hardcoded tilesheet refs to new file ext
Build / build (push) Successful in 3m16s
2025-01-23 00:19:35 -06:00
gary 6ef462adcc [keel] Add clearer Error handling 2025-01-23 00:15:55 -06:00
gary 9511cb5719 [studio] Fix prev tracking
Build / build (push) Successful in 3m16s
2025-01-22 23:37:44 -06:00
gary 1cc1d561e2 [studio] Add a file explorer to NewMenu to choose where new files go
Build / build (push) Successful in 4m16s
2025-01-22 23:11:08 -06:00
gary d15a0df7da [studio] Make reusable FileTreeModel 2025-01-22 01:04:25 -06:00
gary e1282b6bae [studio] Fix build
Build / build (push) Successful in 3m23s
2025-01-22 00:58:43 -06:00
gary 5fe7c14ccb [nostalgia/sample_project] Rename TileSheet files using new file ext
Build / build (push) Failing after 52s
2025-01-21 23:40:19 -06:00
gary 42165ba2d6 [nostalgia/gfx] Change default file extension for TileSheets to nts 2025-01-21 23:35:55 -06:00
gary 1af4da43ad [nostalgia] Update release notes
Build / build (push) Successful in 3m22s
2025-01-21 22:56:59 -06:00
gary 4fa879a09e [nostalgia/sample_project] Update NS_Logo.ng to final TileSheetV5 format
Build / build (push) Has been cancelled
2025-01-21 22:54:27 -06:00
gary fd8f1a29c6 [nostalgia] Add release notes document
Build / build (push) Successful in 3m24s
2025-01-21 22:45:55 -06:00
gary 9fda2763ba [nostalgia/gfx] Make TileSheetV5::defaultPalette a string instead of FileAddress 2025-01-21 22:44:55 -06:00
gary cda23ac4af [ox/std] Change ox::String::operator[](size_t) const return a reference 2025-01-21 22:43:57 -06:00
gary c36b244dd3 [nostalgia/gfx] Cleanup, add PaletteV5, restore mistakenly removed function 2025-01-21 22:17:13 -06:00
gary 335d278f5e [ox/oc] Fix integer read for signed/unsigned 2025-01-21 22:15:36 -06:00
gary f987b02c65 [nostalgia/gfx] Move to TileSheetV5
Build / build (push) Successful in 3m23s
2025-01-21 02:21:01 -06:00
gary 3c056276c1 [turbine,nostalgia] Cleanup 2025-01-20 23:19:07 -06:00
gary 87e2fdefcf [ox/std] Make UAnyPtr uncopyable 2025-01-20 20:42:00 -06:00
gary 672b92b363 [nostalgia/gfx/studio] Remove accidental version tag in default Palette
Build / build (push) Successful in 3m23s
2025-01-20 03:13:01 -06:00
gary 762a6517b2 [nostalgia] Rename core to gfx 2025-01-20 03:11:35 -06:00
gary d141154a45 Merge commit '38777cfac8868b3628332090260710d5ac26aba0'
Build / build (push) Successful in 3m23s
2025-01-20 02:15:45 -06:00
gary 6170647c0c [nostalgia,studio] Proper fix for input filtering 2025-01-20 02:10:48 -06:00
gary 48e45c7dd6 [studio] Cleanup 2025-01-20 01:34:00 -06:00
gary 5d3d9229b7 [nostalgia/core/studio/paletteeditor] Ignore keyboard input when popup is open 2025-01-20 01:33:23 -06:00
gary d54e93d836 [studio] Cleanup 2025-01-20 00:16:16 -06:00
gary 830f8fe3e4 [studio,nostalgia/core/studio] Give default Palette created studio a default page
Build / build (push) Successful in 3m23s
2025-01-19 20:53:27 -06:00
gary 7b638538aa Merge commit '8e0b6ffbabb10f8a6e9ad7e9f07e0ba1d039a02e' 2025-01-19 20:18:56 -06:00
gary 2016f6e605 [studio] Fix DeleteConfirmation 'No' option to not delete file
Build / build (push) Successful in 3m22s
2025-01-19 20:17:35 -06:00
gary 240effd305 Merge commit '7e20f7200963cd0b22f84cc46e10db12b6c13806' 2025-01-19 19:04:24 -06:00
gary 6bc629e02c [nostalgia/core/studio/tilesheeteditor] Replace Palette combobox with a readonly text input
Build / build (push) Successful in 3m21s
2025-01-19 19:02:44 -06:00
gary f6f2acd67b [nostalgia/core/studio/tilesheeteditor] Add back file type check for palette drop 2025-01-19 18:21:50 -06:00
gary 0146d38405 [nostalgia/core/studio/tilesheeteditor] Manually merge in changes that were lost in conflict
Build / build (push) Successful in 3m19s
2025-01-19 18:18:52 -06:00
gary 75d8e7bb89 [nostalgia/core/studio/paletteeditor] Fix crash that occurs when removing last color 2025-01-19 17:56:21 -06:00
gary 6b53eaf6b1 [ox/std] Fix string append issues
Build / build (push) Successful in 3m22s
2025-01-19 16:51:05 -06:00
gary 16c32273ac [nostalgia/core/studio/tilesheeteditor] Fix palette drop target to only take palettes 2025-01-19 16:49:31 -06:00
gary 1567a6e29d [applib] Fix build 2025-01-19 14:32:08 -06:00
gary 89d543bcbc Merge commit '7b7d59cf63d77cf7ab6daf6ed7122eef97954555' 2025-01-19 13:39:31 -06:00
gary d68e64931b [nostalgia/core/studio/tilesheeteditor] Add support for dragging palette to palette selector
Build / build (push) Successful in 3m22s
2025-01-19 11:41:48 -06:00
gary 1cbc576286 [studio] Complete drag/drop support for files 2025-01-19 11:41:08 -06:00
gary 500b93562c [studio] Make new dir window OK on Enter key
Build / build (push) Successful in 3m17s
2025-01-19 09:33:17 -06:00
gary 800ca85176 [ox/std] Fix possible error that occurs with appending on boundary of small string size
Build / build (push) Successful in 3m20s
2025-01-19 09:26:06 -06:00
gary cc466a9f1d [studio] Add support for adding and deleting directories 2025-01-19 09:06:16 -06:00
gary 9d1155843e [nostalgia] Rename player from 'nostalgia' to 'Nostalgia'
Build / build (push) Successful in 3m24s
2025-01-19 01:48:53 -06:00
gary a2139c09b2 [studio] Cleanup unused member 2025-01-19 01:44:26 -06:00
gary a3e5f27ab8 [ox/std] Fix Mac build 2025-01-19 01:43:38 -06:00
gary 643f95ec80 [studio] Add confirmation dialog for file deletion, move deletion to Project
Build / build (push) Successful in 3m16s
2025-01-19 01:15:33 -06:00
gary 6924147686 [studio] Add ability to add file through dir context menu
Build / build (push) Successful in 3m15s
Also, fix dir context menu to work when dir is closed, and fix it not to
override last file in the directory.
2025-01-18 23:45:04 -06:00
gary 6e2b4fa7b4 [nostalgia] Cleanup player run in Makefile 2025-01-18 23:33:55 -06:00
gary 4e5c749918 [studio] Add support for deleting files
Build / build (push) Successful in 3m16s
2025-01-18 22:32:12 -06:00
gary 66229de77f [ox/fs] FileSystem fixes with removing files 2025-01-18 22:31:19 -06:00
gary 7eb37c5318 [nostalgia/core/studio/paletteeditor] Fix adding page if there is no existing page
Build / build (push) Successful in 3m17s
2025-01-18 21:29:36 -06:00
gary 7a21b20711 [nostalgia/core] Replace ContextDeleter with safeDelete(Context*)
Build / build (push) Successful in 3m15s
2025-01-18 20:57:15 -06:00
gary 894be237f2 [ox/std] Drop ox:: qualifier from safeDelete function for pointee 2025-01-18 20:56:24 -06:00
gary 92e9d9cbfc [keel,studio] Add support for New Item templates
Build / build (push) Failing after 1m3s
2025-01-18 20:16:29 -06:00
gary b29b9a9b3a [ox/std] Add UAnyPtr 2025-01-18 20:11:42 -06:00
gary 721f844214 [nostalgia/core/studio/tilesheeteditor] Fix subsheet and palette scrolling 2025-01-18 20:08:09 -06:00
gary a3d6a58cc8 [nostalgia/core/studio] Fix library cpp file ownership
Build / build (push) Successful in 3m10s
2025-01-17 21:50:42 -06:00
gary e598e7fe27 [nostalgia,keel] Add ability to types Obj to Obj
Build / build (push) Successful in 3m10s
2025-01-15 23:44:18 -06:00
gary ba9e720f9f [ox/model] Fix ModelTypeName_v to use requireModelTypeName 2025-01-15 23:34:58 -06:00
gary 8e816a261f [nostalgia/core/studio] Cleanup, fix possible TileSheet fill tool failure
Build / build (push) Successful in 3m11s
2025-01-14 23:06:12 -06:00
gary 5b9929ab3d [keel] Add detail to preload logging 2025-01-14 21:20:13 -06:00
gary ceb54b3f1b [nostalgia/core/opengl] Cleanup 2025-01-14 21:18:22 -06:00
gary 8764444758 [nostalgia/core] Add clearCbb functions
Build / build (push) Successful in 3m12s
2025-01-14 21:13:42 -06:00
gary ce9a0b1fdb [nostalgia/core/opengl] Cleanup memcpys 2025-01-14 21:13:10 -06:00
gary f7a468ea1e [ox/std] Add spancpy 2025-01-14 21:10:18 -06:00
gary 861d177a27 [studio] Cleanup
Build / build (push) Successful in 3m12s
2025-01-13 22:58:39 -06:00
gary 3936756b36 [nostalgia/developer-handbook] Update error handling to reflect the enablement of exceptions for GBA build 2025-01-13 22:53:12 -06:00
gary 3e78ec3fe5 [studio] Cleanup 2025-01-13 22:40:08 -06:00
gary 3c3d53b40c [studio] Ensure Editor tabs do first draw immediately, fix shift key being missed with tab shortcuts
Build / build (push) Successful in 3m14s
2025-01-13 22:29:48 -06:00
gary 151d7c5736 [nostalgia/core/gba] Fix partial tilesheet loading overrun
Build / build (push) Successful in 3m11s
2025-01-13 22:03:36 -06:00
gary 4e4d8d2c3f [nostalgia/core/gba] Make panic use standard abort call 2025-01-13 21:37:29 -06:00
gary 03d1fd2857 [ox/std] Add and integrate standard abort call 2025-01-13 20:39:21 -06:00
gary 6701decc91 [gbabuildcore] Enable exceptions 2025-01-13 20:18:28 -06:00
gary 6cff526647 [teagba] Add symbols needed for enabling exceptions 2025-01-13 20:17:10 -06:00
gary dd50bd0249 [studio] Remap toggle explorer keyboard shortcut, add Ctrl+1-0 mappings for jumping between tabs
Build / build (push) Successful in 3m17s
2025-01-13 01:14:57 -06:00
gary 55a1660242 [nostalgia/core] Fix TileSheet validation/repair to ensure pixels gets cleared if there are subsheets
Build / build (push) Successful in 3m10s
2025-01-12 16:06:24 -06:00
gary ed365dfef5 [studio] Fix new project menu to return an appropriately sized string for name 2025-01-12 15:04:31 -06:00
gary 23a09e4a13 [nostalgia/core/studio] Fix SubSheet editor to return an appropriately sized string 2025-01-12 14:55:50 -06:00
gary b69e7ebb98 [nostalgia/core/studio/tilesheeteditor] Fix select all not to go beyond end
Build / build (push) Successful in 3m10s
2025-01-11 16:21:10 -06:00
gary 418d6e3f22 [nostalgia/core/studio] Fix crash that occurs when a non-leaf node subsheet is selected
Build / build (push) Successful in 3m11s
2025-01-11 16:06:48 -06:00
gary c44d8678cb [nostalgia/core/studio] Fix tile insert to correct input when inserting past the last tile
Build / build (push) Successful in 3m11s
2025-01-11 15:38:11 -06:00
gary eb4cd7106d [nostalgia/core/studio] Fix tile insert to work on last tile
Build / build (push) Successful in 3m9s
2025-01-11 15:23:57 -06:00
gary d259770f32 Merge commit '4ea4a61d542777a270c4e2c283e0e986fc9eec9c'
Build / build (push) Successful in 3m9s
2025-01-11 12:32:00 -06:00
gary 80bad608f7 [keel] Fix reloadAsset 2025-01-11 03:39:38 -06:00
gary 2bce9a2baf [ox/std] Add non-const SmallMap::pairs 2025-01-11 03:37:27 -06:00
gary 791b7746f3 [nostalgia] Update liccor file
Build / build (push) Successful in 3m18s
2025-01-08 23:13:14 -06:00
gary 842e3587fd [nostalgia] Update .gitignore for new location of scripts dir 2025-01-08 23:13:02 -06:00
gary 318e79004b [ox] Update liccor file 2025-01-08 23:12:28 -06:00
gary 9f338a7429 [ox] Run liccor
Build / build (push) Successful in 3m18s
2025-01-08 23:03:05 -06:00
gary 645e48af7b [nostalgia,olympic] Run liccor 2025-01-08 23:02:08 -06:00
gary ef92c8df13 [nostalgia] Make pkg-gba.py force lower case for pack tool
Build / build (push) Successful in 3m9s
2025-01-08 22:01:27 -06:00
gary 849d50be8e [nostalgia/core] Make getTileIdx return an Optional 2025-01-08 21:34:01 -06:00
gary 845092f114 [turbine] Make common turbine.cpp file private to its target 2025-01-08 21:33:23 -06:00
gary 75819a1797 [ox/std] Add SmallMap::values() 2025-01-08 21:31:46 -06:00
gary d66da85753 [ox/std] SmallMap fixes, add findIdx function 2025-01-07 20:59:04 -06:00
gary 98ddb08abd [nostalgia] Cleanup
Build / build (push) Successful in 3m18s
2025-01-05 20:55:49 -06:00
gary 8d1701b0bb [turbine/glfw] Ensure window opens with a standard mandatory refresh period
Build / build (push) Successful in 3m19s
2025-01-04 23:49:04 -06:00
gary 1048e522fd [imgui] Make ImGui not an object lib 2025-01-04 23:42:43 -06:00
gary ee59da4aa3 [glad] Make glad not an object lib 2025-01-04 23:42:43 -06:00
gary 1ba64cb5d8 Merge commit '07610a5af2aaaac9cfcdcf8359b33f7df40d46cd'
Build / build (push) Successful in 3m15s
2025-01-04 01:29:09 -06:00
gary 462bebf6dd [nostalgia/core] Cleanup unused function declaration 2025-01-04 01:26:02 -06:00
gary e3f84c4e75 [studio] Make first tab not draw before selected tab when window opens 2025-01-04 01:12:48 -06:00
gary 6837a0556d [keel] Make AssetManager take StringViewCR for assetId
Build / build (push) Successful in 3m16s
2025-01-04 01:11:05 -06:00
gary ede2c8ca37 [keel] Make AssetTypeManager(Loader) move loader
Build / build (push) Successful in 3m23s
2025-01-04 01:05:04 -06:00
gary f50367f7d5 [ox/std] Add hash.hpp to install
Build / build (push) Successful in 3m31s
2025-01-03 00:26:10 -06:00
gary e758e03d2b [nostalgia,olympic] Update for ox::Error changes
Build / build (push) Successful in 3m20s
2025-01-01 23:43:32 -06:00
gary 835e3270ce [ox] Make Error use std::source_location 2025-01-01 23:42:46 -06:00
gary 480dd5ece4 [ox/std] Cleanup
Build / build (push) Successful in 3m25s
2025-01-01 22:57:20 -06:00
gary dba6bb5800 [ox/std] Make Vector(initializer_list) use list size as capacity
Build / build (push) Successful in 3m55s
2025-01-01 22:37:28 -06:00
gary 40a456e54a [ox/std] Add Vector::shrink_to_fit 2025-01-01 22:32:57 -06:00
gary bf5be00c12 Merge commit 'dc96270ca5e882e41f6b657be14a20e8bd2ad501'
Build / build (push) Successful in 3m14s
2024-12-21 20:13:20 -06:00
gary dc7c2559d6 [studio] Make selection tracker not go below 0 2024-12-21 20:06:48 -06:00
833 changed files with 40402 additions and 9853 deletions
+1
View File
@@ -0,0 +1 @@
sample_project text eol=lf
+8 -1
View File
@@ -4,7 +4,7 @@ on: [push]
jobs: jobs:
build: build:
runs-on: nostalgia runs-on: olympic
steps: steps:
- name: Check out repository code - name: Check out repository code
uses: actions/checkout@v3 uses: actions/checkout@v3
@@ -17,3 +17,10 @@ jobs:
- run: make purge configure-release - run: make purge configure-release
- run: make build - run: make build
- run: make test - run: make test
- run: make install
- run: mv dist/linux-x86_64-release nostalgia-linux-x86_64
- run: tar cf nostalgia-linux-x86_64.tar nostalgia-linux-x86_64
- uses: actions/upload-artifact@v3
with:
name: nostalgia-linux-x86_64
path: nostalgia-linux-x86_64.tar
+3 -1
View File
@@ -6,12 +6,14 @@
.mypy_cache .mypy_cache
.stfolder .stfolder
.stignore .stignore
scripts/__pycache__ .vs
util/scripts/__pycache__
pyenv pyenv
CMakeLists.txt.user CMakeLists.txt.user
ROM.oxfs ROM.oxfs
Session.vim Session.vim
build build
cmake-build-*
compile_commands.json compile_commands.json
dist dist
graph_info.json graph_info.json
+1 -1
View File
@@ -2,4 +2,4 @@
source: source:
- src - src
copyright_notice: |- copyright_notice: |-
Copyright 2016 - 2024 Gary Talent (gary@drinkingtea.net). All rights reserved. Copyright 2016 - 2025 Gary Talent (gary@drinkingtea.net). All rights reserved.
+2 -5
View File
@@ -9,7 +9,7 @@ else()
project(nostalgia C CXX) project(nostalgia C CXX)
endif() endif()
include(deps/buildcore/base.cmake) include(deps/oxlib/deps/buildcore/base.cmake)
set(OX_ENABLE_TRACEHOOK OFF CACHE BOOL "Generate OxTraceHook shared library for uprobes") set(OX_ENABLE_TRACEHOOK OFF CACHE BOOL "Generate OxTraceHook shared library for uprobes")
@@ -35,10 +35,7 @@ else()
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE) set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
endif() endif()
add_subdirectory(deps/ox) add_subdirectory(deps/oxlib)
include_directories(
deps/ox/src
)
add_subdirectory(deps/teagba) add_subdirectory(deps/teagba)
if(NOT BUILDCORE_TARGET STREQUAL "gba") if(NOT BUILDCORE_TARGET STREQUAL "gba")
+80 -12
View File
@@ -1,35 +1,81 @@
BC_VAR_PROJECT_NAME=nostalgia BC_VAR_PROJECT_NAME=nostalgia
BC_VAR_PROJECT_NAME_CAP=Nostalgia BC_VAR_PROJECT_NAME_CAP=Nostalgia
BUILDCORE_PATH=deps/buildcore BC_VAR_DEVENV_ROOT=util
BUILDCORE_PATH=deps/oxlib/deps/buildcore
include ${BUILDCORE_PATH}/base.mk include ${BUILDCORE_PATH}/base.mk
ifeq ($(BC_VAR_OS),darwin) ifeq ($(BC_VAR_OS),darwin)
NOSTALGIA_STUDIO=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP}Studio.app/Contents/MacOS/${BC_VAR_PROJECT_NAME_CAP}Studio PROJECT_STUDIO=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP}Studio.app/Contents/MacOS/${BC_VAR_PROJECT_NAME_CAP}Studio
MGBA=/Applications/mGBA.app/Contents/MacOS/mGBA MGBA=/Applications/mGBA.app/Contents/MacOS/mGBA
else else
NOSTALGIA_STUDIO=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP}Studio PROJECT_STUDIO=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP}Studio
MGBA=mgba-qt MGBA=mgba-qt
endif endif
PROJECT_PLAYER=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP}
.PHONY: git-setup-ox-remote
git-setup-ox-remote:
git remote add -f ox-master git@git.drinkingtea.net:drinkingtea/ox.git
.PHONY: git-pull-ox
git-pull-ox:
git fetch ox-master master
git subtree pull --prefix deps/oxlib ox-master master --squash
.PHONY: git-push-ox
git-push-ox:
git subtree push --prefix=deps/oxlib ox-master master
.PHONY: pkg-gba .PHONY: pkg-gba
pkg-gba: build pkg-gba: build-pack build-gba-player
${BC_CMD_ENVRUN} ${BC_PY3} ./scripts/pkg-gba.py sample_project ${BC_VAR_PROJECT_NAME} ${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/pkg-gba.py sample_project ${BC_VAR_PROJECT_NAME_CAP}
.PHONY: pkg-mac
pkg-mac: install
${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/pkg-dmg.py NostalgiaStudio
.PHONY: generate-studio-rsrc
generate-studio-rsrc:
${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/olympic/studio/applib/src/rsrc.json
${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/nostalgia/studio/rsrc.json
.PHONY: build-gba-player
build-gba-player:
cmake --build ./build/gba-*
.PHONY: build-player
build-player:
${BC_CMD_CMAKE_BUILD} ${BC_VAR_BUILD_PATH} ${BC_VAR_PROJECT_NAME_CAP}
.PHONY: build-pack
build-pack:
cmake --build ./build/${BC_VAR_CURRENT_BUILD} --target ${BC_VAR_PROJECT_NAME}-pack
.PHONY: run .PHONY: run
run: build run: build-player
./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME} sample_project ${PROJECT_PLAYER} sample_project
.PHONY: build-studio
build-studio:
cmake --build ./build/${BC_VAR_CURRENT_BUILD} --target ${BC_VAR_PROJECT_NAME_CAP}Studio
.PHONY: run-studio .PHONY: run-studio
run-studio: build run-studio: build-studio
${NOSTALGIA_STUDIO} ${PROJECT_STUDIO}
.PHONY: gba-run .PHONY: gba-run
gba-run: pkg-gba gba-run: pkg-gba
${MGBA} ${BC_VAR_PROJECT_NAME}.gba ${MGBA} ${BC_VAR_PROJECT_NAME_CAP}.gba
.PHONY: debug .PHONY: debug
debug: build debug: build
${BC_CMD_HOST_DEBUGGER} ./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME} sample_project ${BC_CMD_HOST_DEBUGGER} ${PROJECT_PLAYER} sample_project
.PHONY: debug-studio .PHONY: debug-studio
debug-studio: build debug-studio: build
${BC_CMD_HOST_DEBUGGER} ${NOSTALGIA_STUDIO} ${BC_CMD_HOST_DEBUGGER} ${PROJECT_STUDIO}
.PHONY: configure-gba .PHONY: configure-gba
configure-gba: configure-gba:
@@ -38,3 +84,25 @@ configure-gba:
.PHONY: configure-gba-debug .PHONY: configure-gba-debug
configure-gba-debug: configure-gba-debug:
${BC_CMD_SETUP_BUILD} --toolchain=deps/gbabuildcore/cmake/modules/GBA.cmake --target=gba --current_build=0 --build_type=debug --build_root=${BC_VAR_BUILD_PATH} ${BC_CMD_SETUP_BUILD} --toolchain=deps/gbabuildcore/cmake/modules/GBA.cmake --target=gba --current_build=0 --build_type=debug --build_root=${BC_VAR_BUILD_PATH}
.PHONY: loc
loc:
${BC_PY3} util/scripts/loc.py \
--search-dirs \
src \
deps/ox/src \
deps/buildcore \
deps/gbabuildcore \
deps/glutils \
deps/teagba \
--include-exts \
.cpp \
.hpp \
.py \
.s \
.cmake \
--exclude-paths \
deps/teagba/src/gba_crt0.s \
src/olympic/studio/applib/src/font.cpp \
src/olympic/studio/applib/src/font.hpp \
src/nostalgia/studio/icondata.cpp
+2 -2
View File
@@ -1,8 +1,8 @@
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/modules) list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/modules)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdlib") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdlib")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdinc++") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdinc++")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-unwind-tables") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-unwind-tables")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions") #set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb-interwork") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb-interwork")
+10 -1
View File
@@ -1,2 +1,11 @@
add_library(glad OBJECT src/glad.c) add_library(glad src/glad.c)
target_include_directories(glad PUBLIC include) target_include_directories(glad PUBLIC include)
install(
TARGETS
glad
DESTINATION
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
+23 -23
View File
@@ -89,7 +89,7 @@ struct GLObject: public Base {
return id; return id;
} }
constexpr operator const GLuint&() const noexcept { constexpr operator GLuint const&() const noexcept {
return id; return id;
} }
@@ -135,7 +135,7 @@ struct FrameBuffer {
return fbo.id; return fbo.id;
} }
constexpr operator const GLuint&() const noexcept { constexpr operator GLuint const&() const noexcept {
return fbo.id; return fbo.id;
} }
@@ -158,14 +158,14 @@ struct FrameBuffer {
class FrameBufferBind { class FrameBufferBind {
private: private:
static const FrameBuffer *s_activeFb; static FrameBuffer const *s_activeFb;
const FrameBuffer *m_restoreFb = nullptr; FrameBuffer const *m_restoreFb = nullptr;
public: public:
explicit FrameBufferBind(const FrameBuffer &fb) noexcept; explicit FrameBufferBind(FrameBuffer const &fb) noexcept;
~FrameBufferBind() noexcept; ~FrameBufferBind() noexcept;
}; };
void bind(const FrameBuffer &fb) noexcept; void bind(FrameBuffer const &fb) noexcept;
struct ShaderVarSet { struct ShaderVarSet {
GLsizei len{}; GLsizei len{};
@@ -176,7 +176,7 @@ struct ProgramSource {
ox::Vector<glutils::ShaderVarSet> const shaderParams; ox::Vector<glutils::ShaderVarSet> const shaderParams;
GLsizei const rowLen = [this] { GLsizei const rowLen = [this] {
GLsizei len{}; GLsizei len{};
for (auto const&v : shaderParams) { for (auto const &v : shaderParams) {
len += v.len; len += v.len;
} }
return len; return len;
@@ -187,23 +187,23 @@ struct ProgramSource {
ox::String const geomShader{}; ox::String const geomShader{};
}; };
ox::Result<GLProgram> buildShaderProgram(ProgramSource const&src) noexcept; ox::Result<GLProgram> buildShaderProgram(ProgramSource const &src) noexcept;
ox::Result<GLProgram> buildShaderProgram( ox::Result<GLProgram> buildShaderProgram(
ox::CStringView const&vert, ox::CStringView const &vert,
ox::CStringView const&frag, ox::CStringView const &frag,
ox::CStringView const&geo = "") noexcept; ox::CStringView const &geo = "") noexcept;
void setupShaderParams( void setupShaderParams(
GLProgram const&shader, GLProgram const &shader,
ox::Vector<ShaderVarSet> const&vars, ox::Vector<ShaderVarSet> const &vars,
GLsizei vertexRowLen) noexcept; GLsizei vertexRowLen) noexcept;
void setupShaderParams(GLProgram const&shader, ox::Vector<ShaderVarSet> const&vars) noexcept; void setupShaderParams(GLProgram const &shader, ox::Vector<ShaderVarSet> const &vars) noexcept;
glutils::GLVertexArray generateVertexArrayObject() noexcept; GLVertexArray generateVertexArrayObject() noexcept;
glutils::GLBuffer generateBuffer() noexcept; GLBuffer generateBuffer() noexcept;
[[nodiscard]] [[nodiscard]]
FrameBuffer generateFrameBuffer(int width, int height) noexcept; FrameBuffer generateFrameBuffer(int width, int height) noexcept;
@@ -215,20 +215,20 @@ void resizeFrameBuffer(FrameBuffer &fb, int width, int height) noexcept;
*/ */
void resizeInitFrameBuffer(FrameBuffer &fb, int width, int height) noexcept; void resizeInitFrameBuffer(FrameBuffer &fb, int width, int height) noexcept;
void resizeInitFrameBuffer(FrameBuffer &fb, ox::Size const&sz) noexcept; void resizeInitFrameBuffer(FrameBuffer &fb, ox::Size const &sz) noexcept;
struct BufferSet { struct BufferSet {
glutils::GLVertexArray vao; GLVertexArray vao;
glutils::GLBuffer vbo; GLBuffer vbo;
glutils::GLBuffer ebo; GLBuffer ebo;
glutils::GLTexture tex; GLTexture tex;
ox::Vector<float> vertices; ox::Vector<float> vertices;
ox::Vector<GLuint> elements; ox::Vector<GLuint> elements;
}; };
void sendVbo(BufferSet const&bs) noexcept; void sendVbo(BufferSet const &bs) noexcept;
void sendEbo(BufferSet const&bs) noexcept; void sendEbo(BufferSet const &bs) noexcept;
void clearScreen() noexcept; void clearScreen() noexcept;
+47 -24
View File
@@ -46,9 +46,9 @@ template struct GLObject<deleteVertexArray>;
template struct GLObject<deleteProgram>; template struct GLObject<deleteProgram>;
template struct GLObject<deleteShader>; template struct GLObject<deleteShader>;
const FrameBuffer *FrameBufferBind::s_activeFb = nullptr; FrameBuffer const *FrameBufferBind::s_activeFb = nullptr;
FrameBufferBind::FrameBufferBind(const FrameBuffer &fb) noexcept: m_restoreFb(s_activeFb) { FrameBufferBind::FrameBufferBind(FrameBuffer const &fb) noexcept: m_restoreFb(s_activeFb) {
s_activeFb = &fb; s_activeFb = &fb;
glBindFramebuffer(GL_FRAMEBUFFER, fb); glBindFramebuffer(GL_FRAMEBUFFER, fb);
glViewport(0, 0, fb.width, fb.height); glViewport(0, 0, fb.width, fb.height);
@@ -64,15 +64,15 @@ FrameBufferBind::~FrameBufferBind() noexcept {
} }
} }
void bind(const FrameBuffer &fb) noexcept { void bind(FrameBuffer const &fb) noexcept {
glBindFramebuffer(GL_FRAMEBUFFER, fb); glBindFramebuffer(GL_FRAMEBUFFER, fb);
glViewport(0, 0, fb.width, fb.height); glViewport(0, 0, fb.width, fb.height);
} }
static ox::Result<GLShader> buildShader( static ox::Result<GLShader> buildShader(
GLuint shaderType, GLuint const shaderType,
const GLchar *src, GLchar const *src,
ox::StringViewCR shaderName) noexcept { ox::StringViewCR shaderName) noexcept {
GLShader shader(glCreateShader(shaderType)); GLShader shader(glCreateShader(shaderType));
glShaderSource(shader, 1, &src, nullptr); glShaderSource(shader, 1, &src, nullptr);
@@ -88,7 +88,7 @@ static ox::Result<GLShader> buildShader(
return shader; return shader;
} }
ox::Result<GLProgram> buildShaderProgram(ProgramSource const&src) noexcept { ox::Result<GLProgram> buildShaderProgram(ProgramSource const &src) noexcept {
OX_REQUIRE_M(program, buildShaderProgram( OX_REQUIRE_M(program, buildShaderProgram(
src.vertShader, src.vertShader,
src.fragShader, src.fragShader,
@@ -98,11 +98,11 @@ ox::Result<GLProgram> buildShaderProgram(ProgramSource const&src) noexcept {
} }
void setupShaderParams( void setupShaderParams(
GLProgram const&shader, GLProgram const &shader,
ox::Vector<ShaderVarSet> const&vars, ox::Vector<ShaderVarSet> const &vars,
GLsizei vertexRowLen) noexcept { GLsizei vertexRowLen) noexcept {
// setup vars // setup vars
for (size_t lenWritten = 0; auto const&v : vars) { for (size_t lenWritten = 0; auto const &v : vars) {
auto const attr = static_cast<GLuint>(glGetAttribLocation(shader, v.name.c_str())); auto const attr = static_cast<GLuint>(glGetAttribLocation(shader, v.name.c_str()));
glEnableVertexAttribArray(attr); glEnableVertexAttribArray(attr);
glVertexAttribPointer( glVertexAttribPointer(
@@ -113,19 +113,19 @@ void setupShaderParams(
} }
} }
void setupShaderParams(GLProgram const&shader, ox::Vector<ShaderVarSet> const&vars) noexcept { void setupShaderParams(GLProgram const &shader, ox::Vector<ShaderVarSet> const &vars) noexcept {
// get row len // get row len
GLsizei vertexRowLen{}; GLsizei vertexRowLen{};
for (auto const&v : vars) { for (auto const &v : vars) {
vertexRowLen += v.len; vertexRowLen += v.len;
} }
setupShaderParams(shader, vars, vertexRowLen); setupShaderParams(shader, vars, vertexRowLen);
} }
ox::Result<GLProgram> buildShaderProgram( ox::Result<GLProgram> buildShaderProgram(
ox::CStringView const&vert, ox::CStringView const &vert,
ox::CStringView const&frag, ox::CStringView const &frag,
ox::CStringView const&geo) noexcept { ox::CStringView const &geo) noexcept {
GLProgram prgm(glCreateProgram()); GLProgram prgm(glCreateProgram());
OX_REQUIRE(vs, buildShader(GL_VERTEX_SHADER, vert.c_str(), "vshad")); OX_REQUIRE(vs, buildShader(GL_VERTEX_SHADER, vert.c_str(), "vshad"));
glAttachShader(prgm, vs); glAttachShader(prgm, vs);
@@ -162,16 +162,30 @@ FrameBuffer generateFrameBuffer(int width, int height) noexcept {
// color texture // color texture
glGenTextures(1, &fb.color.id); glGenTextures(1, &fb.color.id);
glBindTexture(GL_TEXTURE_2D, fb.color); glBindTexture(GL_TEXTURE_2D, fb.color);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr); glTexImage2D(
GL_TEXTURE_2D,
0,
GL_RGB,
width,
height,
0,
GL_RGB,
GL_UNSIGNED_BYTE,
nullptr);
glGenerateMipmap(GL_TEXTURE_2D); glGenerateMipmap(GL_TEXTURE_2D);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fb.color, 0); glFramebufferTexture2D(
GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, fb.color, 0);
// depth texture // depth texture
glGenRenderbuffers(1, &fb.depth.id); glGenRenderbuffers(1, &fb.depth.id);
glBindRenderbuffer(GL_RENDERBUFFER, fb.depth); glBindRenderbuffer(GL_RENDERBUFFER, fb.depth);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, width, height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, fb.depth); glFramebufferRenderbuffer(
GL_FRAMEBUFFER,
GL_DEPTH_STENCIL_ATTACHMENT,
GL_RENDERBUFFER,
fb.depth);
// verify FBO // verify FBO
oxAssert(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE, "Frame Buffer is incomplete"); oxAssert(glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE, "Frame Buffer is incomplete");
// restore primary FB // restore primary FB
@@ -189,7 +203,16 @@ void resizeFrameBuffer(FrameBuffer &fb, int width, int height) noexcept {
glBindFramebuffer(GL_FRAMEBUFFER, fb); glBindFramebuffer(GL_FRAMEBUFFER, fb);
// color texture // color texture
glBindTexture(GL_TEXTURE_2D, fb.color); glBindTexture(GL_TEXTURE_2D, fb.color);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, nullptr); glTexImage2D(
GL_TEXTURE_2D,
0,
GL_RGB,
width,
height,
0,
GL_RGB,
GL_UNSIGNED_BYTE,
nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// depth texture // depth texture
@@ -201,7 +224,7 @@ void resizeFrameBuffer(FrameBuffer &fb, int width, int height) noexcept {
glBindRenderbuffer(GL_RENDERBUFFER, 0); glBindRenderbuffer(GL_RENDERBUFFER, 0);
} }
void resizeInitFrameBuffer(FrameBuffer &fb, int width, int height) noexcept { void resizeInitFrameBuffer(FrameBuffer &fb, int const width, int const height) noexcept {
if (!fb) { if (!fb) {
fb = generateFrameBuffer(width, height); fb = generateFrameBuffer(width, height);
return; return;
@@ -209,18 +232,18 @@ void resizeInitFrameBuffer(FrameBuffer &fb, int width, int height) noexcept {
resizeFrameBuffer(fb, width, height); resizeFrameBuffer(fb, width, height);
} }
void resizeInitFrameBuffer(FrameBuffer &fb, ox::Size const&sz) noexcept { void resizeInitFrameBuffer(FrameBuffer &fb, ox::Size const &sz) noexcept {
resizeInitFrameBuffer(fb, sz.width, sz.height); resizeInitFrameBuffer(fb, sz.width, sz.height);
} }
void sendVbo(BufferSet const&bs) noexcept { void sendVbo(BufferSet const &bs) noexcept {
const auto bufferSize = static_cast<GLsizeiptr>(sizeof(decltype(bs.vertices)::value_type) * bs.vertices.size()); auto const bufferSize = static_cast<GLsizeiptr>(sizeof(decltype(bs.vertices)::value_type) * bs.vertices.size());
glBindBuffer(GL_ARRAY_BUFFER, bs.vbo); glBindBuffer(GL_ARRAY_BUFFER, bs.vbo);
glBufferData(GL_ARRAY_BUFFER, bufferSize, bs.vertices.data(), GL_DYNAMIC_DRAW); glBufferData(GL_ARRAY_BUFFER, bufferSize, bs.vertices.data(), GL_DYNAMIC_DRAW);
} }
void sendEbo(BufferSet const&bs) noexcept { void sendEbo(BufferSet const &bs) noexcept {
const auto bufferSize = static_cast<GLsizeiptr>(sizeof(decltype(bs.elements)::value_type) * bs.elements.size()); auto const bufferSize = static_cast<GLsizeiptr>(sizeof(decltype(bs.elements)::value_type) * bs.elements.size());
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bs.ebo); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, bs.ebo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, bufferSize, bs.elements.data(), GL_STATIC_DRAW); glBufferData(GL_ELEMENT_ARRAY_BUFFER, bufferSize, bs.elements.data(), GL_STATIC_DRAW);
} }
+9 -1
View File
@@ -6,7 +6,7 @@ endif()
# DrinkingTea: end # DrinkingTea: end
add_library( add_library(
imgui OBJECT imgui
imgui.cpp imgui.cpp
imgui_demo.cpp imgui_demo.cpp
imgui_draw.cpp imgui_draw.cpp
@@ -20,3 +20,11 @@ target_include_directories(
imgui SYSTEM PUBLIC imgui SYSTEM PUBLIC
. .
) )
install(
TARGETS
imgui
DESTINATION
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
+1 -1
View File
@@ -1,4 +1,4 @@
cmake_minimum_required(VERSION 3.5) cmake_minimum_required(VERSION 3.19)
project(nativefiledialog-extended VERSION 1.1.1) project(nativefiledialog-extended VERSION 1.1.1)
set(nfd_ROOT_PROJECT OFF) set(nfd_ROOT_PROJECT OFF)
-12
View File
@@ -1,12 +0,0 @@
{
"log_functions": [
{
"function": "ox::trace::gdblogger::captureLogFunc",
"ignore_frames": 3,
"file_var": "file",
"line_var": "line",
"channel_var": "ch",
"msg_var": "msg"
}
]
}
-11
View File
@@ -1,11 +0,0 @@
language: cpp
sudo: false
dist: trusty
compiler:
- clang
- gcc
addons:
apt:
packages:
- cmake
script: ./scripts/cibuild
-68
View File
@@ -1,68 +0,0 @@
OS=$(shell uname | tr [:upper:] [:lower:])
HOST_ENV=${OS}-$(shell uname -m)
DEVENV=devenv$(shell pwd | sed 's/\//-/g')
DEVENV_IMAGE=wombatant/devenv
ifneq ($(shell which docker 2>&1),)
ifeq ($(shell docker inspect --format="{{.State.Status}}" ${DEVENV} 2>&1),running)
ENV_RUN=docker exec -i -t --user $(shell id -u ${USER}) ${DEVENV}
endif
endif
all:
${ENV_RUN} ./scripts/run-make build
preinstall:
${ENV_RUN} ./scripts/run-make build preinstall
install:
${ENV_RUN} ./scripts/run-make build install
clean:
${ENV_RUN} ./scripts/run-make build clean
purge:
${ENV_RUN} rm -rf build
test:
${ENV_RUN} ./scripts/run-make build test
devenv:
docker pull ${DEVENV_IMAGE}
docker run -d -v $(shell pwd):/usr/src/project \
-e LOCAL_USER_ID=$(shell id -u ${USER}) \
--name ${DEVENV} -t ${DEVENV_IMAGE} bash
devenv-destroy:
docker rm -f ${DEVENV}
devenv-shell:
${ENV_RUN} bash
configure-release:
${ENV_RUN} rm -rf build/${HOST_ENV}-release
${ENV_RUN} ./scripts/setup_build ${HOST_ENV}
${ENV_RUN} rm -f build/current
${ENV_RUN} ln -s ${HOST_ENV}-release build/current
configure-debug:
${ENV_RUN} rm -rf build/${HOST_ENV}-debug
${ENV_RUN} ./scripts/setup_build ${HOST_ENV} debug
${ENV_RUN} rm -f build/current
${ENV_RUN} ln -s ${HOST_ENV}-debug build/current
configure-asan:
${ENV_RUN} rm -rf build/${HOST_ENV}-asan
${ENV_RUN} ./scripts/setup_build ${HOST_ENV} asan
${ENV_RUN} rm -f build/current
${ENV_RUN} ln -s ${HOST_ENV}-asan build/current
configure-windows:
${ENV_RUN} rm -rf build/windows
${ENV_RUN} ./scripts/setup_build windows
${ENV_RUN} rm -f build/current
${ENV_RUN} ln -s windows build/current
configure-windows-debug:
${ENV_RUN} rm -rf build/windows
${ENV_RUN} ./scripts/setup_build windows debug
${ENV_RUN} rm -f build/current
${ENV_RUN} ln -s windows build/current
configure-gba:
${ENV_RUN} rm -rf build/gba-release
${ENV_RUN} ./scripts/setup_build gba
${ENV_RUN} rm -f build/current
${ENV_RUN} ln -s gba-release build/current
-24
View File
@@ -1,24 +0,0 @@
set(CMAKE_SYSTEM_NAME "Generic")
set(DEVKITARM $ENV{DEVKITARM})
if(NOT DEVKITARM)
message(FATAL_ERROR "DEVKITARM environment variable not set")
endif()
set(CMAKE_C_COMPILER ${DEVKITARM}/bin/arm-none-eabi-gcc)
set(CMAKE_CXX_COMPILER ${DEVKITARM}/bin/arm-none-eabi-g++)
set(CMAKE_FIND_ROOT_PATH ${DEVKITARM})
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_LIBRARY_PREFIXES lib)
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
set(LINKER_FLAGS "-specs=gba.specs")
add_definitions (
-DARM7
)
include(FindPackageHandleStandardArgs)
-18
View File
@@ -1,18 +0,0 @@
set(CMAKE_SYSTEM_NAME Windows)
set(TOOLCHAIN_PREFIX x86_64-w64-mingw32)
# cross compilers to use for C and C++
set(CMAKE_C_COMPILER /usr/bin/${TOOLCHAIN_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER /usr/bin/${TOOLCHAIN_PREFIX}-g++)
set(CMAKE_RC_COMPILER /usr/bin/${TOOLCHAIN_PREFIX}-windres)
# target environment on the build host system
# set 1st to dir with the cross compiler's C/C++ headers/libs
set(CMAKE_FIND_ROOT_PATH /usr/${TOOLCHAIN_PREFIX})
# modify default behavior of FIND_XXX() commands to
# search for headers/libs in the target environment and
# search for programs in the build host environment
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
-52
View File
@@ -1,52 +0,0 @@
# This file belongs Nick Overdijk, and is from https://github.com/NickNick/wubwubcmake
# The MIT License (MIT)
#
# Copyright (c) 2013 Nick Overdijk
#
# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the "Software"), to deal in
# the Software without restriction, including without limitation the rights to
# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
# the Software, and to permit persons to whom the Software is furnished to do so,
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.option(USE_ASAN "Enable Address Sanitizer, if your compiler supports it" ON)
option(USE_ASAN "Enable Address Sanitizer, if your compiler supports it" OFF)
if(USE_ASAN)
include(CheckCXXSourceCompiles)
# If the compiler understands -fsanitize=address, add it to the flags (gcc since 4.8 & clang since version 3.2)
set(CMAKE_REQUIRED_FLAGS_BAK "${CMAKE_REQUIRED_FLAGS}")
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -fsanitize=address")
CHECK_CXX_SOURCE_COMPILES("int main() { return 0; }" FLAG_FSANA_SUPPORTED)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_BAK}")
if(FLAG_FSANA_SUPPORTED)
set(asan_flag "-fsanitize=address")
else(FLAG_FSANA_SUPPORTED)
# Alternatively, try if it understands -faddress-sanitizer (clang until version 3.2)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS} -faddress-sanitizer")
CHECK_CXX_SOURCE_COMPILES("int main() { return 0; }" FLAG_FASAN_SUPPORTED)
set(CMAKE_REQUIRED_FLAGS "${CMAKE_REQUIRED_FLAGS_BAK}")
if(FLAG_FASAN_SUPPORTED)
set(asan_flag "-faddress-sanitizer")
endif(FLAG_FASAN_SUPPORTED)
endif(FLAG_FSANA_SUPPORTED)
if(FLAG_FSANA_SUPPORTED OR FLAG_FASAN_SUPPORTED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${asan_flag}")
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${asan_flag}")
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} ${asan_flag}")
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${asan_flag}")
endif()
endif(USE_ASAN)
-8
View File
@@ -1,8 +0,0 @@
#! /usr/bin/env bash
set -e
make -j release
make -j debug
make -j
make -j test
-8
View File
@@ -1,8 +0,0 @@
#! /usr/bin/env bash
set -e
for f in $(find $1 -maxdepth 1 -mindepth 1 -type d)
do
cmake --build "$f" --target $2 --
done
-34
View File
@@ -1,34 +0,0 @@
#! /usr/bin/env bash
set -e
project=$(pwd)/
TARGET=$1
BUILD_TYPE=$2
if [[ $TARGET == windows ]]; then
toolchain="-DCMAKE_TOOLCHAIN_FILE=cmake/modules/Mingw.cmake"
elif [[ $TARGET == gba ]]; then
toolchain="-DCMAKE_TOOLCHAIN_FILE=cmake/modules/GBA.cmake -DOX_USE_STDLIB=OFF -DCMAKE_INSTALL_PREFIX=$DEVKITARM"
fi
if [[ $BUILD_TYPE == asan ]]; then
buildTypeArgs="-DUSE_ASAN=ON -DCMAKE_BUILD_TYPE=Debug"
buildDir="build/${TARGET}-asan"
elif [[ $BUILD_TYPE == debug ]]; then
buildTypeArgs="-DCMAKE_BUILD_TYPE=Debug"
buildDir="build/${TARGET}-debug"
else
buildTypeArgs="-DCMAKE_BUILD_TYPE=Release"
buildDir="build/${TARGET}-release"
fi
mkdir -p $buildDir
pushd $buildDir
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \
-GNinja \
$buildTypeArgs \
$toolchain \
$project
popd
-1
View File
@@ -1 +0,0 @@
add_subdirectory(ox)
-46
View File
@@ -1,46 +0,0 @@
add_library(
OxEvent
signal.cpp
)
if(NOT MSVC)
target_compile_options(OxEvent PRIVATE -Wsign-conversion)
target_compile_options(OxEvent PRIVATE -Wconversion)
endif()
if(NOT OX_BARE_METAL)
set_property(
TARGET
OxEvent
PROPERTY
POSITION_INDEPENDENT_CODE ON
)
endif()
target_compile_definitions(
OxEvent PUBLIC
$<$<BOOL:${OX_USE_STDLIB}>:OX_USE_STDLIB>
$<$<BOOL:${OX_NODEBUG}>:OX_NODEBUG>
)
target_link_libraries(
OxEvent PUBLIC
OxStd
)
install(
FILES
event.hpp
signal.hpp
DESTINATION
include/ox/event
)
install(TARGETS OxEvent
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
if(OX_RUN_TESTS)
add_subdirectory(test)
endif()
-17
View File
@@ -1,17 +0,0 @@
/*
* Copyright 2015 - 2024 gary@drinkingtea.net
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#include "err.hpp"
#include "presenceindicator.hpp"
namespace ox {
template class FieldBitmapWriterBase<uint8_t*>;
template class FieldBitmapWriterBase<const uint8_t*>;
}
-163
View File
@@ -1,163 +0,0 @@
/*
* Copyright 2015 - 2024 gary@drinkingtea.net
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#pragma once
#include <ox/std/array.hpp>
#include <ox/std/bit.hpp>
#include <ox/std/error.hpp>
#include <ox/std/types.hpp>
#include <ox/std/reader.hpp>
#include "err.hpp"
namespace ox {
template<Reader_c Reader>
class FieldBitmapReader {
protected:
mutable std::size_t m_mapBlockIdx = ~std::size_t{0};
mutable uint64_t m_mapBlock = 0;
std::size_t m_mapStart = 0;
Reader &m_reader;
public:
explicit constexpr FieldBitmapReader(Reader &reader) noexcept;
constexpr Result<bool> get(std::size_t i) const noexcept;
private:
constexpr ox::Error loadMapBlock(std::size_t id) const noexcept;
};
template<Reader_c Reader>
constexpr FieldBitmapReader<Reader>::FieldBitmapReader(Reader &reader) noexcept:
m_mapStart(reader.tellg()),
m_reader(reader) {
}
template<Reader_c Reader>
constexpr Result<bool> FieldBitmapReader<Reader>::get(std::size_t idx) const noexcept {
constexpr auto blockBits = sizeof(m_mapBlock);
auto const blockIdx = idx / blockBits;
if (m_mapBlockIdx != blockIdx) [[unlikely]] {
OX_RETURN_ERROR(loadMapBlock(blockIdx));
}
idx %= blockBits;
return (m_mapBlock >> idx) & 1;
}
template<Reader_c Reader>
constexpr ox::Error FieldBitmapReader<Reader>::loadMapBlock(std::size_t idx) const noexcept {
OX_REQUIRE(g, m_reader.tellg());
OX_RETURN_ERROR(m_reader.seekg(static_cast<int>(m_mapStart + idx), ox::ios_base::beg));
ox::Array<char, sizeof(m_mapBlock)> mapBlock{};
OX_RETURN_ERROR(m_reader.read(mapBlock.data(), sizeof(m_mapBlock)));
// Warning: narrow-conv
OX_RETURN_ERROR(m_reader.seekg(static_cast<int>(g), ox::ios_base::beg));
m_mapBlock = 0;
for (auto i = 0ull; auto b : mapBlock) {
m_mapBlock |= static_cast<uint64_t>(std::bit_cast<uint8_t>(b)) << i;
i += 8;
}
m_mapBlockIdx = idx;
return {};
}
template<typename T>
class FieldBitmapWriterBase {
protected:
T m_map = nullptr;
std::size_t m_mapLen = 0;
public:
constexpr FieldBitmapWriterBase(T map, std::size_t maxLen) noexcept;
constexpr auto setBuffer(T map, std::size_t maxLen) noexcept;
constexpr Result<bool> get(std::size_t i) const noexcept;
constexpr void setFields(int) noexcept;
constexpr void setMaxLen(int) noexcept;
[[nodiscard]]
constexpr int64_t getMaxLen() const noexcept;
};
template<typename T>
constexpr FieldBitmapWriterBase<T>::FieldBitmapWriterBase(T map, std::size_t maxLen) noexcept {
m_map = map;
m_mapLen = maxLen;
}
template<typename T>
constexpr auto FieldBitmapWriterBase<T>::setBuffer(T map, std::size_t maxLen) noexcept {
m_map = map;
m_mapLen = maxLen;
}
template<typename T>
constexpr Result<bool> FieldBitmapWriterBase<T>::get(std::size_t i) const noexcept {
if (i / 8 < m_mapLen) {
return (m_map[i / 8] >> (i % 8)) & 1;
} else {
return ox::Error(McPresenceMapOverflow);
}
}
template<typename T>
constexpr void FieldBitmapWriterBase<T>::setFields(int fields) noexcept {
m_mapLen = static_cast<std::size_t>((fields / 8 + 1) - (fields % 8 == 0));
}
template<typename T>
constexpr void FieldBitmapWriterBase<T>::setMaxLen(int maxLen) noexcept {
m_mapLen = static_cast<std::size_t>(maxLen);
}
template<typename T>
constexpr int64_t FieldBitmapWriterBase<T>::getMaxLen() const noexcept {
return static_cast<int64_t>(m_mapLen);
}
extern template class FieldBitmapWriterBase<uint8_t*>;
extern template class FieldBitmapWriterBase<const uint8_t*>;
class FieldBitmap: public FieldBitmapWriterBase<uint8_t*> {
public:
constexpr FieldBitmap(uint8_t *map, std::size_t maxLen) noexcept;
constexpr Error set(std::size_t i, bool on) noexcept;
};
constexpr FieldBitmap::FieldBitmap(uint8_t *map, std::size_t maxLen) noexcept:
FieldBitmapWriterBase<uint8_t*>(map, maxLen) {
}
constexpr Error FieldBitmap::set(std::size_t i, bool on) noexcept {
if (i / 8 < m_mapLen) {
OX_ALLOW_UNSAFE_BUFFERS_BEGIN
if (on) {
m_map[i / 8] |= 1 << (i % 8);
} else {
m_map[i / 8] &= ~static_cast<uint8_t>(1 << (i % 8));
}
OX_ALLOW_UNSAFE_BUFFERS_END
return {};
} else {
return ox::Error(McPresenceMapOverflow);
}
}
}
-408
View File
@@ -1,408 +0,0 @@
/*
* Copyright 2015 - 2024 gary@drinkingtea.net
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#pragma once
#include <ox/model/fieldcounter.hpp>
#include <ox/model/modelhandleradaptor.hpp>
#include <ox/model/optype.hpp>
#include <ox/model/types.hpp>
#include <ox/std/bit.hpp>
#include <ox/std/buffer.hpp>
#include <ox/std/byteswap.hpp>
#include <ox/std/hashmap.hpp>
#include <ox/std/optional.hpp>
#include <ox/std/string.hpp>
#include <ox/std/types.hpp>
#include <ox/std/units.hpp>
#include "intops.hpp"
#include "err.hpp"
#include "presenceindicator.hpp"
#include "types.hpp"
namespace ox {
template<Writer_c Writer>
class MetalClawWriter {
private:
ox::Vector<uint8_t, 16> m_presenceMapBuff{};
FieldBitmap m_fieldPresence;
int m_field = 0;
ox::Optional<int> m_unionIdx;
std::size_t m_writerBeginP{};
Writer &m_writer;
public:
constexpr explicit MetalClawWriter(Writer &writer, ox::Optional<int> const&unionIdx = {}) noexcept;
constexpr ~MetalClawWriter() noexcept = default;
constexpr Error field(const char*, const int8_t *val) noexcept;
constexpr Error field(const char*, const int16_t *val) noexcept;
constexpr Error field(const char*, const int32_t *val) noexcept;
constexpr Error field(const char*, const int64_t *val) noexcept;
constexpr Error field(const char*, const uint8_t *val) noexcept;
constexpr Error field(const char*, const uint16_t *val) noexcept;
constexpr Error field(const char*, const uint32_t *val) noexcept;
constexpr Error field(const char*, const uint64_t *val) noexcept;
constexpr Error field(const char*, const bool *val) noexcept;
template<typename T>
constexpr Error field(const char*, const T *val, std::size_t len) noexcept;
template<typename T>
constexpr Error field(const char *name, const HashMap<String, T> *val) noexcept;
template<std::size_t SmallStringSize>
constexpr Error field(const char*, const BasicString<SmallStringSize> *val) noexcept;
template<std::size_t L>
constexpr Error field(const char*, const IString<L> *val) noexcept;
constexpr Error fieldCString(const char *name, const char *const*val, std::size_t buffLen) noexcept;
constexpr Error fieldCString(const char *name, const char **val) noexcept;
constexpr Error fieldCString(const char *name, const char *const*val) noexcept;
constexpr Error fieldCString(const char *name, const char *val, std::size_t len) noexcept;
template<typename T>
constexpr Error field(const char*, const T *val) noexcept;
template<typename U, bool force = false>
constexpr Error field(const char*, UnionView<U, force> val) noexcept;
template<typename T = std::nullptr_t>
constexpr ox::Error setTypeInfo(
const char *name = T::TypeName,
int version = T::TypeVersion,
const Vector<String>& = {},
std::size_t fields = ModelFieldCount_v<T>) noexcept;
/**
* stringLength is not implemented in MetalClawWriter
*/
[[nodiscard]]
constexpr auto stringLength(const char*) noexcept {
return 0;
}
/**
* stringLength is not implemented in MetalClawWriter
*/
[[nodiscard]]
constexpr auto arrayLength(const char*, bool = true) noexcept {
return 0;
}
[[nodiscard]]
static constexpr auto opType() noexcept {
return OpType::Write;
}
ox::Error finalize() noexcept;
private:
constexpr Error appendInteger(Integer_c auto val) noexcept {
bool fieldSet = false;
if (val && (!m_unionIdx.has_value() || *m_unionIdx == m_field)) {
auto mi = mc::encodeInteger(val);
OX_RETURN_ERROR(m_writer.write(reinterpret_cast<const char*>(mi.data.data()), mi.length));
fieldSet = true;
}
OX_RETURN_ERROR(m_fieldPresence.set(static_cast<std::size_t>(m_field), fieldSet));
++m_field;
return ox::Error(0);
}
};
extern template class ModelHandlerInterface<MetalClawWriter<BufferWriter>>;
extern template class ModelHandlerInterface<MetalClawWriter<CharBuffWriter>>;
template<Writer_c Writer>
constexpr MetalClawWriter<Writer>::MetalClawWriter(Writer &writer, ox::Optional<int> const&unionIdx) noexcept:
m_fieldPresence(m_presenceMapBuff.data(), m_presenceMapBuff.size()),
m_unionIdx(unionIdx),
m_writerBeginP(writer.tellp()),
m_writer(writer) {
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::field(const char*, const int8_t *val) noexcept {
return appendInteger(*val);
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::field(const char*, const int16_t *val) noexcept {
return appendInteger(*val);
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::field(const char*, const int32_t *val) noexcept {
return appendInteger(*val);
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::field(const char*, const int64_t *val) noexcept {
return appendInteger(*val);
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::field(const char*, const uint8_t *val) noexcept {
return appendInteger(*val);
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::field(const char*, const uint16_t *val) noexcept {
return appendInteger(*val);
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::field(const char*, const uint32_t *val) noexcept {
return appendInteger(*val);
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::field(const char*, const uint64_t *val) noexcept {
return appendInteger(*val);
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::field(const char*, const bool *val) noexcept {
if (!m_unionIdx.has_value() || *m_unionIdx == m_field) {
OX_RETURN_ERROR(m_fieldPresence.set(static_cast<std::size_t>(m_field), *val));
}
++m_field;
return ox::Error(0);
}
template<Writer_c Writer>
template<std::size_t SmallStringSize>
constexpr Error MetalClawWriter<Writer>::field(const char*, const BasicString<SmallStringSize> *val) noexcept {
bool fieldSet = false;
if (val->len() && (!m_unionIdx.has_value() || *m_unionIdx == m_field)) {
// write the length
const auto strLen = mc::encodeInteger(val->len());
OX_RETURN_ERROR(m_writer.write(reinterpret_cast<const char*>(strLen.data.data()), strLen.length));
// write the string
OX_RETURN_ERROR(m_writer.write(val->c_str(), static_cast<std::size_t>(val->len())));
fieldSet = true;
}
OX_RETURN_ERROR(m_fieldPresence.set(static_cast<std::size_t>(m_field), fieldSet));
++m_field;
return ox::Error(0);
}
template<Writer_c Writer>
template<std::size_t L>
constexpr Error MetalClawWriter<Writer>::field(const char *name, const IString<L> *val) noexcept {
return fieldCString(name, val->data(), val->len());
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::fieldCString(const char*, const char *const*val, std::size_t) noexcept {
bool fieldSet = false;
if (!m_unionIdx.has_value() || *m_unionIdx == m_field) {
const auto strLen = *val ? ox::strlen(*val) : 0;
// write the length
const auto strLenBuff = mc::encodeInteger(strLen);
OX_RETURN_ERROR(m_writer.write(reinterpret_cast<const char*>(strLenBuff.data.data()), strLenBuff.length));
// write the string
OX_RETURN_ERROR(m_writer.write(*val, static_cast<std::size_t>(strLen)));
fieldSet = true;
}
OX_RETURN_ERROR(m_fieldPresence.set(static_cast<std::size_t>(m_field), fieldSet));
++m_field;
return ox::Error(0);
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::fieldCString(const char *name, const char **val) noexcept {
return fieldCString(name, val, {});
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::fieldCString(const char *name, const char *const*val) noexcept {
return fieldCString(name, val, {});
}
template<Writer_c Writer>
constexpr Error MetalClawWriter<Writer>::fieldCString(const char*, const char *val, std::size_t strLen) noexcept {
bool fieldSet = false;
if (strLen && (!m_unionIdx.has_value() || *m_unionIdx == m_field)) {
// write the length
const auto strLenBuff = mc::encodeInteger(strLen);
OX_RETURN_ERROR(m_writer.write(reinterpret_cast<const char*>(strLenBuff.data.data()), strLenBuff.length));
// write the string
OX_RETURN_ERROR(m_writer.write(val, static_cast<std::size_t>(strLen)));
fieldSet = true;
}
OX_RETURN_ERROR(m_fieldPresence.set(static_cast<std::size_t>(m_field), fieldSet));
++m_field;
return ox::Error(0);
}
template<Writer_c Writer>
template<typename T>
constexpr Error MetalClawWriter<Writer>::field(const char*, const T *val) noexcept {
if constexpr(isVector_v<T> || isArray_v<T>) {
return field(nullptr, val->data(), val->size());
} else {
bool fieldSet = false;
if (val && (!m_unionIdx.has_value() || *m_unionIdx == m_field)) {
auto const writeIdx = m_writer.tellp();
MetalClawWriter<Writer> writer(m_writer);
ModelHandlerInterface<MetalClawWriter<Writer>> handler{&writer};
OX_RETURN_ERROR(model(&handler, val));
OX_RETURN_ERROR(writer.finalize());
fieldSet = writeIdx != m_writer.tellp();
}
OX_RETURN_ERROR(m_fieldPresence.set(static_cast<std::size_t>(m_field), fieldSet));
++m_field;
return {};
}
}
template<Writer_c Writer>
template<typename U, bool force>
constexpr Error MetalClawWriter<Writer>::field(const char*, UnionView<U, force> val) noexcept {
bool fieldSet = false;
if (val.get() && (!m_unionIdx.has_value() || *m_unionIdx == m_field)) {
auto const writeIdx = m_writer.tellp();
MetalClawWriter<Writer> writer(m_writer, ox::Optional<int>(ox::in_place, val.idx()));
ModelHandlerInterface handler{&writer};
OX_RETURN_ERROR(model(&handler, val.get()));
OX_RETURN_ERROR(writer.finalize());
fieldSet = writeIdx != m_writer.tellp();
}
OX_RETURN_ERROR(m_fieldPresence.set(static_cast<std::size_t>(m_field), fieldSet));
++m_field;
return {};
}
template<Writer_c Writer>
template<typename T>
constexpr Error MetalClawWriter<Writer>::field(const char*, const T *val, std::size_t len) noexcept {
bool fieldSet = false;
if (len && (!m_unionIdx.has_value() || *m_unionIdx == m_field)) {
// write the length
const auto arrLen = mc::encodeInteger(len);
OX_RETURN_ERROR(m_writer.write(reinterpret_cast<const char*>(arrLen.data.data()), arrLen.length));
auto const writeIdx = m_writer.tellp();
MetalClawWriter<Writer> writer(m_writer);
ModelHandlerInterface handler{&writer};
OX_RETURN_ERROR(handler.template setTypeInfo<T>("List", 0, {}, static_cast<std::size_t>(len)));
// write the array
for (std::size_t i = 0; i < len; ++i) {
OX_ALLOW_UNSAFE_BUFFERS_BEGIN
OX_RETURN_ERROR(handler.field("", &val[i]));
OX_ALLOW_UNSAFE_BUFFERS_END
}
OX_RETURN_ERROR(writer.finalize());
fieldSet = writeIdx != m_writer.tellp();
}
OX_RETURN_ERROR(m_fieldPresence.set(static_cast<std::size_t>(m_field), fieldSet));
++m_field;
return ox::Error(0);
}
template<Writer_c Writer>
template<typename T>
constexpr Error MetalClawWriter<Writer>::field(const char*, const HashMap<String, T> *val) noexcept {
const auto &keys = val->keys();
const auto len = keys.size();
bool fieldSet = false;
if (len && (!m_unionIdx.has_value() || *m_unionIdx == m_field)) {
// write the length
const auto arrLen = mc::encodeInteger(len);
OX_RETURN_ERROR(m_writer.write(reinterpret_cast<const char*>(arrLen.data.data()), arrLen.length));
// write map
MetalClawWriter<Writer> writer(m_writer);
ModelHandlerInterface handler{&writer};
// double len for both key and value
OX_RETURN_ERROR(handler.setTypeInfo("Map", 0, {}, len * 2));
// this loop body needs to be in a lambda because of the potential alloca call
constexpr auto loopBody = [](auto &handler, auto const&key, auto const&val) -> ox::Error {
const auto keyLen = key.len();
auto wkey = ox_malloca(keyLen + 1, char, 0);
memcpy(wkey.get(), key.c_str(), keyLen + 1);
OX_RETURN_ERROR(handler.fieldCString("", wkey.get(), keyLen));
OX_REQUIRE_M(value, val.at(key));
return handler.field("", value);
};
// write the array
for (std::size_t i = 0; i < len; ++i) {
auto const&key = keys[i];
OX_RETURN_ERROR(loopBody(handler, key, *val));
}
OX_RETURN_ERROR(writer.finalize());
fieldSet = true;
}
OX_RETURN_ERROR(m_fieldPresence.set(static_cast<std::size_t>(m_field), fieldSet));
++m_field;
return ox::Error(0);
}
template<Writer_c Writer>
template<typename T>
constexpr ox::Error MetalClawWriter<Writer>::setTypeInfo(
const char*,
int,
const Vector<String>&,
std::size_t fields) noexcept {
const auto fieldPresenceLen = (fields - 1) / 8 + 1;
OX_RETURN_ERROR(m_writer.write(nullptr, fieldPresenceLen));
m_presenceMapBuff.resize(fieldPresenceLen);
m_fieldPresence.setBuffer(m_presenceMapBuff.data(), m_presenceMapBuff.size());
m_fieldPresence.setFields(static_cast<int>(fields));
return {};
}
template<Writer_c Writer>
ox::Error MetalClawWriter<Writer>::finalize() noexcept {
const auto end = m_writer.tellp();
OX_RETURN_ERROR(m_writer.seekp(m_writerBeginP));
OX_RETURN_ERROR(m_writer.write(
reinterpret_cast<const char*>(m_presenceMapBuff.data()),
m_presenceMapBuff.size()));
OX_RETURN_ERROR(m_writer.seekp(end));
return {};
}
Result<Buffer> writeMC(Writer_c auto &writer, const auto &val) noexcept {
MetalClawWriter mcWriter(writer);
ModelHandlerInterface handler{&mcWriter};
OX_RETURN_ERROR(model(&handler, &val));
OX_RETURN_ERROR(mcWriter.finalize());
return {};
}
Result<Buffer> writeMC(auto const&val, std::size_t buffReserveSz = 2 * units::KB) noexcept {
Buffer buff(buffReserveSz);
BufferWriter bw(&buff, 0);
OX_RETURN_ERROR(writeMC(bw, val));
buff.resize(bw.tellp());
return buff;
}
Error writeMC(char *buff, std::size_t buffLen, auto const&val, std::size_t *sizeOut = nullptr) noexcept {
CharBuffWriter bw{{buff, buffLen}};
OX_RETURN_ERROR(writeMC(bw, val));
if (sizeOut) {
*sizeOut = bw.tellp();
}
return {};
}
}
-54
View File
@@ -1,54 +0,0 @@
add_library(
OxModel
desctypes.cpp
descwrite.cpp
modelvalue.cpp
)
if(NOT MSVC)
target_compile_options(OxModel PRIVATE -Wconversion)
target_compile_options(OxModel PRIVATE -Wsign-conversion)
endif()
target_link_libraries(
OxModel PUBLIC
OxStd
)
if(NOT OX_BARE_METAL)
set_property(
TARGET
OxModel
PROPERTY
POSITION_INDEPENDENT_CODE ON
)
endif()
install(
FILES
def.hpp
descread.hpp
desctypes.hpp
descwrite.hpp
optype.hpp
metadata.hpp
model.hpp
modelhandleradaptor.hpp
modelops.hpp
modelvalue.hpp
typenamecatcher.hpp
types.hpp
typestore.hpp
walk.hpp
DESTINATION
include/ox/model
)
install(TARGETS OxModel
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib
)
if(OX_RUN_TESTS)
add_subdirectory(test)
endif()
-231
View File
@@ -1,231 +0,0 @@
/*
* Copyright 2015 - 2024 gary@drinkingtea.net
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#pragma once
#include <ox/std/utility.hpp>
#include "modelvalue.hpp"
namespace ox {
template<typename Handler, OpType opType_v = Handler::opType()>
class ModelHandlerInterface {
private:
Handler *m_handler = nullptr;
public:
constexpr explicit ModelHandlerInterface(Handler *handler) noexcept: m_handler(handler) {
}
template<typename T = std::nullptr_t>
constexpr ox::Error setTypeInfo(
const char* name = T::TypeName,
int version = T::TypeVersion,
const Vector<String>& typeParams = {}) noexcept {
return m_handler->template setTypeInfo<T>(name, version, typeParams, ModelFieldCount_v<T>);
}
template<typename T = std::nullptr_t>
constexpr ox::Error setTypeInfo(
const char *name,
int version,
const Vector<String>& typeParams,
std::size_t fields) noexcept {
return m_handler->template setTypeInfo<T>(name, version, typeParams, fields);
}
template<std::size_t len>
constexpr Error fieldCString(const char *name, char val[len]) noexcept {
return m_handler->fieldCString(name, &val[0], len);
}
template<std::size_t len>
constexpr Error fieldCString(const char *name, const char val[len]) noexcept requires(opType_v != OpType::Read) {
if constexpr(opType_v != OpType::Read) {
return m_handler->fieldCString(name, &val[0], len);
} else {
return {};
}
}
constexpr Error fieldCString(const char *name, char **val) noexcept {
return m_handler->fieldCString(name, val);
}
constexpr Error fieldCString(const char *name, const char *const*val) noexcept requires(opType_v != OpType::Read) {
// this check looks pointless, but it's to address a Clang bug
if constexpr(opType_v != OpType::Read) {
return m_handler->fieldCString(name, val);
} else {
return {};
}
}
constexpr Error fieldCString(const char *name, const char **val) noexcept requires(opType_v != OpType::Read) {
// this check looks pointless, but it's to address a Clang bug
if constexpr(opType_v != OpType::Read) {
return m_handler->fieldCString(name, val);
} else {
return {};
}
}
constexpr Error fieldCString(const char *name, char **val, std::size_t buffLen) noexcept {
return m_handler->fieldCString(name, val, buffLen);
}
constexpr Error fieldCString(const char *name, const char **val, std::size_t buffLen) noexcept requires(opType_v != OpType::Read) {
// this check looks pointless, but it's to address a Clang bug
if constexpr(opType_v != OpType::Read) {
return m_handler->fieldCString(name, val, buffLen);
} else {
return {};
}
}
constexpr Error fieldCString(const char *name, char *val, std::size_t buffLen) noexcept {
return m_handler->fieldCString(name, val, buffLen);
}
constexpr Error fieldModelValue(const char *name, CommonPtrWith<ModelValue> auto *v) noexcept {
switch (v->type()) {
case ModelValue::Type::Undefined:
break;
case ModelValue::Type::Bool:
return m_handler->field(name, &v->template get<bool>());
case ModelValue::Type::UnsignedInteger8:
return m_handler->field(name, &v->template get<uint8_t>());
case ModelValue::Type::UnsignedInteger16:
return m_handler->field(name, &v->template get<uint16_t>());
case ModelValue::Type::UnsignedInteger32:
return m_handler->field(name, &v->template get<uint32_t>());
case ModelValue::Type::UnsignedInteger64:
return m_handler->field(name, &v->template get<uint64_t>());
case ModelValue::Type::SignedInteger8:
return m_handler->field(name, &v->template get<int8_t>());
case ModelValue::Type::SignedInteger16:
return m_handler->field(name, &v->template get<int16_t>());
case ModelValue::Type::SignedInteger32:
return m_handler->field(name, &v->template get<int32_t>());
case ModelValue::Type::SignedInteger64:
return m_handler->field(name, &v->template get<int64_t>());
case ModelValue::Type::String:
return m_handler->field(name, &v->template get<String>());
case ModelValue::Type::Object:
return m_handler->field(name, &v->template get<ModelObject>());
case ModelValue::Type::Union:
{
auto &u = v->template get<ModelUnion>();
if constexpr(opType_v == OpType::Read) {
u.setActiveField(m_handler->whichFieldPresent(name, u));
return m_handler->field(name, UnionView<ModelUnion, true>(&u, u.unionIdx()));
} else {
return m_handler->field(name, UnionView<const ModelUnion, true>(&u, u.unionIdx()));
}
}
case ModelValue::Type::Vector:
return m_handler->field(name, &v->template get<ModelValueVector>());
case ModelValue::Type::InlineArray:
return m_handler->field(name, &v->template get<ModelValueArray>());
}
oxErrf("invalid type: {}: {}\n", name, static_cast<int>(v->type()));
oxPanic(ox::Error(1), "invalid type");
return ox::Error(1, "invalid type");
}
// array handler, with callback to allow handling individual elements
template<typename T, typename Callback>
constexpr Error field(const char *name, Callback cb) noexcept {
return m_handler->template field<T, Callback>(name, cb);
}
template<typename T>
constexpr Error field(const char *name, const T *v) noexcept {
if constexpr(ox::is_same_v<T, ModelValue>) {
return fieldModelValue(name, v);
} else {
return m_handler->field(name, v);
}
}
template<typename T>
constexpr Error field(const char *name, T *v) noexcept {
if constexpr(ox::is_same_v<T, ModelValue>) {
return fieldModelValue(name, v);
} else {
return m_handler->field(name, v);
}
}
template<typename U, bool force = false>
constexpr Error field(const char *name, UnionView<U, force> val) noexcept {
return m_handler->field(name, val);
}
constexpr Error field(const char *name, auto *val, std::size_t len) noexcept {
return m_handler->field(name, val, len);
}
/**
* Reads an array length from the current location in the buffer.
* @param pass indicates that the parsing should iterate past the array length
*/
[[nodiscard]]
constexpr auto arrayLength(const char *name, bool pass = true) noexcept {
return m_handler->arrayLength(name, pass);
}
/**
* Reads an string length from the current location in the buffer.
*/
[[nodiscard]]
constexpr auto stringLength(const char *name) noexcept {
return m_handler->stringLength(name);
}
[[nodiscard]]
static constexpr auto opType() noexcept {
return Handler::opType();
}
[[nodiscard]]
constexpr auto handler() noexcept {
return m_handler;
}
};
template<typename Handler, ox::OpType opType_v = Handler::opType()>
class ModelHandlerBase {
private:
ModelHandlerInterface<Handler, opType_v> m_interface;
public:
constexpr ModelHandlerBase() noexcept: m_interface(static_cast<Handler*>(this)) {}
constexpr ModelHandlerBase(const ModelHandlerBase&) noexcept: m_interface(static_cast<Handler*>(this)) {}
constexpr ModelHandlerBase(ModelHandlerBase&&) noexcept: m_interface(static_cast<Handler*>(this)) {}
[[nodiscard]]
constexpr auto interface() noexcept {
return &m_interface;
}
[[nodiscard]]
static constexpr ox::OpType opType() noexcept {
return opType_v;
}
};
constexpr ox::Error resizeVector(auto &vec, size_t sz) {
if constexpr(ox::is_same_v<decltype(vec.resize(0)), ox::Error>) {
return vec.resize(sz);
} else {
vec.resize(sz);
return {};
}
}
}
-109
View File
@@ -1,109 +0,0 @@
/*
* Copyright 2015 - 2024 gary@drinkingtea.net
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#pragma once
#include "assert.hpp"
#include "array.hpp"
#include "def.hpp"
#include "span.hpp"
namespace ox {
class AnyPtr {
private:
struct WrapBase {
virtual constexpr ~WrapBase() = default;
virtual constexpr WrapBase *copyTo(ox::Span<char> s) noexcept = 0;
virtual constexpr operator bool() const noexcept = 0;
};
template<typename T>
struct Wrap: public WrapBase {
T *data{};
constexpr Wrap(T *pData) noexcept: data(pData) {
}
constexpr WrapBase *copyTo(ox::Span<char> s) noexcept override {
oxAssert(s.size() >= sizeof(Wrap), "too small buffer");
if (std::is_constant_evaluated()) {
return new Wrap(data);
} else {
return new(s.data()) Wrap(data);
}
}
constexpr operator bool() const noexcept override {
return data != nullptr;
}
};
WrapBase *m_wrapPtr{};
ox::Array<char, sizeof(Wrap<void*>)> m_wrapData;
public:
constexpr AnyPtr() noexcept = default;
template<typename T>
constexpr AnyPtr(T *ptr) noexcept {
if (std::is_constant_evaluated()) {
m_wrapPtr = new Wrap(ptr);
} else {
m_wrapPtr = new(m_wrapData.data()) Wrap(ptr);
}
}
constexpr AnyPtr(AnyPtr const&other) noexcept {
if (other) {
m_wrapPtr = other.m_wrapPtr->copyTo(m_wrapData);
}
}
constexpr ~AnyPtr() noexcept {
if (std::is_constant_evaluated()) {
ox::safeDelete(m_wrapPtr);
}
}
template<typename T>
constexpr AnyPtr &operator=(T *ptr) noexcept {
if (std::is_constant_evaluated()) {
ox::safeDelete(m_wrapPtr);
m_wrapPtr = new Wrap(ptr);
} else {
m_wrapPtr = new(m_wrapData.data()) Wrap(ptr);
}
return *this;
}
constexpr AnyPtr &operator=(AnyPtr const&ptr) noexcept {
if (this != &ptr) {
if (ptr) {
ox::safeDelete(m_wrapPtr);
m_wrapPtr = ptr.m_wrapPtr->copyTo(m_wrapData);
} else {
m_wrapPtr = nullptr;
}
}
return *this;
}
constexpr operator bool() const noexcept {
return m_wrapPtr && *m_wrapPtr;
}
template<typename T>
[[nodiscard]]
constexpr T *get() const noexcept {
#ifdef OX_BARE_METAL
return static_cast<Wrap<T>*>(m_wrapPtr)->data;
#else
return dynamic_cast<Wrap<T>*>(m_wrapPtr)->data;
#endif
}
};
}
-71
View File
@@ -1,71 +0,0 @@
/*
* Copyright 2015 - 2024 gary@drinkingtea.net
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#include "fmt.hpp"
#include "stacktrace.hpp"
#include "trace.hpp"
#include "assert.hpp"
namespace ox {
void panic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err) noexcept {
oxErrf("\033[31;1;1mPANIC:\033[0m [{}:{}]: {}\n", file, line, panicMsg);
if (err.msg) {
oxErrf("\tError Message:\t{}\n", err.msg);
}
oxErrf("\tError Code:\t{}\n", static_cast<ErrorCode>(err));
if (err.file != nullptr) {
oxErrf("\tError Location:\t{}:{}\n", err.file, err.line);
}
#ifdef OX_USE_STDLIB
printStackTrace(2);
oxTrace("panic").del("") << "Panic: " << panicMsg << " (" << file << ":" << line << ")";
std::abort();
#else
while (1);
#endif
}
void panic(const char *file, int line, const char *panicMsg, const Error &err) noexcept {
panic(StringView{file}, line, StringView{panicMsg}, err);
}
void assertFailFuncRuntime(StringViewCR file, int line, StringViewCR assertTxt, StringViewCR msg) noexcept {
#ifdef OX_USE_STDLIB
auto output = sfmt("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, msg);
output += genStackTrace(2);
oxTracef("assert", "Failed assert: {} ({}) [{}:{}]", msg, assertTxt, file, line);
std::abort();
#else
oxErrf("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, msg);
oxTracef("assert", "Failed assert: {} ({}) [{}:{}]", msg, assertTxt, file, line);
constexprPanic(file, line, msg);
#endif
}
void assertFailFuncRuntime(StringViewCR file, int line, [[maybe_unused]] const Error &err, StringViewCR, StringViewCR assertMsg) noexcept {
#if defined(OX_USE_STDLIB)
auto msg = sfmt("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, assertMsg);
if (err.msg) {
msg += sfmt("\tError Message:\t{}\n", err.msg);
}
msg += sfmt("\tError Code:\t{}\n", static_cast<ErrorCode>(err));
if (err.file != nullptr) {
msg += sfmt("\tError Location:\t{}:{}\n", err.file, err.line);
}
msg += genStackTrace(2);
oxErr(msg);
oxTracef("assert", "Failed assert: {} [{}:{}]", assertMsg, file, line);
std::abort();
#else
constexprPanic(file, line, assertMsg);
#endif
}
}
-76
View File
@@ -1,76 +0,0 @@
/*
* Copyright 2015 - 2024 gary@drinkingtea.net
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#pragma once
#if defined(OX_USE_STDLIB)
#include <iostream>
#endif
#include "def.hpp"
#include "defines.hpp"
#include "error.hpp"
#include "realstd.hpp"
#include "stacktrace.hpp"
#include "trace.hpp"
#include "typetraits.hpp"
namespace ox {
void panic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err = ox::Error(0)) noexcept;
constexpr void constexprPanic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err = ox::Error(0)) noexcept {
if (!std::is_constant_evaluated()) {
panic(file, line, panicMsg, err);
} else {
while (true);
}
}
void assertFailFuncRuntime(StringViewCR file, int line, StringViewCR assertTxt, StringViewCR msg) noexcept;
void assertFailFuncRuntime(StringViewCR file, int line, const Error &err, StringViewCR, StringViewCR assertMsg) noexcept;
constexpr void assertFunc(StringViewCR file, int line, bool pass, [[maybe_unused]]StringViewCR assertTxt, [[maybe_unused]]StringViewCR msg) noexcept {
if (!pass) {
if (!std::is_constant_evaluated()) {
assertFailFuncRuntime(file, line, assertTxt, msg);
} else {
while (true);
}
}
}
constexpr void assertFunc(StringViewCR file, int line, const Error &err, StringViewCR, StringViewCR assertMsg) noexcept {
if (err) {
if (!std::is_constant_evaluated()) {
assertFailFuncRuntime(file, line, err, {}, assertMsg);
} else {
while (true);
}
}
}
constexpr void expect(StringViewCR file, int line, const auto &actual, const auto &expected) noexcept {
if (actual != expected) {
if (!std::is_constant_evaluated()) {
#if defined(OX_USE_STDLIB)
oxErrf("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, "Value incorrect");
oxErrf("expected: {}\nactual: {}\n", detail::toStringView<true>(expected), detail::toStringView<true>(actual));
printStackTrace(2);
oxTracef("assert.expect", "Failed assert: {} == {} [{}:{}]", detail::toStringView<true>(actual), detail::toStringView<true>(expected), file, line);
std::abort();
#else
constexprPanic(file, line, "Comparison failed");
#endif
} else {
while (true);
}
}
}
}
-53
View File
@@ -1,53 +0,0 @@
/*
* Copyright 2015 - 2024 gary@drinkingtea.net
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#pragma once
#include "bit.hpp"
#include "error.hpp"
#include "math.hpp"
#include "types.hpp"
#include "writer.hpp"
namespace ox {
template<Integer_c Integer>
constexpr ox::Error writeItoa(Integer v, ox::Writer_c auto &writer) noexcept {
if (v) {
ox::ResizedInt_t<Integer, 64> mod = 1000000000000000000;
ox::ResizedInt_t<Integer, 64> val = v;
constexpr auto base = 10;
auto it = 0;
if (val < 0) {
OX_RETURN_ERROR(writer.put('-'));
++it;
}
while (mod) {
auto digit = val / mod;
val %= mod;
mod /= base;
if (it || digit) {
ox::ResizedInt_t<Integer, 64> start = '0';
if (digit >= 10) {
start = 'a';
digit -= 10;
}
OX_RETURN_ERROR(writer.put(static_cast<char>(start + digit)));
++it;
}
}
} else {
// 0 is a special case
OX_RETURN_ERROR(writer.put('0'));
}
return {};
}
}
#include "istring.hpp"
-51
View File
@@ -1,51 +0,0 @@
/*
* Copyright 2015 - 2024 gary@drinkingtea.net
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#pragma once
#include "basestringview.hpp"
namespace ox {
/**
* StringLiteral is used for functions that want to ensure that they are taking
* string literals, and not strings outside of the data section of the program
* that might get deleted.
* This type cannot force you to use it correctly, so don't give it something
* that is not a literal.
* If you do this:
* StringLiteral(str.c_str())
* the resulting segfault is on you.
*/
class StringLiteral: public detail::BaseStringView {
public:
constexpr StringLiteral() noexcept = default;
constexpr StringLiteral(StringLiteral const&sv) noexcept = default;
constexpr explicit StringLiteral(std::nullptr_t) noexcept {}
constexpr explicit StringLiteral(const char *str, std::size_t len) noexcept: BaseStringView(str, len) {}
constexpr explicit StringLiteral(char const *str) noexcept: StringLiteral(str, ox::strlen(str)) {}
constexpr StringLiteral &operator=(StringLiteral const&other) noexcept {
if (&other != this) {
set(other.data(), other.len());
}
return *this;
}
[[nodiscard]]
constexpr const char *c_str() const noexcept {
return data();
}
};
}
-52
View File
@@ -1,52 +0,0 @@
/*
* Copyright 2015 - 2024 gary@drinkingtea.net
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#pragma once
#if __has_include(<utility>)
#include <utility>
#include "typetraits.hpp"
#else
#include "typetraits.hpp"
namespace std {
template<typename T>
constexpr ox::remove_reference_t<T> &&move(T &&t) noexcept {
return static_cast<ox::remove_reference_t<T>&&>(t);
}
template<typename T>
constexpr void swap(T &a, T &b) noexcept {
auto temp = std::move(a);
a = std::move(b);
b = std::move(temp);
}
}
#endif
namespace ox {
struct in_place_t {
explicit constexpr in_place_t() = default;
};
inline constexpr ox::in_place_t in_place;
template<class T>
constexpr T &&forward(remove_reference_t<T> &t) noexcept {
return static_cast<T&&>(t);
}
template<class T>
constexpr T &&forward(remove_reference_t<T> &&t) noexcept {
return static_cast<T&&>(t);
}
}
+20
View File
@@ -0,0 +1,20 @@
name: Build
run-name: ${{ gitea.actor }} build and test
on: [push]
jobs:
build:
runs-on: olympic
steps:
- name: Check out repository code
uses: actions/checkout@v3
- run: make purge configure-debug
- run: make build
- run: make test
- run: make purge configure-asan
- run: make build
- run: make test
- run: make purge configure-release
- run: make build
- run: make test
- run: make install
@@ -3,7 +3,10 @@ build/gba
build/*-asan build/*-asan
build/*-debug build/*-debug
build/*-release build/*-release
dist
.current_build
tags tags
compile_commands.json
conanbuildinfo.cmake conanbuildinfo.cmake
conanbuildinfo.txt conanbuildinfo.txt
conaninfo.txt conaninfo.txt
+1 -1
View File
@@ -2,7 +2,7 @@
source: source:
- src - src
copyright_notice: |- copyright_notice: |-
Copyright 2015 - 2024 gary@drinkingtea.net Copyright 2015 - 2025 gary@drinkingtea.net
This Source Code Form is subject to the terms of the Mozilla Public This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this License, v. 2.0. If a copy of the MPL was not distributed with this
+3 -3
View File
@@ -1,10 +1,10 @@
cmake_minimum_required(VERSION 3.19) cmake_minimum_required(VERSION 3.25)
set(CMAKE_POLICY_DEFAULT_CMP0110 NEW) # requires CMake 3.19 set(CMAKE_POLICY_DEFAULT_CMP0110 NEW) # requires CMake 3.19
project(Ox CXX) project(Ox CXX)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules) include(deps/buildcore/base.cmake)
include(address_sanitizer)
if(NOT DEFINED OX_RUN_TESTS) if(NOT DEFINED OX_RUN_TESTS)
set(OX_RUN_TESTS ON) set(OX_RUN_TESTS ON)
View File
+18
View File
@@ -0,0 +1,18 @@
BC_VAR_PROJECT_NAME=ox
BC_VAR_PROJECT_NAME_CAP=Ox
BC_VAR_DEVENV_ROOT=util
BUILDCORE_PATH=deps/buildcore
include ${BUILDCORE_PATH}/base.mk
.PHONY: git-setup-buildcore-remote
git-setup-buildcore-remote:
git remote add -f buildcore-master git@git.drinkingtea.net:drinkingtea/buildcore.git
.PHONY: git-pull-buildcore
git-pull-buildcore:
git fetch buildcore-master master
git subtree pull --prefix deps/buildcore buildcore-master master --squash
.PHONY: git-push-buildcore
git-push-buildcore:
git subtree push --prefix=deps/buildcore buildcore-master master
@@ -93,7 +93,7 @@ purge:
${BC_CMD_RM_RF} compile_commands.json ${BC_CMD_RM_RF} compile_commands.json
.PHONY: test .PHONY: test
test: build test: build
${BC_CMD_ENVRUN} mypy ${BC_VAR_SCRIPTS} ${BC_CMD_ENVRUN} ${BC_CMD_PY3} -m mypy ${BC_VAR_SCRIPTS}
${BC_CMD_CMAKE_BUILD} ${BC_VAR_BUILD_PATH} test ${BC_CMD_CMAKE_BUILD} ${BC_VAR_BUILD_PATH} test
.PHONY: test-verbose .PHONY: test-verbose
test-verbose: build test-verbose: build
@@ -11,6 +11,7 @@
# "Python Busy Box" - adds cross-platform equivalents to Unix commands that # "Python Busy Box" - adds cross-platform equivalents to Unix commands that
# don't translate well to that other operating system # don't translate well to that other operating system
import multiprocessing
import os import os
import platform import platform
import shutil import shutil
@@ -57,7 +58,11 @@ def cmake_build(base_path: str, target: Optional[str]) -> int:
path = os.path.join(base_path, d) path = os.path.join(base_path, d)
if not os.path.isdir(path): if not os.path.isdir(path):
continue continue
args = ['cmake', '--build', path] args = ['cmake', '--build', path, f'-j{multiprocessing.cpu_count()}']
if path.endswith('release'):
args.append('--config=release')
elif path.endswith('debug'):
args.append('--config=debug')
if target is not None: if target is not None:
args.extend(['--target', target]) args.extend(['--target', target])
err = subprocess.run(args).returncode err = subprocess.run(args).returncode
@@ -35,4 +35,6 @@ def get_arch() -> str:
arch = platform.machine().lower() arch = platform.machine().lower()
if arch == 'amd64': if arch == 'amd64':
arch = 'x86_64' arch = 'x86_64'
elif arch == 'aarch64':
arch = 'arm64'
return arch return arch
@@ -12,7 +12,7 @@
# CMake versions greater than the JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION policies will # CMake versions greater than the JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION policies will
# continue to generate policy warnings "CMake Warning (dev)...Policy CMP0XXX is not set:" # continue to generate policy warnings "CMake Warning (dev)...Policy CMP0XXX is not set:"
# #
set(JSONCPP_OLDEST_VALIDATED_POLICIES_VERSION "3.8.0") set(JSONCPP_OLDEST_VALIDATED_POLICIES_VERSION "3.13.2")
set(JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION "3.13.2") set(JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION "3.13.2")
cmake_minimum_required(VERSION ${JSONCPP_OLDEST_VALIDATED_POLICIES_VERSION}) cmake_minimum_required(VERSION ${JSONCPP_OLDEST_VALIDATED_POLICIES_VERSION})
if("${CMAKE_VERSION}" VERSION_LESS "${JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION}") if("${CMAKE_VERSION}" VERSION_LESS "${JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION}")

Some files were not shown because too many files have changed in this diff Show More