Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
372 commits
Select commit Hold shift + click to select a range
c738387
add surface API
nichcode Mar 27, 2026
b86cd7a
fix all graphics test
nichcode Mar 27, 2026
838c307
improve queue detection on vulkan
nichcode Mar 27, 2026
f71b38c
add shader binding table API
nichcode Mar 28, 2026
8266c4b
improve barrier commands
nichcode Mar 28, 2026
83f8316
start d3d12 graphics backend
nichcode Mar 29, 2026
531754d
graphics test: d3d12
nichcode Mar 30, 2026
7f58d71
add device API d3d12 and remove device wait function
nichcode Mar 30, 2026
6ee2784
change memory mapping API to per resource (image and buffers
nichcode Mar 31, 2026
edda41b
add sampler anisotropy feature capabilities API
nichcode Mar 31, 2026
e48e4ad
add extended feature query API d3d12
nichcode Mar 31, 2026
990e20c
add command queue API d3d12
nichcode Mar 31, 2026
0498030
add format API d3d12
nichcode Mar 31, 2026
3886cac
improve format sample count query vulkan
nichcode Mar 31, 2026
d386fd6
add image API d3d12
nichcode Apr 1, 2026
ed78afb
add image view API d3d12
nichcode Apr 1, 2026
89bbba9
add sampler API d3d12
nichcode Apr 1, 2026
f5cbd33
add surface API d3d12
nichcode Apr 1, 2026
079150f
add swapchain API d3d12
nichcode Apr 2, 2026
b0f1c82
add shader API d3d12
nichcode Apr 4, 2026
1ed5531
add sempahore API d3d12
nichcode Apr 4, 2026
7cc0bd8
add semaphore API d3d12
nichcode Apr 4, 2026
3a708a2
add command pool and buffer API d3d12
nichcode Apr 4, 2026
e7706e9
add command recording API part 1 d3d12
nichcode Apr 5, 2026
8e0f501
add rendering commands API d3d12
nichcode Apr 5, 2026
ef47375
start compute image copy staging buffer API
nichcode Apr 5, 2026
89375a4
find raytracing test bug
nichcode Apr 6, 2026
e460497
fix all graphics tests vulkan backend(linux)
nichcode Apr 6, 2026
dd82c5f
add copy image command API d3d12
nichcode Apr 7, 2026
4d65b32
add more command buffer recording commands d3d12
nichcode Apr 8, 2026
f1fac2f
remove plain memory barrier function
nichcode Apr 8, 2026
3ce34ea
make indirect dispatch use only CPU UPLOAD memory
nichcode Apr 9, 2026
44c782f
begin d3d12 API redesign
nichcode Apr 13, 2026
e03fdfc
add image aspect and remove image view usages API
nichcode Apr 14, 2026
db34167
finish update descriptor set API
nichcode Apr 14, 2026
81d8f13
finish descriptor API
nichcode Apr 14, 2026
1cf5d91
optimize descriptor API d3d12
nichcode Apr 15, 2026
e14bb81
add push constant command API d3d12
nichcode Apr 16, 2026
cbeb421
remove bind point redundancy d3d12
nichcode Apr 16, 2026
31e8bb3
add acceleration structure API d3d12
nichcode Apr 16, 2026
f9e8a34
add pipeline layout API d3d12
nichcode Apr 16, 2026
0ce562f
optimize graphics debugger
nichcode Apr 19, 2026
031da85
simplify API
nichcode Apr 19, 2026
da55439
add graphics pipeline API d3d12
nichcode Apr 19, 2026
c2ae601
add compute pipeline d3d12
nichcode Apr 19, 2026
17f8954
start ray tracing pipeline API d3d12
nichcode Apr 20, 2026
fdad4ad
finish ray tracing pipeline API d3d12
nichcode Apr 20, 2026
b596365
finish d3d12 graphics backend
nichcode Apr 21, 2026
4e1da97
repack tests into sub directories
nichcode Apr 21, 2026
32effe2
add compute shader bytecode and source spirv
nichcode Apr 22, 2026
b307862
add ray tracing shaders bytecode and source spirv
nichcode Apr 22, 2026
725db57
add triangle shaders bytecode and source spirv
nichcode Apr 23, 2026
5e6890a
add mesh shader bytecode and source spirv
nichcode Apr 23, 2026
4885554
add texture shaders bytecode and source spirv
nichcode Apr 23, 2026
c4d0502
add debug message polling d3d12
nichcode Apr 23, 2026
beef1bc
compute test working on d3d12
nichcode Apr 24, 2026
8d21bc7
add a todo for ray tracing test for d3d12
nichcode Apr 24, 2026
d250da3
clear color test working on d3d12
nichcode Apr 24, 2026
4c6d0a7
triangle test working on d3d12
nichcode Apr 27, 2026
bc18b34
fix submit command buffer bug d3d12
nichcode Apr 28, 2026
11c698c
add a todo for mesh shader test for d3d12
nichcode Apr 28, 2026
da85c74
texture test working on d3d12
nichcode Apr 28, 2026
de14afa
fix staging image write function vulkan
nichcode Apr 28, 2026
23d18ad
compute test: remove shader files dependency and embed shader sources…
nichcode Apr 29, 2026
1e5e849
ray tracing test: remove shader files dependency and embed shader sou…
nichcode Apr 29, 2026
d91c059
triangle test: remove shader files dependency and embed shader source…
nichcode Apr 29, 2026
8790688
mesh test: remove shader files dependency and embed shader sources an…
nichcode Apr 29, 2026
103608b
texture test: remove shader files dependency and embed shader sources…
nichcode Apr 29, 2026
f7ae87a
add mesh shader dxil
nichcode Apr 29, 2026
589d9ac
start shader API limit removal
nichcode Apr 30, 2026
1edabd7
fix graphics tests with new shader API vulkan
nichcode May 1, 2026
a68f2d3
fix graphics tests with new shader API d3d12
nichcode May 1, 2026
4006f76
start descriptor indexing test
nichcode May 2, 2026
0ad8ca7
start API cleanup vulkan
nichcode May 6, 2026
c4b57cf
remove PAL_LIMIT_UNKNOWN sentinel
nichcode May 7, 2026
8de2d9e
remove descriptor API limits vulkan
nichcode May 7, 2026
5fe5fb6
remove descriptor API limits d3d12
nichcode May 7, 2026
7f90fea
start descriptor API refinement
nichcode May 8, 2026
70f58fa
descriptor API refinement vulkan
nichcode May 8, 2026
dd3f94b
compute test with refined descriptor API d3d12 and vulkan
nichcode May 8, 2026
6f25bfe
ray tracing with refined descriptor API d3d12 and vulkan
nichcode May 8, 2026
208ee55
triangle test with refind descriptor API d3d12 and vulkan
nichcode May 8, 2026
34db862
texture test with refined descriptor API d3d12 and vulkan
nichcode May 8, 2026
e1b9741
shader target API refinemenent
nichcode May 8, 2026
944e393
add compute shader files
nichcode May 8, 2026
d3e8cba
add tests shader files
nichcode May 8, 2026
b278a81
add more glsl shaders and simplyfy shader API
nichcode May 9, 2026
d2b0b85
add more flexibility to ray tracing API
nichcode May 9, 2026
51b21d8
add shader binding table payload (local data) API vulkan
nichcode May 10, 2026
ec68e26
remove ray shader binding table upload memory only limitation vulkan
nichcode May 10, 2026
bc92358
remove ray shader binding table upload memory only limitation d3d12
nichcode May 11, 2026
1bfc22d
make ray tracing pipeline more static
nichcode May 11, 2026
180bc07
make ray tracing pipeline more static d3d12
nichcode May 11, 2026
fdc024b
add multiple descriptor set test
nichcode May 13, 2026
dc8c75c
add geometry test
nichcode May 14, 2026
91c9821
fix vlidation warnings
nichcode May 17, 2026
5bbdf18
add indirect draw test
nichcode May 17, 2026
c0b8aa5
add more adapter capabilities
nichcode May 17, 2026
9d3de75
add more adapter capabilities d3d12
nichcode May 18, 2026
f2534da
make d3d12 adapters support dxbc 5.1
nichcode May 18, 2026
057c84b
make cmd disptach indirect feature bit explicit
nichcode May 18, 2026
c2dca91
make API cleaner vulkan
nichcode May 20, 2026
67a2ba3
make API cleaner d3d12
nichcode May 20, 2026
3ff85b6
descriptor indexing test working on vulkan'
nichcode May 20, 2026
7f716be
make multi descriptor test use 3 sets rather than 2
nichcode May 22, 2026
0cbe64c
make multi descriptor test use 3 sets rather than 2 d3d12
nichcode May 22, 2026
0887f65
disallow warp drivers: descriptor indexing test d3d12
nichcode May 22, 2026
0ef257e
add multiple shader entry API
nichcode May 25, 2026
e1c0a2a
use only HLSL shader source for both dxil and spirv
nichcode May 25, 2026
c586cbf
remove test properly fixme from mesh test d3d12
nichcode May 26, 2026
8f5ca97
add more buffer usages
nichcode May 26, 2026
61dfb14
update premake binaries
nichcode May 27, 2026
cc49197
make bitmask base cross compiler
nichcode May 27, 2026
428914b
fix errors and warnings visual studio
nichcode May 29, 2026
712c9ac
start ray tracing test fix d3d12
nichcode May 29, 2026
27ff5a3
remove test properly fixme from ray tracing test d3d12
nichcode Jun 5, 2026
3d1b96d
remove test properly fixme from descriptor indexing test d3d12
nichcode Jun 5, 2026
71dd983
rewrite debug message types d3d12
nichcode Jun 5, 2026
e4581e5
add null descriptors feature
nichcode Jun 4, 2026
f83e7b8
fix ray tracing test bug
nichcode Jun 9, 2026
ac4a66c
add ray query adapter feature bit
nichcode Jun 10, 2026
b03492c
fix highest shader target API bug d3d12
nichcode Jun 11, 2026
94df64c
Stop tracking pal_config.h file
nichcode Jun 11, 2026
8e289b5
begin build system restructure
nichcode Jun 11, 2026
37e95f1
add dynamic tasks.json file generating
nichcode Jun 11, 2026
284996b
add dynamic launch.json file
nichcode Jun 11, 2026
83a967d
updated build system working linux
nichcode Jun 11, 2026
5c0a265
updated build system working windows
nichcode Jun 12, 2026
2dd9903
finalize build system
nichcode Jun 12, 2026
1ab540e
expand core system to multiple files
nichcode Jun 12, 2026
961992a
recheck event system
nichcode Jun 12, 2026
a89b83e
recheck system module
nichcode Jun 12, 2026
edea28c
expand thread system to multiple files
nichcode Jun 12, 2026
c9263ce
bump version to 2.0.0 and fix any ABI issues
nichcode Jun 14, 2026
7f694e7
remove bit macros and base type aliases
nichcode Jun 14, 2026
3f615fc
fold core system includes into pal_core.h
nichcode Jun 14, 2026
93f755e
test re write of core system linux
nichcode Jun 14, 2026
07b42c0
test event system rewrite
nichcode Jun 15, 2026
d44d37a
test core and event system rewrite win32
nichcode Jun 15, 2026
dc32ba9
add abi dump tool for abi inspection
nichcode Jun 15, 2026
6a229e4
add allocator and logger to core abi dump
nichcode Jun 15, 2026
2b2259a
add event system abi dump
nichcode Jun 15, 2026
6a1034f
test thread system rewrite linux
nichcode Jun 15, 2026
92b3f76
add thread system abi dump
nichcode Jun 15, 2026
285c216
test system rewrite linux
nichcode Jun 15, 2026
ad9313e
test thread and system rewrite win32
nichcode Jun 16, 2026
85855bd
expand video to multiple src files win32
nichcode Jun 16, 2026
9dcee53
start linux video src expanding
nichcode Jun 17, 2026
1d40317
test video rewrite win32
nichcode Jun 17, 2026
44547e9
add system abi dump
nichcode Jun 17, 2026
77e87a8
add video abi dump
nichcode Jun 17, 2026
594a923
rewrite opengl API
nichcode Jun 17, 2026
eec2d27
test video rewrite wayland
nichcode Jun 18, 2026
3707eb8
test video rewrite x11
nichcode Jun 18, 2026
72f0a33
remove palSetFBConfig function win32
nichcode Jun 18, 2026
096ffe7
prepare opengl backend helpers
nichcode Jun 18, 2026
cde4f31
remove palSetFBConfig function linux
nichcode Jun 18, 2026
2b6cab1
test opengl rewrite wayland
nichcode Jun 19, 2026
a7690e3
test opengl rewrite x11
nichcode Jun 19, 2026
8942320
test opengl rewrite win32
nichcode Jun 19, 2026
0855707
add verbose flag to pal abi dump tool
nichcode Jun 19, 2026
5e0b8f0
add opengl abi dump
nichcode Jun 19, 2026
be5214f
prepare graphics API rewrite
nichcode Jun 19, 2026
6a59334
finish core changelog
nichcode Jun 20, 2026
c5ce94b
finish event changelog
nichcode Jun 20, 2026
67a031e
update changelog style
nichcode Jun 20, 2026
fbee946
update changelog with new format
nichcode Jun 21, 2026
f0b530d
start graphics system rework
nichcode Jun 21, 2026
c12e0bd
improve API
nichcode Jun 22, 2026
eec4466
add internal incremental graphics vtable
nichcode Jun 23, 2026
6546ca5
start struct inline docs
nichcode Jun 24, 2026
3e48fd1
add more inline struct docs: pal_graphics
nichcode Jun 24, 2026
cc9eb5f
add additional structs inline docs: graphics
nichcode Jun 25, 2026
bf8b7c9
rename PAL_EVENT_** to PAL_EVENT_TYPE_**
nichcode Jun 25, 2026
f74b0c6
finalize API changes
nichcode Jun 26, 2026
4c59a9c
finalize result system
nichcode Jun 28, 2026
02d935a
update core system and tests
nichcode Jun 28, 2026
5957360
make nullptr a code in docs
nichcode Jun 28, 2026
24dfb05
update event system and tests
nichcode Jun 28, 2026
6f0ff03
update system (cpu and platform) and tests
nichcode Jun 28, 2026
2cb958a
update thread system and tests
nichcode Jun 28, 2026
4fef984
update video system and tests
nichcode Jun 28, 2026
10d4d4b
update opengl system and tests
nichcode Jun 29, 2026
eea3581
update systems and tests win32
nichcode Jun 30, 2026
196d196
add graphics backends header
nichcode Jun 30, 2026
583dd2f
change function API: graphics
nichcode Jun 30, 2026
0485234
start vulkan backend rework
nichcode Jun 30, 2026
829b12e
vulkan rework: add pipelines and images
nichcode Jul 2, 2026
49b165d
vulkan rework: add adapter and swapchain
nichcode Jul 2, 2026
8a5f1c0
graphics rework: graphics test working
nichcode Jul 3, 2026
303e33a
graphics rework: fix errors
nichcode Jul 4, 2026
56854c5
graphics rework: compute test working vulkan
nichcode Jul 6, 2026
3770e2e
graphics rework: ray tracing test working
nichcode Jul 6, 2026
6a3ff0e
graphics rework: all tests working vulkan
nichcode Jul 6, 2026
6e374c6
start d3d12 backend rework
nichcode Jul 7, 2026
6730ec0
graphics rework: split d3d12 backend
nichcode Jul 7, 2026
6a954db
graphics rework: add image and pipeline d3d12
nichcode Jul 7, 2026
c67c9dc
graphics rework: add swapchain d3d12
nichcode Jul 7, 2026
492cc32
graphics rework: fix all errors d3d12
nichcode Jul 8, 2026
57cdcd1
graphics rework: graphics test working d3d12
nichcode Jul 8, 2026
b96c695
graphics rework: compute test working d3d12
nichcode Jul 9, 2026
a7de579
graphics rework: make API changes
nichcode Jul 9, 2026
253b5b0
API rework
nichcode Jul 10, 2026
fe1f073
fix system module
nichcode Jul 10, 2026
2b6ab9b
fix test applications
nichcode Jul 10, 2026
4c8b098
fix module source layers
nichcode Jul 10, 2026
2681636
update docs with API changes
nichcode Jul 10, 2026
58e4269
fix core, event, opengl, system and thread modules
nichcode Jul 10, 2026
2e693b5
fix wayland and x11 backends
nichcode Jul 10, 2026
8bd9741
core, event, system, thread and opengl tests working with API changes
nichcode Jul 11, 2026
5d163be
change manual message polling to callback d3d12
nichcode Jul 11, 2026
11e3a2e
start d3d12 backend fix with API changes
nichcode Jul 11, 2026
49f8873
add a linear allocator
nichcode Jul 11, 2026
276785b
add pipeline stages API and fix graphics tests
nichcode Jul 12, 2026
9838af8
all graphics tests working vulkan with API changes
nichcode Jul 12, 2026
f61490d
all graphics tests working d2d12 with API changes
nichcode Jul 13, 2026
21e056e
start graphics abi dump
nichcode Jul 14, 2026
af6b03d
change abi dump tool log format
nichcode Jul 15, 2026
aca2982
add event and thread abi dump
nichcode Jul 15, 2026
fe59b9c
optimize abi-dump and add system abi dump
nichcode Jul 16, 2026
37b7fdf
add video and opengl abi dumps
nichcode Jul 16, 2026
9e1a5a8
add graphics abi dump: adapter
nichcode Jul 17, 2026
0d3192f
add graphics abi dump: device
nichcode Jul 17, 2026
3a4785c
abi dump: all quick flag
nichcode Jul 17, 2026
91817df
add graphics abi dump: swapchain
nichcode Jul 17, 2026
93ceec3
add graphics abi dump: image
nichcode Jul 17, 2026
29914a5
add graphics abi dump: buffer
nichcode Jul 17, 2026
cfe3904
add graphics abi dump: acceleration structure
nichcode Jul 17, 2026
2c8d77b
add graphics abi dump: pipeline
nichcode Jul 17, 2026
3dfda27
add graphics abi dump: descriptor
nichcode Jul 18, 2026
721a716
add graphics abi dump: shader binding table
nichcode Jul 18, 2026
fc4dd53
add graphics abi dump: command pool
nichcode Jul 18, 2026
d2f2beb
add graphics abi dump: debugger
nichcode Jul 18, 2026
2785ab5
add graphics abi dump: commands and remove all flag
nichcode Jul 18, 2026
d181c11
start custom backend test
nichcode Jul 18, 2026
27dd61a
custom backend test: add function pointers
nichcode Jul 18, 2026
2a6fe75
custom backend test working
nichcode Jul 18, 2026
81afa03
prepare for 2.0 release
nichcode Jul 20, 2026
2f4ad33
add a new field to the graphics debugger
nichcode Jul 23, 2026
a8b4b12
update readme
nichcode Jul 23, 2026
d1d1aae
change event payload to uint64
nichcode Jul 24, 2026
807382c
improve event payloads documentation
nichcode Jul 24, 2026
7a4468e
add homepage.md file
nichcode Jul 25, 2026
3a80550
add pull request reference
nichcode Jul 25, 2026
539c97d
fix formatting issues
nichcode Jul 25, 2026
ef8f31d
change since to 2.0.0
nichcode Jul 26, 2026
7989cba
reformat code with improved abi dump tool
nichcode Jul 26, 2026
8cbe699
v2.0.0
nichcode Jul 26, 2026
1d9bdc1
fix clang and msvc warnings and errors
nichcode Jul 26, 2026
c0ede2d
fix clang warnings and errors linux
nichcode Jul 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions .clang-format
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@

BasedOnStyle: LLVM # use LLVM defauls
IndentWidth: 4
ColumnLimit: 80
ColumnLimit: 100
UseTab: Never
UseCRLF: false
LineEnding: LF

# reset if not set
AllowShortFunctionsOnASingleLine: None
Expand Down Expand Up @@ -35,4 +38,4 @@ BraceWrapping:
IndentBraces: false
SplitEmptyFunction: true
SplitEmptyRecord: true
SplitEmptyNamespace: true
SplitEmptyNamespace: true
19 changes: 19 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@

root = true

[*]
charset = utf-8
indent_style = space
indent_size = 4
tab_width = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
max_line_width = 100

[*.{yml, yaml}]
indent_style = space
indent_size = 2

[*md]
trim_trailing_whitespace = false
2 changes: 1 addition & 1 deletion .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,4 @@ Pull request checklist:

- Ensure it compiles on **all** supported platforms.
- Ensure the PR is focused and changes are relevant to the feature or bug fix.
- Ensure your code is formatted with clang-format using the `clang-format` file in the repo.
- Ensure your code is formatted with clang-format using the `clang-format` file in the repo.
2 changes: 1 addition & 1 deletion .github/ISSUE_TEMPLATE/config.yaml
Original file line number Diff line number Diff line change
@@ -1 +1 @@
blank_issues_enabled: false
blank_issues_enabled: false
2 changes: 1 addition & 1 deletion .github/workflows/clang-format.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:

- name: Install clang-format
run: |
sudo apt-get update
sudo apt-get update
wget https://apt.llvm.org/llvm.sh
chmod +x llvm.sh
sudo ./llvm.sh 21
Expand Down
13 changes: 10 additions & 3 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,25 @@
**.vs

# Binaries
**bin
**build
/bin/
/build/

# build reflection
include/pal/pal_config.h

# MakeFiles
Makefile
**.make

# Visual studio files
**.sln
**.slnx
**.filters
**.user
**.vcxproj

# docs
docs/**html
docs/**html

# ppm files
**.ppm
277 changes: 211 additions & 66 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,74 +1,134 @@
# CHANGELOG

## [1.0.0] - 2025-09-27
- Initial stable release of PAL.

## [1.0.1] - 2025-10-01

**Bugfix release** - improve C/C++ interop and build integration
<!-- ===========================================================-->
<!-- PAL V2.0.0 -->
<!-- =========================================================== -->

### Fixed
- Added extern "C" guards to all exported functions so PAL can now be linked from both **C** and **C++** projects.
- Fixed a **condition variable** bug where the wrong thread could acquire the mutex first, causing intermittent locking issues. See **tests/condvar_test.c**
- Updated premake scripts to allow **PAL to be included as a submodule or directly in another workspace** if the build system is **premake**.

### Notes
- No API or ABI changes
- Safe upgrade from **v1.0** - just rebuild your project after updating.

## [1.1.0] - 2025-10-17
## 2.0.0

### Features
- **Build:** Added Linux platform support across all modules.
- **Core:** Added Linux backend support.
- **Video:** Added X11-based backend support.
- **Thread:** Added Linux backend support.
- **Opengl:** Added Linux backend support.
- **System:** Added Linux backend support.
- **Video:** Added **palCreateCursorFrom()** to create system cursors.
- **Video:** Added **palSetFBConfig()** to select window FBConfig.
- **Video:** Added **PAL_VIDEO_FEATURE_WINDOW_SET_ICON** to `PalVideoFeatures` enum.
- **System:** Added **PAL_PLATFORM_API_COCOA** to `PalPlatformApiType` enum.
- **System:** Added **PAL_PLATFORM_API_ANDRIOD** to `PalPlatformApiType` enum.
- **System:** Added **PAL_PLATFORM_API_UIKIT** to `PalPlatformApiType` enum.
- **System:** Added **PAL_PLATFORM_API_HEADLESS** to `PalPlatformApiType` enum.
- **Core:** Added **PAL_RESULT_INVALID_FBCONFIG_BACKEND** to `PalResult` enum.

### Changed
- **System:** `PalCPUInfo.architecture` is now determined at runtime instead of build time.
- **Opengl:** **palEnumerateGLFBConfigs()** now does not use the `glWindow` paramter. Set to `nullptr`
- Added a graphics system API (`pal2/pal_graphics.h`). (#4)
- Added `palGetResultCode()` to get the result code from a result value. (#4)
- Added `palGetResultSource()` to get the result source from a result value. (#4)
- Added `palGetResultNativeCode()` to get the result native code from a result value. (#4)
- Added `palGetSupportedGLAPIs()` to check supported opengl api types. (#4)
- Added type `PalResultCode` with values: (#4)
- `PAL_RESULT_CODE_INVALID_ARGUMENT`
- `PAL_RESULT_CODE_OUT_OF_MEMORY`
- `PAL_RESULT_CODE_PLATFORM_FAILURE`
- `PAL_RESULT_CODE_TIMEOUT`
- `PAL_RESULT_CODE_INVALID_HANDLE`
- `PAL_RESULT_CODE_FEATURE_NOT_SUPPORTED`
- `PAL_RESULT_CODE_INVALID_OPERATION`
- `PAL_RESULT_CODE_DEVICE_LOST`
- `PAL_RESULT_CODE_OUT_OF_DATE`
- Added type `PalResultSource` with values: (#4)
- `PAL_RESULT_SOURCE_NONE`
- `PAL_RESULT_SOURCE_WIN32`
- `PAL_RESULT_SOURCE_POSIX`
- `PAL_RESULT_SOURCE_EGL`
- `PAL_RESULT_SOURCE_VULKAN`
- `PAL_RESULT_SOURCE_D3D12`
- `PAL_RESULT_SOURCE_METAL`
- Added type `PalGLBackend` with values: (#4)
- `PAL_GL_BACKEND_EGL`
- `PAL_GL_BACKEND_GLX`
- `PAL_GL_BACKEND_WGL`
- Added type `PalGLAPI` with values: (#4)
- `PAL_GL_API_OPENGL`
- `PAL_GL_API_OPENGL_ES`
- Added `_COUNT` constants to all type groups (eg. `PAL_EVENT_TYPE_COUNT`). (#4)
- Added `PAL_GL_GRAPHICS_CARD_NAME_SIZE`,`PAL_GL_VENDOR_NAME_SIZE` and `PAL_GL_VERSION_NAME_SIZE` constants. (#4)

### Fixed
- Fixed a bug where **enter modal mode and exit modal mode** operations triggered only one event.
- Fixed repeated window state event (**minimized**, **maximized**, **restore**).
### Changes

### Notes
- No API or ABI changes - existing Windows code remains compatible.
- Linux video support currently targets **X11** only: **Wayland** is planned for future releases.
- Safe upgrade from **v1.0.1** - just rebuild your project after updating.
- Moved all public header files to `pal2` directory (eg. `pal2/pal_video.h`). (#4)
- `palGetVersion()` now returns `void` and takes a pointer to the struct. (#4)
- `palFormatResult()` now takes two additional parameters (#4)
- Converted all enum types to fixed-width integer types and their values to standalone constants (eg. `PalResult` to `uint64_t`). (#4)
- Removed all previous `PalResult` values except: `PAL_RESULT_SUCCESS` (#4)
- Removed `palGLSetInstance()` function. (#4)
- Removed `palGLGetBackend()` function. (#4)
- Removed `palGetVideoFeaturesEx()` function and `PalVideoFeatures64` enum. (#4)
- Removed `palGetWindowHandleInfoEx()` function and `PalWindowHandleInfoEX` struct. (#4)
- Removed `palGetRawMouseWheelDelta()` function. (#4)
- Removed `palSetPreferredInstance()` function. (#4)
- Removed `palSetFBConfig()` function. (#4)
- Removed `PAL_FBCONFIG_BACKEND_GLES`. (#4)
- `palInitGL()` now takes two additional parameters. (#4)
- `palEnumerateGLFBConfigs()` no longer takes the `glWindow` and `count` now as `uint32_t` (#4)
- `palInitVideo()` now takes an additional parameter. (#4)
- `palGetWindowHandleInfo()` now returns `PalResult` and takes a pointer to the struct. (#4)
- `PalGLInfo` now has `backend` and `api` fields. (#4)
- Renamed `nativeDisplay` to `nativeInstance` in `PalWindowHandleInfo`. (#4)
- Renamed `display` to `instance` in `PalGLWindow`. (#4)
- `PalWindowHandleInfo` now has `nativeHandle1`, `nativeHandle2` and `nativeHandle3` fields. (#4)
- `PalWindowCreateInfo` now has `state`, `appName`, `instanceName`, `fbConfigBackend` and `fbConfigIndex` fields. (#4)
- Removed `maximized` and `minimized` in `PalWindowCreateInfo`. (#4)
- Removed `UintXX` and `IntXX` types in favor of standard `uintXX_t` and `intXX_t`. (#4)
- Removed `_MAX` constants from all type groups (eg. `PAL_EVENT_MAX`). (#4)
- Replaced standard `bool` type and `true`/`false` constants with `PalBool` type and `PAL_TRUE`/`PAL_FALSE`. (#4)
- Renamed `PalGLRelease` to `PalGLReleaseBehavior`. (#4)
- Renamed `palGLGetProcAddress()` to `palGetGLProcAddress()`. (#4)
- Renamed event type constants from `PAL_EVENT_**` to `PAL_EVENT_TYPE_**`. (#4)
- Renamed dispatch mode constants from `PAL_DISPATCH_**` to `PAL_DISPATCH_MODE_**`. (#4)
- Renamed platform type constants from `PAL_PLATFORM_**` to `PAL_PLATFORM_TYPE_**`. (#4)
- Renamed platform api type constants from `PAL_PLATFORM_API_**` to `PAL_PLATFORM_API_TYPE_**`. (#4)
- Renamed cursor type constants from `PAL_CURSOR_**` to `PAL_CURSOR_TYPE_**`. (#4)
- Renamed flash flag constants from `PAL_FLASH_**` to `PAL_FLASH_FLAG_**`. (#4)
- Renamed fbConfig backend type constants from `PAL_FBCONFIG_BACKEND_**` to `PAL_FBCONFIG_BACKEND_**`. (#4)
- Renamed `PalFlashFlag` to `PalFlashFlags`. (#4)
- `palGetMouseDelta()` now takes `dx` and `dy` paramters as `float`. (#4)
- `palEnumerateMonitors()` now takes `count` paramter as `uint32_t`. (#4)
- `palEnumerateMonitorModes()` now takes `count` paramter as `uint32_t`. (#4)
- `palGetClosestGLFBConfig()` now takes `count` paramter as `uint32_t`. (#4)
- `palGetMouseWheelDelta()` now takes `dx` and `dy` paramters as `float`. (#4)
- `palJoinThread()` now takes `retval` paramters as `void**`. (#4)
- `palUnpackUint32()` now takes `data` paramters as `uint64_t`. (#4)
- `palUnpackInt32()` now takes `data` paramters as `uint64_t`. (#4)
- `palUnpackPointer()` now takes `data` paramters as `uint64_t`. (#4)
- `palUnpackFloat()` now takes `data` paramters as `uint64_t`. (#4)
- `palPackUint32()` now returns `uint64_t` instead of `int64_t`. (#4)
- `palPackInt32()` now returns `uint64_t` instead of `int64_t`. (#4)
- `palPackPointer()` now returns `uint64_t` instead of `int64_t`. (#4)
- `palPackFloat()` now returns `uint64_t` instead of `int64_t`. (#4)
- These function now returns `void` instead of `PalResult` and does not do runtime validation anymore: (#4)
- `palGetPlatformInfo()`
- `palGetCPUInfo()`
- `palGetThreadName()`
- `palGetPrimaryMonitor()`
- `palGetMonitorInfo()`
- `palEnumerateMonitorModes()`
- `palGetCurrentMonitorMode()`
- `palMinimizeWindow()`
- `palMaximizeWindow()`
- `palRestoreWindow()`
- `palShowWindow()`
- `palHideWindow()`
- `palGetWindowStyle()`
- `palGetWindowMonitor()`
- `palGetWindowTitle()`
- `palGetWindowPos()`
- `palGetWindowSize()`
- `palGetWindowState()`
- `palGetWindowHandleInfo()`
- `palSetWindowStyle()`
- `palSetWindowTitle()`
- `palSetWindowPos()`
- `palSetWindowSize()`
- `palSetFocusWindow()`
- `palSetWindowIcon()`
- `palClipCursor()`
- `palGetCursorPos()`
- `palSetCursorPos()`
- `palSetWindowCursor()`
- `palSetWindowOpacity()`
- `palFlashWindow()`
- `palSetSwapInterval()`

## [1.2.0] - 2025-10-22

### Features
- **Video:** Added **palGetInstance()** to retrieve the native display or instance handle.
- **Video:** Added **palAttachWindow()** for attaching **foreign windows** to PAL.
- **Video:** Added **palDetachWindow()** for detaching **foreign windows** from PAL.
- **Event:** Added **PAL_EVENT_KEYCHAR** to `PalEventType` enum.
- **Event:** Added documentation for event bits(payload) layout.

### Naming Update
- PAL now stands for **Prime Abstraction Layer**,
reflecting its role as the primary explicit foundation for OS and graphics abstraction.
- All API remains unchanged — this is an identity update only.

### Tests
- Added multi-threaded OpenGL example: demonstrating **Multi-Threaded OpenGL Rendering**. see **multi_thread_opengl_test.c**.
- Added attaching and detach foreign windows example. see **attach_window_test.c**
- Added key character example. see **char_event_test.c**

### Notes
- No API or ABI changes - existing code remains compatible.
- Safe upgrade from **v1.1.0** - just rebuild your project after updating.
<!-- =========================================================== -->
<!-- PAL V1.3.0 -->
<!-- =========================================================== -->

## [1.3.0] - 2025-11-21

Expand All @@ -77,11 +137,11 @@ reflecting its role as the primary explicit foundation for OS and graphics abstr
- **Video:** Added **palGetVideoFeaturesEx()** to check old and extended supported features.
- **Video:** Added **palGetWindowHandleInfoEx()** to get extended window handles.
- **Video:** Added **palGetRawMouseWheelDelta()** to get raw mouse wheel delta.
- **Video:** Added **PAL_CONFIG_BACKEND_GLES** to `PalFBConfigBackend` enum.
- **Video:** Added **PAL_FBCONFIG_BACKEND_GLES** to `PalFBConfigBackend` enum.
- **Video:** Added **palSetPreferredInstance()** to set the native instance or display PAL video should use rather than creating a new one.

- **Core:** Added **palPackFloat()** to combine two floats into a single Int64 integer.
- **Core:** Added **palUnpackFloat()** to retreive two floats from a single Int64 integer.
- **Core:** Added **palPackFloat()** to combine two floats into a single int64_t integer.
- **Core:** Added **palUnpackFloat()** to retreive two floats from a single int64_t integer.

- **OpenGL:** Added **palGLSetInstance()** to set the native instance or display PAL opengl should use. This must be set before calling **palInitGL()**.
- **OpenGL:** Added **palGLGetBackend()** to get the opengl backend.
Expand Down Expand Up @@ -121,3 +181,88 @@ void* retval;
palJoinThread(thread, &retval);
```

<!-- =========================================================== -->
<!-- PAL V1.2.0 -->
<!-- =========================================================== -->

## [1.2.0] - 2025-10-22

### Features
- **Video:** Added **palGetInstance()** to retrieve the native display or instance handle.
- **Video:** Added **palAttachWindow()** for attaching **foreign windows** to PAL.
- **Video:** Added **palDetachWindow()** for detaching **foreign windows** from PAL.
- **Event:** Added **PAL_EVENT_KEYCHAR** to `PalEventType` enum.
- **Event:** Added documentation for event bits(payload) layout.

### Naming Update
- PAL now stands for **Prime Abstraction Layer**,
reflecting its role as the primary explicit foundation for OS and graphics abstraction.
- All API remains unchanged — this is an identity update only.

### Tests
- Added multi-threaded OpenGL example: demonstrating **Multi-Threaded OpenGL Rendering**. see **multi_thread_opengl_test.c**.
- Added attaching and detach foreign windows example. see **attach_window_test.c**
- Added key character example. see **char_event_test.c**

### Notes
- No API or ABI changes - existing code remains compatible.
- Safe upgrade from **v1.1.0** - just rebuild your project after updating.

<!-- =========================================================== -->
<!-- PAL V1.1.0 -->
<!-- =========================================================== -->

## [1.1.0] - 2025-10-17

### Features
- **Build:** Added Linux platform support across all modules.
- **Core:** Added Linux backend support.
- **Video:** Added X11-based backend support.
- **Thread:** Added Linux backend support.
- **Opengl:** Added Linux backend support.
- **System:** Added Linux backend support.
- **Video:** Added **palCreateCursorFrom()** to create system cursors.
- **Video:** Added **palSetFBConfig()** to select window FBConfig.
- **Video:** Added **PAL_VIDEO_FEATURE_WINDOW_SET_ICON** to `PalVideoFeatures` enum.
- **System:** Added **PAL_PLATFORM_API_COCOA** to `PalPlatformApiType` enum.
- **System:** Added **PAL_PLATFORM_API_ANDRIOD** to `PalPlatformApiType` enum.
- **System:** Added **PAL_PLATFORM_API_UIKIT** to `PalPlatformApiType` enum.
- **System:** Added **PAL_PLATFORM_API_HEADLESS** to `PalPlatformApiType` enum.
- **Core:** Added **PAL_RESULT_INVALID_FBCONFIG_BACKEND** to `PalResult` enum.

### Changed
- **System:** `PalCPUInfo.architecture` is now determined at runtime instead of build time.
- **Opengl:** **palEnumerateGLFBConfigs()** now does not use the `glWindow` paramter. Set to `nullptr`

### Fixed
- Fixed a bug where **enter modal mode and exit modal mode** operations triggered only one event.
- Fixed repeated window state event (**minimized**, **maximized**, **restore**).

### Notes
- No API or ABI changes - existing Windows code remains compatible.
- Linux video support currently targets **X11** only: **Wayland** is planned for future releases.
- Safe upgrade from **v1.0.1** - just rebuild your project after updating.

<!-- =========================================================== -->
<!-- PAL V1.0.1 -->
<!-- =========================================================== -->

## [1.0.1] - 2025-10-01

**Bugfix release** - improve C/C++ interop and build integration

### Fixed
- Added extern "C" guards to all exported functions so PAL can now be linked from both **C** and **C++** projects.
- Fixed a **condition variable** bug where the wrong thread could acquire the mutex first, causing intermittent locking issues. See **tests/condvar_test.c**
- Updated premake scripts to allow **PAL to be included as a submodule or directly in another workspace** if the build system is **premake**.

### Notes
- No API or ABI changes
- Safe upgrade from **v1.0** - just rebuild your project after updating.

<!-- =========================================================== -->
<!-- PAL V1.0.0 -->
<!-- =========================================================== -->

## [1.0.0] - 2025-09-27
- Initial stable release of PAL.
Loading
Loading