Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
45 commits
Select commit Hold shift + click to select a range
4e3af22
Revert TotalTimeElapsed usage in extension example
iCiaran Mar 22, 2026
13989a5
239-remove-complier-clang-warning-for-macos-xcode
Johnnyg63 Mar 24, 2026
cb2cef1
Added blending at pixel level - alphas could be mixed up but we'll see
OneLoneCoder Apr 4, 2026
4bebdc2
Merge pull request #245 from OneLoneCoder/241-add-blending-mode-support
OneLoneCoder Apr 4, 2026
41ba6c6
Merge pull request #240 from OneLoneCoder/239-remove-complier-clang-w…
OneLoneCoder Apr 4, 2026
760bb5c
Merge pull request #237 from OneLoneCoder/fix-extension-example
OneLoneCoder Apr 4, 2026
ba58c5a
247-some-macos-users-are-finding-the-display-doesnt-fill-the-screen
Johnnyg63 Apr 4, 2026
bd80aa3
[opengl33] fix opengl bindings for egl on wayland backend
Moros1138 Apr 7, 2026
19bbbae
Always use libdecor for wayland decorations
dandistine Apr 10, 2026
bff67b4
Remove the remaining xdg toplevel things
dandistine Apr 10, 2026
b5c2c64
Hopefully fix a rare crash when resizing
dandistine Apr 11, 2026
d3c27f2
Merge pull request #248 from OneLoneCoder/247-some-macos-users-are-fi…
OneLoneCoder May 31, 2026
fddfa77
Merge pull request #250 from OneLoneCoder/fix-egl-opengl-bindings
OneLoneCoder May 31, 2026
54eb064
Merge pull request #251 from dandistine/just-use-libdecor
OneLoneCoder May 31, 2026
c33e87a
circles decrappified both fills and outlines. Abandoning wireframe mo…
OneLoneCoder May 31, 2026
2ec7dd9
Merge pull request #266 from OneLoneCoder/crappy-circles-1
OneLoneCoder May 31, 2026
094c923
changed 2D wireframes over to line asssemblies
OneLoneCoder May 31, 2026
ab678c8
Merge pull request #268 from OneLoneCoder/265-wholesale-removal-of-wi…
OneLoneCoder May 31, 2026
7633469
Moved to "Pointer API" to capture touch and pens. Its crude right now…
OneLoneCoder Jun 8, 2026
f35d4dc
Added "Touch" example
OneLoneCoder Jun 9, 2026
6a1dad6
Merge pull request #271 from OneLoneCoder/touch-input
OneLoneCoder Jun 9, 2026
04ad9ac
as title
OneLoneCoder Jun 12, 2026
1d58e75
Merge pull request #272 from OneLoneCoder/little-touch-scaling-fix
OneLoneCoder Jun 12, 2026
d8f5096
Implement touch
dandistine Jun 14, 2026
5dcdd1d
Updated xCode project file to support hw_touch
Johnnyg63 Jun 19, 2026
e2fc6ca
274-implement-stylus-touch-and-touch-for-macos
Johnnyg63 Jun 19, 2026
852d789
fixed regular alpha blending for polygon draws, need to test images
OneLoneCoder Jul 1, 2026
f5e2903
imagery seems fine now, but need more testing
OneLoneCoder Jul 1, 2026
84149ca
little bodge to camera class
OneLoneCoder Jul 1, 2026
c5dfbb5
Merge pull request #276 from OneLoneCoder/alpha-blend-analyse
OneLoneCoder Jul 1, 2026
b79ee31
Completed TrackPad integration for touch point PR can now be merged
Johnnyg63 Jul 2, 2026
f603e15
Fix crash if no touch device.
dandistine Jul 3, 2026
40a5c84
Guess we're doing x11 here too.
dandistine Jul 3, 2026
f5cfa0a
Touch for emscripten too I guess.
dandistine Jul 3, 2026
419b992
Implmement stylus/eraser and finger touch events (multitouch) for And…
DCubix Jul 7, 2026
f5b9152
Merge pull request #273 from dandistine/wayland_touch
OneLoneCoder Jul 9, 2026
2a94812
Merge pull request #275 from OneLoneCoder/274-implement-stylus-touch-…
OneLoneCoder Jul 9, 2026
528c67e
Merge pull request #278 from OneLoneCoder/277-implement-stylus-finger…
OneLoneCoder Jul 9, 2026
3c6abf3
Explored private method and friendship, but lack of friendship inheri…
OneLoneCoder Jul 9, 2026
904f724
Merge pull request #279 from OneLoneCoder/reduce-image-confusion
OneLoneCoder Jul 9, 2026
2833892
Cosmetic fix, but good enough
OneLoneCoder Aug 23, 2026
6b7642a
Merge pull request #283 from OneLoneCoder/270-single-black-line
OneLoneCoder Aug 23, 2026
383c752
getting things ready for going public
OneLoneCoder Aug 23, 2026
adf2d90
synced header
OneLoneCoder Aug 23, 2026
2e862ac
Merge pull request #285 from OneLoneCoder/GoingPublicPrep1
OneLoneCoder Aug 23, 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
31 changes: 31 additions & 0 deletions LICENCE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# License (OLC-3)

Copyright 2018-2026 OneLoneCoder.com

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1. Redistributions or derivations of source code must retain the above
copyright notice, this list of conditions and the following disclaimer.

2. Redistributions or derivative works in binary form must reproduce
the above copyright notice. This list of conditions and the following
disclaimer must be reproduced in the documentation and/or other
materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
109 changes: 109 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,113 @@
<p align="center">
<a href="https://discord.gg/WhwHUMV"> <img src="https://img.shields.io/discord/380484403458998276?logo=discord"> </a>
</p>

# Pre-Launch BETA Testing
`olcPixelGameEngine v3.00 Beta B` is currently in a Beta testing phase, and has been made available to those that may want to experiment during olc::CodeJam2026. As such, this repo does not represent the final form of olcPixelGameEngine3, and presumably feedback from the Jam may change a few things prior to the official launch later this year.

# olcPixelGameEngine 3 (olcPGE3)
This is the official distribution of olcPixelGameEngine3, the successor to the popular [olcPixelGameEngine2](https://github.com/OneLoneCoder/olcPixelGameEngine/tree/master).

Purposes
* Game Development
* Tool Development
* Visualisation
* Real-Time Interactive Applications
* Rapid Idea Prototyping
* Kiosks and Browsers
* Cross Platform Development
* Cohesive User Experience
* Algorithm Study
* Classroom Exercises
* Having Fun!

Easy To Use
* Single Header File (as always)
* CMAKE optional but provided
* Entire project source for the curious

Capabilities
* 2D Rendering
* 3D Rendering
* Batch Rendering
* Custom GPU Shaders
* Vector / Matrix Types
* Polygon Construction
* 2D Animation Package
* 2D Camera Control
* 2D Geometry Analysis & Interrogation
* 2D Quad-Tree Data Structure
* Flexible Game Creation

Tested On Platforms
* Windows
* Linux X11/Wayland
* MacOS
* Emscripten
* Android

Input Features
* Regional Keyboard
* Mouse
* Touch
* Stylus / Pen

Extendable
* Window Hooks
* System Hooks


# Err.. I have questions!
* Is it compatible with olcPGE2? I've done loads of stuff in that.
* No. PGE3 has built upon the years of development and community contributions and has outgrown the interfaces that olcPGE2 provided. They are however very similar, so if you have familiarity with PGE2, you should easily get going with PGE3.
* Are there ports to Rust, C# or Java?
* No. Over the past years PGE2 was ported to other environments only by fantatsic community contributors. The official release of PGE3 targets C++20.
* Have you used AI to make this?
* No. Well, not knowingly or intentionally. This project has been developed for fun by enthusiasts who enjoy coding as a rewarding challenge. That said, no guarantees can be made that an IDE hasn't presented a useful auto-complete, or a contributer has used AI in pursuit of understanding a bug. The philosophy of OneLoneCoder is coding for fun, not prompt engineering.
* Can I use olcPixelGameEngine3 commercially?
* Yes. The licence below simply requires that your end users know they are using a product that uses OneLoneCoder's olcPixelGameEngine.
* Can I contribute?
* Yes. A primary goal of PGE3 was to be more open as a project. However, anonymous and/or AI created PRs will be ignored until you have introduced yourself and your ideas to the development team on our Discord server.


# Licence (OLC-3)
Copyright 2018 - 2026 OneLoneCoder.com

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:

1. Redistributions or derivations of source code must retain the above
copyright notice, this list of conditions and the following disclaimer.

2. Redistributions or derivative works in binary form must reproduce
the above copyright notice. This list of conditions and the following
disclaimer must be reproduced in the documentation and/or other
materials provided with the distribution.

3. Neither the name of the copyright holder nor the names of its
contributors may be used to endorse or promote products derived
from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

# Examples
As part of the development and testing process we have many examples that illustrate individual features. You can find interactive examples hosted here.

# Building

By far the easiest way to use olcPixelGameEngine3 is to simply include the header file provided in the root of this repository - `olcPixelGameEngine3.h`. As much as possible it will self configure for your chosen environment. On Microsoft platforms, using Visual Studio is our recommended way forward. For all other platforms, a CMake instruction is available.

## CMake

Configure with:
Expand Down Expand Up @@ -46,6 +154,7 @@ emcc olcPGE3_ImageQuads.cpp -o olcPGE3_ImageQuads.html -sASYNCIFY -sALLOW_MEMORY
```

# Using STB Image
Image loading is complex. For all the supported platforms we have ensured that as a minimum you can load a ".png" file as an asset. For a wider variety of formats its much better to use existing libraries, and we have decided to support "stb_image.h" which is pretty much the go-to image loader in C++. olcPGE3 can be instructed to use "stb_image" by declaring `OLC_USE_STB_IMAGE=1` before including the header file, or better yet, as a compiler predefined directive.

## Get the headers
Aquire [stb_image.h](https://github.com/nothings/stb/blob/master/stb_image.h) and [stb_image_write.h](https://github.com/nothings/stb/blob/master/stb_image_write.h). Place them in the root directory of the repo.
Expand Down
9 changes: 9 additions & 0 deletions dev/msvc/olcPGE3.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@
<ClInclude Include="..\..\utilities\olcUTIL3_Camera2D.h" />
<ClInclude Include="..\..\utilities\olcUTIL3_GameMode.h" />
<ClInclude Include="..\..\utilities\olcUTIL3_Geometry2D.h" />
<ClInclude Include="..\..\utilities\olcUTIL3_QuadTree.h" />
<ClInclude Include="..\src\api_macos.h">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
Expand Down Expand Up @@ -316,6 +317,7 @@
<ClCompile Include="..\src\host_win_winapi.cpp" />
<ClCompile Include="..\src\hw_keyboard.cpp" />
<ClCompile Include="..\src\hw_mouse.cpp" />
<ClCompile Include="..\src\hw_touch.cpp" />
<ClCompile Include="..\src\image.cpp" />
<ClCompile Include="..\src\imload_android.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
Expand Down Expand Up @@ -350,6 +352,13 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Text Include="..\..\CMakeLists.txt" />
</ItemGroup>
<ItemGroup>
<None Include="..\..\LICENCE.md" />
<None Include="..\..\README.md" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
Expand Down
22 changes: 22 additions & 0 deletions dev/msvc/olcPGE3.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,9 @@
<Filter Include="Hardware">
<UniqueIdentifier>{b5b02d3b-7b70-4ef1-a2e2-516cbaa9da51}</UniqueIdentifier>
</Filter>
<Filter Include="Extras">
<UniqueIdentifier>{76f094ac-5176-4402-9395-6187374c5d64}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\src\pixel.h">
Expand Down Expand Up @@ -174,6 +177,9 @@
<ClInclude Include="..\src\extension.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\utilities\olcUTIL3_QuadTree.h">
<Filter>Utilities</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\src\core.cpp">
Expand Down Expand Up @@ -248,5 +254,21 @@
<ClCompile Include="..\src\draw_batch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\src\hw_touch.cpp">
<Filter>Hardware</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\..\README.md">
<Filter>Extras</Filter>
</None>
<None Include="..\..\LICENCE.md">
<Filter>Extras</Filter>
</None>
</ItemGroup>
<ItemGroup>
<Text Include="..\..\CMakeLists.txt">
<Filter>Extras</Filter>
</Text>
</ItemGroup>
</Project>
16 changes: 12 additions & 4 deletions dev/msvc/olcPGE3_BuildSH/olcPGE3_BuildSH.vcxproj
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@
<ClCompile Include="..\..\..\examples\olcPGE3_3DCube.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\examples\olcPGE3_AntiAliasing.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
Expand All @@ -43,11 +43,15 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\examples\olcPGE3_BlendingModes.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\examples\olcPGE3_CirclesEllipses.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\examples\olcPGE3_Extensions.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
Expand Down Expand Up @@ -163,6 +167,10 @@
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\examples\olcPGE3_Touch.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
</ClCompile>
<ClCompile Include="..\..\..\examples\olcPGE3_WorldTransform.cpp">
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
Expand Down
6 changes: 6 additions & 0 deletions dev/msvc/olcPGE3_BuildSH/olcPGE3_BuildSH.vcxproj.filters
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,12 @@
<ClCompile Include="..\..\..\examples\olcPGE3_LocalTransforms.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\examples\olcPGE3_BlendingModes.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\examples\olcPGE3_Touch.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<Image Include="..\..\..\examples\assets\minsanity_texture.png">
Expand Down
Loading
Loading