From e3f2525bf52c8b53acd46ae3cf9c97bbc23abe36 Mon Sep 17 00:00:00 2001 From: Dan Rosser Date: Thu, 8 Oct 2026 22:10:03 +1300 Subject: [PATCH 1/3] WebGL and iOS GLES version options; write project defines to config.make --- commandLine/src/projects/baseProject.cpp | 11 ++++++++++ commandLine/src/projects/baseProject.h | 6 +++++- frontend/app.js | 15 ++++++++++++- frontend/index.html | 27 ++++++++++++++++++++++++ frontend/locales/de.json | 6 +++++- frontend/locales/en.json | 6 +++++- frontend/locales/es.json | 6 +++++- frontend/locales/fr.json | 6 +++++- frontend/locales/ja.json | 6 +++++- frontend/locales/ko.json | 6 +++++- frontend/locales/pt.json | 6 +++++- frontend/locales/ru.json | 6 +++++- frontend/locales/zh-CN.json | 6 +++++- 13 files changed, 102 insertions(+), 11 deletions(-) diff --git a/commandLine/src/projects/baseProject.cpp b/commandLine/src/projects/baseProject.cpp index 2e20374a..fe606b7c 100644 --- a/commandLine/src/projects/baseProject.cpp +++ b/commandLine/src/projects/baseProject.cpp @@ -265,6 +265,7 @@ bool baseProject::save(){ vector lines = fileToStrings(projectDir / "config.make"); std::ofstream saveConfig(projectDir / "config.make"); + bool bWroteDefines = false; for (auto & str : lines) { //add the of root path @@ -282,10 +283,20 @@ bool baseProject::save(){ ofLog(OF_LOG_VERBOSE) << " adding PROJECT_EXTERNAL_SOURCE_PATHS to config" << extSrcPaths[d].generic_string() << std::endl; saveConfig << "PROJECT_EXTERNAL_SOURCE_PATHS" << (d == 0 ? " = " : " += ") << extSrcPaths[d].generic_string() << std::endl; } + } + // make builds (emscripten, linux, msys2) only see defines through config.make + else if( projectDefines.size() && (str.rfind("# PROJECT_DEFINES =", 0) == 0 || str.rfind("PROJECT_DEFINES =", 0) == 0) ){ + if (!bWroteDefines) { + saveConfig << "PROJECT_DEFINES = " << ofJoinString(projectDefines, " ") << std::endl; + bWroteDefines = true; + } } else { saveConfig << str << std::endl; } } + if (projectDefines.size() && !bWroteDefines && lines.size()) { + saveConfig << "PROJECT_DEFINES = " << ofJoinString(projectDefines, " ") << std::endl; + } #ifdef OFADDON_OUTPUT_JSON_DEBUG saveAddonsToJson(); #endif diff --git a/commandLine/src/projects/baseProject.h b/commandLine/src/projects/baseProject.h index f5f8e13a..3c637796 100644 --- a/commandLine/src/projects/baseProject.h +++ b/commandLine/src/projects/baseProject.h @@ -101,7 +101,10 @@ class baseProject { // public entry point for project-level preprocessor defines (e.g. -D/--defines on the // CLI, or a GUI-driven renderer choice) - addDefine() itself stays protected since it's // also invoked internally by addAddonDefines() for addon-provided defines - void addProjectDefine(const std::string & define, LibType libType = RELEASE_LIB) { addDefine(define, libType); } + void addProjectDefine(const std::string & define, LibType libType = RELEASE_LIB) { + addDefine(define, libType); + projectDefines.emplace_back(define); + } #ifdef OFADDON_OUTPUT_JSON_DEBUG @@ -172,6 +175,7 @@ class baseProject { std::vector addons; std::vector extSrcPaths; + std::vector projectDefines; // also written to config.make PROJECT_DEFINES for make builds //cached addons - if an addon is requested more than once, avoid loading from disk as it's quite slow std::map> addonsCache; //indexed by [platform][supplied path] diff --git a/frontend/app.js b/frontend/app.js index 9524528b..8f19bb37 100644 --- a/frontend/app.js +++ b/frontend/app.js @@ -327,7 +327,8 @@ ipcRenderer.on('setTemplates', (event, arg) => { allowAdditions: false, fullTextSearch: 'exact', match: "text", - maxSelections: 1 + maxSelections: 1, + onChange: () => updateRendererFieldVisibility() }); // // set the template to default @@ -990,6 +991,7 @@ function setup() { }); $('#rendererDropdown').dropdown(); + $('#webglDropdown, #glesDropdown').dropdown(); $('#rendererDropdown').dropdown('set exactly', 'default'); // reflesh template dropdown list depends on selected platforms @@ -1198,6 +1200,14 @@ function generate() { if (rendererDefines[rendererChoice]) { definesArr.push(rendererDefines[rendererChoice]); } + const webgl = $('#webglDropdown').dropdown('get value'); + if ($('#webglField').css('display') !== 'none' && webgl !== 'default') { + definesArr.push('OF_WEBGL_VERSION=' + webgl); + } + const gles = $('#glesDropdown').dropdown('get value'); + if ($('#glesField').css('display') !== 'none' && gles !== 'default') { + definesArr.push('OF_GLES_VERSION=' + gles); + } const gen = { projectName: $("#projectName").val(), @@ -1376,6 +1386,9 @@ function updateRendererFieldVisibility() { } else { $('#rendererField').hide(); } + const selectedTemplates = ($("#templatesDropdown input").val() || '').trim().split(','); + $('#webglField').toggle(!!defaultSettings.advancedMode && selectedTemplates.includes('emscripten')); + $('#glesField').toggle(!!defaultSettings.advancedMode && selectedPlatforms.some((p) => ['ios', 'macos'].includes(p))); } //---------------------------------------- diff --git a/frontend/index.html b/frontend/index.html index 5661fae8..b460cda3 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -244,6 +244,33 @@ + + +