Releases: processing-cpp/processing.cpp
Releases · processing-cpp/processing.cpp
Release list
C++ Mode v0.5.3
Windows
- Fixed
Sketch exited with code -1073741515— gcc runtime DLLs (libgcc_s_seh-1.dll,libstdc++-6.dll,libwinpthread-1.dll) are now bundled from the same MSYS2 environment used to compileProcessing.o, guaranteeing ABI compatibility
C++ Mode v0.5.2
Windows
- Fixed
Sketch exited with code -1073741515(DLL not found) — gcc runtime DLLs (libgcc_s_seh-1.dll,libstdc++-6.dll,libwinpthread-1.dll,libssp-0.dll) are now bundled directly from the MSYS2 build environment, guaranteeing they match the compiler used to buildProcessing.o
macOS
- Fixed sketch window not appearing when launched from the Processing IDE — the engine now registers with the macOS window server via
NSApplicationbefore GLFW initializes
C++ Mode v0.5.1
Windows
- Fixed
Sketch exited with code -1073741515(DLL not found) — gcc runtime DLLs (libgcc_s_seh-1.dll,libssp-0.dll,libwinpthread-1.dll) are now copied from WinLibs to the sketch folder at launch
macOS
- Fixed sketch window not appearing when launched from the Processing IDE — the engine now registers with the macOS window server via
NSApplicationbefore GLFW initializes, which is required for subprocess window display
C++ Mode v0.5.0
Parser fixes
- Direct-init vs function-declaration ambiguity —
Array<Ground*> ground(segments)now correctly parses as a variable declaration instead of a function declaration; previously caused "segments is not a type" - Pointer-to-array declarator —
float (*kernels[8])[3]now emits correctly instead of the brokenfloat (*kernels[8][3])() - Comparison vs template ambiguity —
neighbours < 2 || neighbours > 3and similar expressions no longer trigger false "unexpected token<" errors using std::getremoved — was shadowingPApplet::get(), causingget(x, y)to callstd::getinstead of reading screen pixels and crashing
Build pipeline fixes
- Template-instantiated variables stay in
_PSketch—ArrayList<Ball> ballsandArray<Ground*> ground(segments)are no longer incorrectly hoisted to namespace scope, fixing "not declared in this scope" errors - Dependency hoisting fixed — variables referenced only as function calls (e.g. a method named
flock()inBoid) are no longer incorrectly hoisted to namespace scope; fixes'Flock' does not name a type; did you mean 'flock'? - Class dependency ordering — hoisted classes are now topologically sorted by member-access dependency;
Liquid(which accessesMovermembers via pointer params) is correctly emitted afterMover - Static sketch variable placement — variables with Processing API calls in their initializer (e.g.
PImage* img = loadImage(...)) now go insidesetup()instead of at static initialization time, preventing segfaults before the window exists - API name conflict detection expanded — variables named
circle,square,point,line,image,text,fill,stroke,ambient,specular,arc,box,curve,ellipse,rect,rotate,scale,translateetc. are automatically renamed to avoid shadowing Processing API functions
Linter
- Now uses the same full build pipeline as the real build, eliminating false positive errors
- Forward declarations for functions that also have a definition in the same sketch are suppressed, fixing spurious "cannot be overloaded" errors
Engine
map()division-by-zero guard —map(v, a, a, ...)where start equals stop now returns the output start value instead of crashingPVectorproxy type support —PVector(width, height - 20)inside user-defined classes now compiles correctly; proxy types (_W,_Hetc.) now satisfyis_convertible_v<T, float>
C++ Mode v0.4.8
MouseEvent and KeyEvent support
Mouse and keyboard callbacks now accept an optional event object — matching Java Processing's API exactly. Both zero-arg and event-arg overloads are supported simultaneously:
void mousePressed() { /* old style still works */ }
void mousePressed(MouseEvent e) {
println(e.getButton(), e.isShiftDown(), e.getX(), e.getY());
}
void keyPressed(KeyEvent e) {
println(e.getKey(), e.isControlDown(), e.getAction());
}
void mouseWheel(MouseEvent e) {
println(e.getCount()); // scroll steps
}
Available on all callbacks: mousePressed, mouseReleased, mouseClicked, mouseMoved, mouseDragged, mouseWheel, keyPressed, keyReleased, keyTyped.
Both MouseEvent and KeyEvent expose the full Java Processing method set: getX(), getY(), getButton(), getCount(), getAction(), isShiftDown(), isControlDown(), isAltDown(), isMetaDown(), getKey(), getKeyCode().
Parser fixes
ArrayList<T>and other template types at top level — fixed a bug where trailing-declarator detection consumed the next top-level declaration, causingArrayList<Ball> balls;after a class body to produce a false parse error- Comparison vs template ambiguity —
neighbours < 2 || neighbours > 3no longer triggers a false "unexpected token" error; integer literals and comparison-chained identifiers after<are now correctly identified as comparisons, not template argument lists unionsupport —unionis now fully parsed and emitted alongsidestructandclass- Anonymous structs and unions —
struct { float x, y; } pos;works at top level and inside class bodies - Trailing declarators —
class Foo { ... } *ptr, instance;is fully supported
Linter improvements
The live error underline (linter) now uses the same ClassHoister pass as the real build, so:
- User-defined classes defined after
setup()/draw()are correctly hoisted and visible to the rest of the sketch - Class methods that call Processing API functions (
fill,ellipse, etc.) no longer produce false "cannot call member function without object" underlines - Static member definitions (
int Counter::count = 0;) are correctly placed at file scope, not inside the sketch struct - The linter
_PSketchproxy struct now matches the real generated struct, sowidth,height,mouseX,mouseYetc. are accessible inside hoisted user classes
Engine fixes
PVectorconstructors now accept proxy types (thewidth/heightproxy structs), soPVector(width, height - 20)inside a user-defined class works correctly- All Processing API template functions (
fill,stroke,ellipse,rect, etc.) now accept proxy types viais_convertible_vinstead ofis_arithmetic_v fullScreen(int mode)implementation was missing — calling it caused a linker errorline(A, B, C, D)4-arg template declaration was missing itstemplate<>prefix
C++ Mode v0.4.7
CppMode 0.4.7
Windows crash fixes
- Fixed
Sketch exited with code -1073741819(access violation) — root cause was MinGW 14.2 iostream initialization bug when no console is attached. Fixed withsync_with_stdio(false)before first iostream use inPApplet::run() - Replaced bundled GLFW and GLEW DLLs with official x64 SEH builds (GLFW 3.4, GLEW 2.3.1) — previous DLLs were compiled with 32-bit DWARF exception handling which is incompatible with 64-bit WinLibs
- Removed gcc runtime DLLs from bundle (
libstdc++-6.dll,libgcc_s_seh-1.dll) — these must match the compiler exactly and are provided by WinLibs - Fixed
undefined reference to nanosleep64— excluded<thread>on Windows, all sleep calls now useSleep() - Fixed duplicate
glClear/glfwSwapBuffersin initialization sequence that crashed some AMD/Intel drivers - Fixed early
glfwPollEventsin settle loop causing crashes on Windows — settle loop now skipped on Windows - Fixed
_setupDone=truebeing set too early, causingsetProjectionOpenGL calls fromwinsize_cbbefore context was ready - Added
glewExperimental=GL_TRUEbeforeglewInitto load all function pointers correctly - Requested OpenGL 3.3 compatibility profile explicitly for better driver compatibility
- Removed legacy
glShadeModelandglNormalizecalls that can crash on some drivers - Added WinLibs bin and sketch folder to PATH when launching sketch so runtime DLLs are found
Build system
create-release.pynow automatically triggers a fresh CI cache build and waits for it before packagingcreate-release.pyalways names the outputCppMode.zipregardless of version argument- Windows CI cache now compiles against GLEW 2.3.1 headers to match bundled DLL version
- Windows CI cache now excludes
<thread>to avoidnanosleep64linker errors
Bug fixes
- Fixed
ErrorFormatter.javabrace mismatch causing Java compile errors on some systems
C++ Mode v0.4.6
Input
- Fixed stuck/ghost keys under multi-key chords —
key/keyCodenow translated atomically from GLFW key constant on release, not from stale globals (Bug A) - Fixed phantom key releases on Windows from GLFW virtual key mismatch (GLFW #2417) — scancode-based press tracking drops phantom releases (Bug B)
- Added
isKeyDown(int keyCode)API for querying held-key state - Renamed internal
keysDown[256]to_keysDownto avoid collision with user variables
Windows
- Fixed
Sketch exited with code -1073741515(DLL not found) — DLLs now copied from bundledlibs/windows-x64/to sketch folder at launch - Fixed
undefined reference to nanosleep64with GCC 14.2 — replacedusleepwithstd::this_thread::sleep_for - Added
libssp-0.dllto runtime DLL copy list - Removed all MSYS2 references from Windows DLL check
- Fixed extraction progress bar using ZipInputStream with real percentage
- Fixed
NoClassDefFoundErrorforcom.sun.managementon non-HotSpot JVMs
macOS
- Fixed
std::string not in namespace stderrors on Apple clang — added#include <string>toProcessing_api.h - Fixed
RAND_MAXimplicit int-to-float conversion warnings - Fixed
char >= 128tautological comparison warning - Fixed
sprintfdeprecated warning in stb headers - Fixed
::std::namespace ambiguity inProcessing.cppon Apple clang - Bundled universal dylibs (arm64 + x64) in
libs/macos/— no Homebrew required on Apple Silicon or Intel checkMacLibschecks bundled dylibs first before falling back to Homebrew
Performance
- Cache no longer invalidated by timestamp — precompiled
.oand.gchused if present - macOS ships precompiled
Processing.oandProcessing.h.gchfor both arm64 and x64 - Low memory threshold raised to 3GB before skipping PCH
Linter
- Fixed double
-stdflag in PCH generation - Fixed linter using system
g++instead of portable WinLibs on Windows - PCH validity now checked by existence only
CI
- macOS dylibs built as universal binaries from source using
lipo - macOS build-cache produces
Processing.oandProcessing.h.gchfor both arm64 and x64 - Integration tests on all 3 platforms
- Upgraded to
actions/setup-java@v5
C++ Mode v0.4.5
Bug Fixes
Input
- Fixed stuck/ghost keys under multi-key chords, atomic key translation on release, scancode-based press tracking
- Fixed phantom key releases on Windows (GLFW #2417 virtual key mismatch)
Windows
- Fixed Sketch exited with code -1073741515 (DLL not found at runtime)
- Added libssp-0.dll to runtime DLL copy list
- Removed all MSYS2 references from Windows DLL check
- Fixed extraction progress bar using ZipInputStream with real percentage
- Fixed NoClassDefFoundError for com.sun.management on non-HotSpot JVMs
Performance
- Cache no longer invalidated by timestamp, precompiled .o and .gch used if present
- macOS now ships precompiled Processing.o and Processing.h.gch
- Low memory threshold raised to 3GB before skipping PCH
Linter
- Fixed double -std flag in PCH generation
- Fixed linter using system g++ instead of portable WinLibs on Windows
Install Wizard
- Removed em dashes from setup dialog titles
- Removed misleading bundled-libs text from dialogs
CI
- Integration tests on all 3 platforms
- macOS build-cache now produces Processing.o and Processing.h.gch
C++Mode 0.4.4
- Fix NoClassDefFoundError for com.sun.management.OperatingSystemMXBean on non-HotSpot JVMs
- Fix extraction progress bar using ZipInputStream instead of PowerShell
- Remove bundled libs mention from dialogs
- Remove em dashes from setup dialog titles
CppMode 0.4.3
CppMode 0.4.3
Bug fixes
- Fixed
bestCppStd()hanging when g++ not installed (3s timeout, fast-fail) - Fixed OOM on low-memory machines — skip PCH when < 2GB RAM free
- Fixed linter output capped at 64KB to prevent memory exhaustion
- Fixed
bestCppStd()blocking the UI — now runs in background thread - Fixed bundled GL headers (gl.h, glu.h) causing CALLBACK macro errors on Linux/macOS
- Fixed
std::spanrequiring C++20 guard
CI
- Integration tests on Linux, Windows, and macOS via GitHub Actions