-
-
Notifications
You must be signed in to change notification settings - Fork 99
/
Copy pathCHANGELOG
178 lines (169 loc) · 16.8 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
Changelog
- 0.7.1
- Fixed window resizing issues in macOS
- 0.7.0
- NOTE: For macOS, use version 0.7.1 instead, as a bugfix was made there for it.
- NOTE: Due to changes in structure, it is recommended that you perform a full clean build if you used prior versions previously.
- It is also recommended to manually remove all files within `bin/` and `obj/` directories.
- Performed rename pass on all libraries and executables on the project for consistency. Build scripts have been updated to reflect this.
- Kohi-specific libraries now begin with `kohi.<library>`. For example, `kohi.engine`.
- Kohi plugins are now named in the format `kohi.plugin.<plugin_type>.<name>`. Examples are `kohi.plugin.renderer.vulkan` and `kohi.plugin.audio.openal`.
- Tests will be split by library. Ex: `kohi.engine.tests`.
- Tools will have a separate 'namespace' as well `kohi.tools.<name>`. Ex: `kohi.tools.versiongen`.
- Applications will use the application name as the namespace, followed by '.kapp' or '.klib' `<application_name>.[kapp|klib]`. Ex: `testbed.kapp` is the executable and `testbed.klib` is the code library.
- Renamed "simple_scene" to just "scene". Moved it and loader to engine core, removed references from testbed application.
- Added handles to be used in place of raw pointers. Resource systems (i.e. materials, textures, meshes, etc.) need to be converted to use this.
- Created xform and xform system to replace transforms.
- Fixed an issue on Linux (X, specifically) where key repeats were disabled if the application did not shutdown gracefully.
- Fixed an issue where resources were incorrectly reporting memory tags other than MEMORY_TAG_RESOURCE for load/unload. This was causing erroneous reports of some types (notably textures).
- Fixed an issue that was causing text to flash/render incorrectly on some platforms. The underlying issue was usnga single staging buffer instead of a unique one per frame, which resulted in a race
condition of data being used/updated in the staging buffer across frames.
- Fixed an issue where darrays could be initialized to a different type than what was actually being assigned.
- Added custom storage format (kson), complete with tokenizer/parser.
- Converted scenes to use new kson storage format.
- Added flags to scene load, can flag as read-only (vs. editor mode) etc.
- Added "to_string" functions for basic types (int, bool, float, etc.) and vector types (vec2, vec3, etc.).
- Added kreallocate, kreallocate_aligned and kreallocate_report for easier handling of reallocs in user code.
- Added basic timeline system. Will likely be enhanced in the future.
- Project has been restructured.
- Expanded kvar system to also include floats and strings along with ints. Registered new console commands as well.
- Simplified kvar system so that kvar_x_set also creates the variable if it doesn't yet exist, and remove create function. Also added "description" field for an optional description if desired, which will show up when dumping all kvars.
- Fixed string API to no longer require unnecessary strings when converting ints, floats and bools to string.
- Added KDEPRECATED macro to mark functions as deprecated.
- Marked renderer frontend "geometry" functions as deprecated. These will be removed in a future release.
- `math/geometry_utils.h` has now been combined with and renamed to `math/geometry.h`.
- Changed `dest` parameter of `darray_pop()` and `darray_pop_at()` to be optional. If 0/null is provided, the element data is just thrown away.
- Enhanced assertions to actually stop the application when failed.
- Added a new, safer version of `string_format` that allocates the memory needed on the fly. Renamed the previous version to `string_format_unsafe` and marked as deprecated.
- Renamed assets folder to 'testbed.assets' and moved application config to it. This is now the testbed-specific asset folder.
- Shader system 'get' function now attempts to auto-load shader if it does not yet exist. This allows shader 'load'/resource logic to be removed elsewhere.
- Added min and max values to defines for all integer types.
- 0.6.0
- Updated versioning system and build process. Each library now maintains its own version (and potentially changelog at some point).
- New version format is MAJOR.MINOR.PATCH.BUILD-REVISION. This will allow for greater versioning control and patching to minor versions.
- Only 0.6+ will follow this, older versioning will stay as it is.
- Removed a trace warning about early memory allocations.
- Branching strategy is changing.
- Branch names will be based on version using the format "vMAJOR.MINOR.PATCH". Ex: v0.6.0
- Development will continue to happen in feature branches, but those will be branched from version branches.
- When complete, feature branches will merge into version branches.
- Ex: feature/terrain_chunking is branched from v0.6.0. When complete, feature/terrain_chunking is merged into v0.6.0. feature/terrain_chunking is then deleted.
- Version branches will be merged into main as they are completed. A tag is then created on the main branch.
- Release cycles (when they happen) will follow this.
- Changelog will list all changes under a minor version (i.e. 0.6.0) unless a later patch is made.
- If a patch update is made, new notes would appear under that patch version (i.e. 0.6.1, 0.6.2, etc.).
- All libraries (as of now, engine, plugin_audio_openal, standard_ui, testbed_lib and vulkan_renderer) now maintain their own versions.
- NOTE: The engine version is the one used to denote primary releases, this changelog, etc. since plugins, etc. may not have updates between versions.
- The build process now generates a file for each library: <assembly-folder>/src/<assembly-name>_version.h. Ex: engine/src/engine_version.h.
- Each library includes its version file and now reports version to the console during its initialization.
- versiongen utility has been updated to accept a filename parameter instead of major/minor versions. The build process passes "<assembly-folder>/version.txt".
- version.txt is read in its entirety (up to 10 characters) and is used to define the major, minor, and patch. Ex: "0.6.0". This is then prepended to the generated build-revision to complete the format listed above.
- Added terrain chunking support.
- Fixed an issue with darrays that could cause invalid header data in certain scenarios.
- Updated simple scene query functions to take pointers to arrays of geometry render data to account for array resizes if needed.
- Fixed extents generation for terrain chunks, which fixes improper frustum culling issue.
- Fixed a bug where shader scopes weren't being bound properly in the scene pass, causing debug objects to render all over the place.
- The scene is now only queried once for geometry to be used with all shadow map cascades, as opposed to once per cascade.
- Removed "wireframe" shader config property and replaced it with "supports_wireframe". See next entry for details.
- Added the ability to have a wireframe mode, if supported, in a shader. This creates a separate set of pipelines that are used when this
mode is selected.
- Added a RENDERER_MODE_WIREFRAME, which will enable wireframe for certain shaders when swapped to.
- macOS: Note that, in order to support wireframe mode in macOS the newest (at the time) Vulkan SDK
must be used (1.3.275).
- Fixed an issue where ksort would segfault while trying to access a negative array index.
- Added "skirt" geometry to terrain sides in an effort to plug holes in transitions between chunks.
- Vulkan Renderer performance updates (see Vulkan Plugin Changelog).
- To facilitate the above, several areas of logic that previously required a separate command buffer and queue wait have had thier work offloaded
to the beginning of the next frame. This reduces waits and more efficiently batches workload to the GPU.
- The core engine frame lifecycle now has a slightly altered sequence of events. The new cycle is as follows (only changed section is listed):
- After resize detection, renderer_prepare is called, which can cause the renderer to wait for resource regeneration if needed. Otherwise:
- renderer_begin is now called in the main engine loop instead of by the application. This makes the renderer begin its current command buffer.
- systems_manager_renderer_frame_prepare is called. All systems can now have a "frame_prepare" phase, which is optional. Only standard_ui uses this for now. This is to allow updates which need GPU uploads to occur before the rest of the frame workload begins.
- The application instance recieves a call to its prepare_frame.
- In testbed, this calls a new function in simple_scene for prepare_frame, which handles any GPU uploads before the rest of the frame workload begins.
- renderer_end ends the renderer's current command buffer. This is now called from the main engine loop instead of the application.
- renderer_present presents the current drawn-to attachment to the screen. This is now called from the main engine loop instead of the application.
- Added missing "peek" function to stack container.
- Fixed an issue with the sui_label_control where pending data didn't include new vertex/index buffer offsets during an update.
- Created specialized rendergraphs for Forward rendering, one for the Editor (currently lives in TestBed) and one for Standard UI.
- Added job ids, and job dependencies that can be used to link jobs one after another.
- Added semaphores.
- Updated job system to use semaphores to block worker threads until there is work to be done. Semaphores are signaled when work is deployed to a job thread.
- Added threadpool, worker threads and setup layered texture loading to use them.
- 0.5x
- Added Physically-Based Rendering (PBR) material type support.
- Fixed an issue with pulling the default checkerboard texture when already using a default texture (i.e normal, spec, ao, etc.).
- Added in partial descriptor binding support in Vulkan backend to allow for uniform descriptor aliasing.
- Modified material system to handle PBR properties.
- PBR materials are now required on terrains. Phong will not work.
- Added default cubemap, metallic, roughness and AO textures to texture system.
- Added query to texture system to indicate if a given texture is a one of the default textures.
- Adjusted material system to globally track an irradiance cubemap for IBL.
- Renamed clock to kclock to avoid collisions with standard library types.
- Added function pointers to rendergraph_passes to get attachment textures and regenerate textures for self-owned attachments.
- Added shadow maps with optional PCF filtering. A KVAR called "use_pcf" can be toggled 1/0 to turn this on/off.
- Added dynamic shadow frustum generation.
- Implemented generic quick-sort (see ksort.h).
- Added queries to simple scene for getting mesh and terrain geometries using frustums.
- Fixed various math bugs as they relate to frustum generation and use.
- Added per-frame tracking of shadow map draw calls.
- Added cascading shadow maps (right now limited to 4 cascades).
- Fixed a bug in the Vulkan allocator where memory was not properly freed from a call to vulkan_alloc_reallocation if the reported size was 0, as per the spec.
- Moved uniform sampler counts logic to renderer frontend to facilitate queries.
- Removed all traces of defunct UI material type.
- Removed Phong material type, shaders, etc. Entire material pipeline is now PBR.
- Changed the way samplers work on the frontend and backend to allow for arrayed uniforms.
- Shader config now requires specification of sampler type (sampler2D, samplerCube, sampler2DArray, etc.)
- Shader config now allows for arrays of uniform types. Ex: sampler2D[4] specifies an array of 4 sampler2Ds.
- Added array_index argument to shader uniform-setting functions to allow for setting arrayed uniforms. array_index is ignored for non-arrayed uniforms.
- Changed nomenclature of "uniform index" to "uniform location".
- Moved shader file parsing logic to frontend in preparation for #include directive logic.
- Vulkan backend changes to allow not having any global/instance (one or the other) UBO and/or samplers.
- Updated the API around local uniforms to require a bind/set/apply flow similar to the other scopes.
- Refactored Vulkan push constant logic to handle the above.
- Added support for array textures. Converted shadow map pass to use them as attachments.
- Changed PBR and terrain materials to use a "combined" map containing metallic in R, roughness in G and AO in B. Also wrote a conversion utility in tools for this.
- As a result, explicit metallic, roughness and AO maps have been removed.
- Terrains now combine maps from materials into a single array texture. This comes with the requirement that all terrain material maps be of the same size.
- Refactored various Vulkan image loading logic to properly handle layered images.
- Added ability to load layered textures in the texture system by passing a series of texture names and a layer count to a new function.
- Fixed an issue with parsing directory from string where the resulting string was not zero terminated.
- Fixed various obj/mtl loading issues and added conversions for new PBR map types.
- Fixed an issue in the shadow map shader/pass where albedo textures were not being sampled (thus transparent materials weren't being taken into account).
- Added a test tree model resource.
- Point lights are now unaffected by directional shadow maps.
- 0.4x
- Added first pass of Standard UI system, including panel, button, label, and textbox controls.
- Removed ui_text and replaced with sui_label_control as part of the Standard UI system.
- Moved DebugConsole to Standard UI.
- Resolved several DebugConsole bugs, in particular ones involving commands and command history.
- Modified the Windows build process to use incremental linking to speed things up.
- Added cursor to textbox control. Fixed typing, backspace, delete and left/right navigation.
- Added support for stencil buffers/stencil testing.
- Added support for toggling keyboard key repeats on/off.
- Added Standard UI clip masks.
- Fixed various issues around Vulkan dynamic state feature detection.
- Changed Vulkan backend to require dynamic pipeline state either natively (Vulkan 1.3+) or via extension (VK_EXT_extended_dynamic_state). If this plugin is not available, this backend won't work. This is because the engine requires several forms of dynamic state, potentially all at once, which would mean having a pipeline for each state _on top of_ per topology category, which was becoming unweildy.
- Updated readme with build instructions and updated prerequisites.
- Updated VSCode configuration to include new libraries' include paths.
- Various tweaks to debug console to make it look/act nicer.
- 0.3x - Changelog started at this point to track change list. The major changes here are:
- Fixed build process for both debug _and_ release builds, including a few required code changes.
- Release builds now properly make no-ops out of KTRACE and KDEBUG log messages.
- Release builds are now set to use O2 level compiler optimizations.
- Debug builds are now set to use O0 level compiler optimizations explicitly (although -g did this informally already).
- Removed all geometry logic and tracking from the renderer backend and correctly handle this in the frontend.
- Moved geometry vertex and index buffers to the renderer frontend.
- Removed the concept of geometry internal data, since it no longer has graphics API-specific data (and really never did).
- Geometry itself now manages the concept of vertex/index buffer offsets.
- Moved version console output to systems_manager, right after logging is instantiated so it appears at the top of the logs.
- Overhauled the implementation of identifiers to now be a struct which holds a u64, generated by a newly Mersenne Twister random number generator. This new refactoring will also ease the process of (de)serialization.
- Anything using a form of "unique id" should now be using the refactored identifiers.
- Fixed scene unloading by handling this state in application_prepare_frame in testbed_lib.
- Fixed a state checking issue in simple scene updates to trigger an unload and return if an unload has been requested.
- Added device pixel ratio logic for Windows and macOS.
- Added event handler for monitor changing on macOS. This helps capture DPI changes when switching monitors.
- 0.2x - Added audio plugin. Build versioning wasn't fixed yet, though, so this wasn't a readily visible
change in version number. Also recieved a plethora of nondescript bugfixes and performance tweaks.
- 0.1x - Initial versions of the engine including all changes up to ~October 2023. Includes
basic functionality and some basic engine sub-systems.