From 09c35f0aa6c8627f490dd809d1db27ffcb76ee98 Mon Sep 17 00:00:00 2001 From: Dominic Masters Date: Fri, 27 Mar 2026 20:48:43 -0500 Subject: [PATCH] Builds on knulli --- cmake/targets/knulli.cmake | 11 +++++-- docker/knulli/Dockerfile | 10 ++++-- scripts/build-rg35xxh.sh | 19 ++++++++++- src/duskgl/display/shader/shaderunlitgl.c | 39 +++++++++++++++++++++++ src/duskgl/duskgl.h | 20 ++++++++++-- src/dusklinux/log/log.c | 1 + 6 files changed, 90 insertions(+), 10 deletions(-) diff --git a/cmake/targets/knulli.cmake b/cmake/targets/knulli.cmake index f83d136..0f11fa8 100644 --- a/cmake/targets/knulli.cmake +++ b/cmake/targets/knulli.cmake @@ -1,5 +1,8 @@ # Find link platform-specific libraries +set(OpenGL_GL_PREFERENCE LEGACY) find_package(SDL2 REQUIRED) +find_library(EGL_LIB EGL REQUIRED) +find_library(GL_LIB GL REQUIRED) find_package(OpenGL REQUIRED) # Setup endianess at compile time to optimize. @@ -16,11 +19,12 @@ else() endif() # Link required libraries. -target_link_libraries(${DUSK_LIBRARY_TARGET_NAME} PUBLIC +target_link_libraries(${DUSK_LIBRARY_TARGET_NAME} PRIVATE SDL2 pthread - OpenGL::GL - GL + OpenGL::GLES2 + ${GL_LIB} + ${EGL_LIB} m ) @@ -28,6 +32,7 @@ target_link_libraries(${DUSK_LIBRARY_TARGET_NAME} PUBLIC target_compile_definitions(${DUSK_LIBRARY_TARGET_NAME} PUBLIC DUSK_SDL2 DUSK_OPENGL + DUSK_OPENGL_ES DUSK_LINUX DUSK_DISPLAY_SIZE_DYNAMIC DUSK_DISPLAY_WIDTH_DEFAULT=640 diff --git a/docker/knulli/Dockerfile b/docker/knulli/Dockerfile index 1af30fb..43a0624 100644 --- a/docker/knulli/Dockerfile +++ b/docker/knulli/Dockerfile @@ -1,4 +1,4 @@ -FROM debian:bookworm +FROM debian:trixie ENV DEBIAN_FRONTEND=noninteractive WORKDIR /workdir RUN dpkg --add-architecture arm64 && \ @@ -19,13 +19,17 @@ RUN dpkg --add-architecture arm64 && \ python3-dotenv \ python3-pyqt5 \ python3-opengl \ - liblua5.3-dev:arm64 \ + liblua5.4-dev:arm64 \ xz-utils:arm64 \ libbz2-dev:arm64 \ zlib1g-dev:arm64 \ libzip-dev:arm64 \ - libbz2-dev:arm64 \ libssl-dev:arm64 \ libsdl2-dev:arm64 \ + liblzma-dev:arm64 \ + libopengl0:arm64 \ + libgl1:arm64 \ + libegl1:arm64 \ + libgles2:arm64 \ libgl1-mesa-dev:arm64 && \ rm -rf /var/lib/apt/lists/* \ No newline at end of file diff --git a/scripts/build-rg35xxh.sh b/scripts/build-rg35xxh.sh index 23af653..5aaaaa9 100755 --- a/scripts/build-rg35xxh.sh +++ b/scripts/build-rg35xxh.sh @@ -4,4 +4,21 @@ cmake -S . -B build-rg35xxh -G Ninja \ -DDUSK_TARGET_SYSTEM=rg35xxh \ -DCMAKE_TOOLCHAIN_FILE=./cmake/toolchains/aarch64-linux-gnu.cmake \ -DCMAKE_BUILD_TYPE=Release -cmake --build build-rg35xxh -- -j$(nproc) \ No newline at end of file +cmake --build build-rg35xxh -- -j$(nproc) + +# Copy necessary libs out +mkdir -p ./build-rg35xxh/dusk +cp ./build-rg35xxh/Dusk ./build-rg35xxh/dusk/Dusk +cp ./build-rg35xxh/dusk.dsk ./build-rg35xxh/dusk/dusk.dsk +echo '#!/bin/bash' > build-rg35xxh/dusk/Dusk.sh +echo 'cd "$(dirname "$(readlink -f "$0")")"' >> build-rg35xxh/dusk/Dusk.sh +echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$(dirname "$(readlink -f "$0")")' >> build-rg35xxh/dusk/Dusk.sh +echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/gl4es' >> build-rg35xxh/dusk/Dusk.sh +echo 'export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib' >> build-rg35xxh/dusk/Dusk.sh +echo '$(dirname "$(readlink -f "$0")")/Dusk' >> build-rg35xxh/dusk/Dusk.sh +chmod +x build-rg35xxh/dusk/Dusk.sh +cp /usr/lib/aarch64-linux-gnu/liblua5.4.so.0 build-rg35xxh/dusk/ +# cp /usr/lib/aarch64-linux-gnu/libSDL2-2.0.so.0 build-rg35xxh/dusk/ +# cp /usr/lib/aarch64-linux-gnu/libGL.so.1 build-rg35xxh/dusk/ +# cp /usr/lib/aarch64-linux-gnu/libEGL.so.1 build-rg35xxh/dusk/ +# cp /usr/lib/aarch64-linux-gnu/libGLESv2.so.2 build-rg35xxh/dusk/ \ No newline at end of file diff --git a/src/duskgl/display/shader/shaderunlitgl.c b/src/duskgl/display/shader/shaderunlitgl.c index 052aa1f..7b28475 100644 --- a/src/duskgl/display/shader/shaderunlitgl.c +++ b/src/duskgl/display/shader/shaderunlitgl.c @@ -9,6 +9,45 @@ #ifdef DUSK_OPENGL_LEGACY shaderdefinition_t SHADER_UNLIT_DEFINITION = { 0 }; +#elifdef DUSK_OPENGL_ES + shaderdefinition_t SHADER_UNLIT_DEFINITION = { + .vert = + "#version 300 es\n" + "layout(location = 0) in vec3 a_Pos;\n" + "layout(location = 1) in vec2 a_TexCoord;\n" + "layout(location = 2) in vec4 a_Color;\n" + "uniform mat4 u_Proj;\n" + "uniform mat4 u_View;\n" + "uniform mat4 u_Model;\n" + "out vec4 v_Color;\n" + "out vec2 v_TexCoord;\n" + "void main() {\n" + " gl_Position = u_Proj * u_View * u_Model * vec4(a_Pos, 1.0);\n" + " v_Color = a_Color;\n" + " v_TexCoord = a_TexCoord;\n" + "}\n", + + .frag = + "#version 300 es\n" + "precision mediump float;\n" + "uniform sampler2D u_Texture;\n" + "uniform uint u_Colors[256];\n" + "uniform int u_ColorCount;\n" + "in vec4 v_Color;\n" + "in vec2 v_TexCoord;\n" + "out vec4 FragColor;\n" + "void main() {\n" + " vec4 texColor = texture(u_Texture, v_TexCoord);\n" + " uint index = uint(floor(texColor.r * 255.0));\n" + " uint palColor = u_Colors[index];\n" + " float r = float((palColor >> 24) & 0xFFu) / 255.0;\n" + " float g = float((palColor >> 16) & 0xFFu) / 255.0;\n" + " float b = float((palColor >> 8) & 0xFFu) / 255.0;\n" + " float a = float((palColor >> 0) & 0xFFu) / 255.0;\n" + " vec4 paletteColor = vec4(r, g, b, a);\n" + " FragColor = paletteColor;\n" + "}\n" + }; #else shaderdefinition_t SHADER_UNLIT_DEFINITION = { .vert = diff --git a/src/duskgl/duskgl.h b/src/duskgl/duskgl.h index 58940a2..707a68c 100644 --- a/src/duskgl/duskgl.h +++ b/src/duskgl/duskgl.h @@ -6,6 +6,20 @@ */ #pragma once -#define GL_GLEXT_PROTOTYPES -#include -#include \ No newline at end of file +#ifdef DUSK_OPENGL_ES + #include + #define GL_COLOR_INDEX8_EXT 0x80E5 + #define GL_FRAMEBUFFER_EXT GL_FRAMEBUFFER + #define GL_FRAMEBUFFER_COMPLETE_EXT GL_FRAMEBUFFER_COMPLETE + #define glCheckFramebufferStatusEXT glCheckFramebufferStatus + #define glDeleteFramebuffersEXT glDeleteFramebuffers + #define glGenFramebuffersEXT glGenFramebuffers + #define glBindFramebufferEXT glBindFramebuffer + #define glFramebufferTexture2DEXT glFramebufferTexture2D + #define GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT0 + #define glClearDepth(depth) glClearDepthf(depth) +#else + #define GL_GLEXT_PROTOTYPES + #include + #include +#endif \ No newline at end of file diff --git a/src/dusklinux/log/log.c b/src/dusklinux/log/log.c index d48e238..b0d808a 100644 --- a/src/dusklinux/log/log.c +++ b/src/dusklinux/log/log.c @@ -19,4 +19,5 @@ void logError(const char_t *message, ...) { va_start(args, message); vprintf(message, args); va_end(args); + fflush(stdout); } \ No newline at end of file