3 Commits
Author SHA1 Message Date
klemek f124cfacfb forge (steel) v1.2.1
Clang Build CI / run-no-video (push) Successful in 2m44s
Clang Build CI / build-release (push) Failing after 52s
Clang Build CI / run-video (push) Successful in 2m41s
Clang Lint CI / lint-no-video (push) Successful in 2m38s
Clang Lint CI / lint-video (push) Successful in 1m22s
2026-05-24 23:32:25 +02:00
klemek 4e14404726 docs: add projection mapping docs 2026-05-24 23:31:55 +02:00
klemek db77846f1b feat: default project up to 4 masks 2026-05-24 23:29:41 +02:00
5 changed files with 34 additions and 22 deletions
+2 -2
View File
@@ -1,12 +1,12 @@
pkgname=forge-steel
pkgver=1.2.0
pkgver=1.2.1
pkgrel=1
pkgdesc="Fusion Of Real Time Generative Effects"
arch=('i686' 'pentium4' 'x86_64' 'arm' 'armv7h' 'armv6h' 'aarch64' 'riscv64')
depends=('glfw>=1:3', 'v4l-utils>=1.32', 'alsa-lib>=1.2', 'libglvnd>=1.7')
url="https://git.klemek.fr/klemek/forge-steel"
source=("${pkgname}-steel-${pkgver}.tar.gz::https://git.klemek.fr/klemek/forge-steel/releases/download/v${pkgver}/${pkgname}-${pkgver}.tar.gz")
sha256sums=('b04e9159eb3eb809029bf02423e4bf844ecdb3b11cbcb49d8eed8f2505d32a1f')
sha256sums=('57559bde7a524e3c9e70de4bc9b675a5a086590a8d85697cebd80c0ebd09f149')
srcdir=build
backup=("usr/share/${pkgname}")
+12
View File
@@ -273,6 +273,18 @@ See the [printable version](./docs/forge_default_mapping.pdf).
| <kbd>Ctrl</kbd> + <kbd>M</kbd> | Projection mapping 3 |
| <kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>M</kbd> | Projection mapping 4 |
### Projection Mappings
In any of the projection mapping mode, use the nanoKONTROL2 last 4 columns to control 4 on-screen points:
| Midi Control | Function |
| ------ | -------- |
| Fader N | point N - X position |
| Knob N | point N - Y position |
| Last column top button | activate projection mapping |
| Last column middle button | invert projection mapping |
| Last column bottom button | show projection borders |
## Making your own FORGE project
You want to embrace the "user" in "user-defined"? It's time to make your own project.
+1 -1
View File
@@ -1,4 +1,4 @@
AC_INIT([forge], [steel-1.2.0], [klemek.dev@proton.me])
AC_INIT([forge], [steel-1.2.1], [klemek.dev@proton.me])
AM_INIT_AUTOMAKE
AC_PROG_CC
+12 -12
View File
@@ -279,9 +279,9 @@ GROUP_3_2_Z=11089
ARI_COUNT=62
ARI_1=GROUP_3_1_Y
ARI_2=GROUP_3_2_Z
ARI_3=GROUP_2_1_X_4
ARI_4=GROUP_2_1_Y_4
ARI_5=GROUP_2_1_Z_4
ARI_3=GROUP_2_5_4
ARI_4=GROUP_2_5_4
ARI_5=GROUP_2_5_4
ARI_6=GROUP_2_2_X_4
ARI_7=GROUP_2_2_Y_4
ARI_8=GROUP_2_2_Z_4
@@ -294,9 +294,9 @@ ARI_14=GROUP_2_6_Z_4
ARI_15=GROUP_2_7_X_4
ARI_16=GROUP_2_7_Y_4
ARI_17=GROUP_2_7_Z_4
ARI_18=GROUP_2_1_X_5
ARI_19=GROUP_2_1_Y_5
ARI_20=GROUP_2_1_Z_5
ARI_18=GROUP_2_5_5
ARI_19=GROUP_2_5_5
ARI_20=GROUP_2_5_5
ARI_21=GROUP_2_2_X_5
ARI_22=GROUP_2_2_Y_5
ARI_23=GROUP_2_2_Z_5
@@ -309,9 +309,9 @@ ARI_29=GROUP_2_6_Z_5
ARI_30=GROUP_2_7_X_5
ARI_31=GROUP_2_7_Y_5
ARI_32=GROUP_2_7_Z_5
ARI_33=GROUP_2_1_X_6
ARI_34=GROUP_2_1_Y_6
ARI_35=GROUP_2_1_Z_6
ARI_33=GROUP_2_5_6
ARI_34=GROUP_2_5_6
ARI_35=GROUP_2_5_6
ARI_36=GROUP_2_2_X_6
ARI_37=GROUP_2_2_Y_6
ARI_38=GROUP_2_2_Z_6
@@ -324,9 +324,9 @@ ARI_44=GROUP_2_6_Z_6
ARI_45=GROUP_2_7_X_6
ARI_46=GROUP_2_7_Y_6
ARI_47=GROUP_2_7_Z_6
ARI_48=GROUP_2_1_X_7
ARI_49=GROUP_2_1_Y_7
ARI_50=GROUP_2_1_Z_7
ARI_48=GROUP_2_5_7
ARI_49=GROUP_2_5_7
ARI_50=GROUP_2_5_7
ARI_51=GROUP_2_2_X_7
ARI_52=GROUP_2_2_Y_7
ARI_53=GROUP_2_2_Z_7
+7 -7
View File
@@ -15,14 +15,14 @@ uniform vec3 iGroup2_6[7];
uniform vec3 iGroup2_7[7];
void main() {
bool visible = (iGroup2_4[0].x + iGroup2_5[0].x + iGroup2_6[0].x + iGroup2_7[0].x) > 0;
bool invert = (iGroup2_4[0].y + iGroup2_5[0].y + iGroup2_6[0].y + iGroup2_7[0].y) > 0;
float rect = clamp(iGroup2_4[0].z + iGroup2_5[0].z + iGroup2_6[0].z + iGroup2_7[0].z, 0, 1);
bool visible = (iGroup2_4[4].x + iGroup2_5[4].x + iGroup2_6[4].x + iGroup2_7[4].x) > 0;
bool invert = (iGroup2_4[4].y + iGroup2_5[4].y + iGroup2_6[4].y + iGroup2_7[4].y) > 0;
float rect = clamp(iGroup2_4[4].z + iGroup2_5[4].z + iGroup2_6[4].z + iGroup2_7[4].z, 0, 1);
bool modified = false;
vec2 uv = mix(vec2(0), vUV, base_mask(vUV));
if (iGroup2_4[0].x > 0) {
if (iGroup2_4[4].x > 0) {
vec2 p11 = vec2(iGroup2_4[6].xy);
vec2 p12 = vec2(iGroup2_4[1].xy);
vec2 p13 = vec2(iGroup2_4[3].xy);
@@ -39,7 +39,7 @@ void main() {
modified = true;
}
if (iGroup2_5[0].x > 0) {
if (iGroup2_5[4].x > 0) {
vec2 p21 = vec2(iGroup2_5[6].xy);
vec2 p22 = vec2(iGroup2_5[1].xy);
vec2 p23 = vec2(iGroup2_5[3].xy);
@@ -60,7 +60,7 @@ void main() {
modified = true;
}
if (iGroup2_6[0].x > 0) {
if (iGroup2_6[4].x > 0) {
vec2 p31 = vec2(iGroup2_6[6].xy);
vec2 p32 = vec2(iGroup2_6[1].xy);
vec2 p33 = vec2(iGroup2_6[3].xy);
@@ -81,7 +81,7 @@ void main() {
modified = true;
}
if (iGroup2_7[0].x > 0) {
if (iGroup2_7[4].x > 0) {
vec2 p41 = vec2(iGroup2_7[6].xy);
vec2 p42 = vec2(iGroup2_7[1].xy);
vec2 p43 = vec2(iGroup2_7[3].xy);