From 2ee4332a1dcc6a4376c7f77f7112c0ead3bf3424 Mon Sep 17 00:00:00 2001 From: Marco Hutter Date: Sat, 14 Sep 2024 05:03:16 +0200 Subject: [PATCH] JNI improvements (#886) Large refactoring of the Java Wrapper, focussing on error handling, documentation, completeness, and usability improvements. Fixes #880. This includes several breaking changes. Not all breaking changes are listed here explicitly. But in all cases, it should be easy for clients to update their code to the new state. The most important changes for the Java Wrapper are: - Made `deflateZstd`, `deflateZLIB`, and `createFromMemory` available in the `KtxTexture2` class - Fixed a bug where the `KtxBasisParams#setInputSwizzle` function caused data corruption - Increased the consistency of the naming and handling of constants: - All constant names are `UPPER_SNAKE_CASE`, omitting common prefixes - Classes that define constants offer a `stringFor` function that returns the string representation of a constant - The `KtxCreateStorage` class was renamed to `KtxTextureCreateStorage` - The `KtxPackUASTCFlagBits` class was renamed to `KtxPackUastcFlagBits` - Improved error handling: - When functions receive a parameter that is `null`, then this will no longer crash the JVM, but throw a `NullPointerException` instead - When `setInputSwizzle` receives invalid arguments, then an `IllegalArgumentException` will be thrown - When one of the `create...` family of functions causes an error, meaning that the respective `KtxTexture2` object cannot be created, then a `KtxException` will be thrown - Added JavaDocs, and enabled the generation of JavaDocs as part of the Maven build process - Internal improvements (like JNI field caching, and avoiding to call JNI functions with pending exceptions) --- interface/java_binding/CMakeLists.txt | 1 + interface/java_binding/pom.xml | 13 + .../src/main/cpp/KtxErrorCode.cpp | 19 + .../java_binding/src/main/cpp/KtxTexture.cpp | 222 ++++- .../java_binding/src/main/cpp/KtxTexture1.cpp | 52 +- .../java_binding/src/main/cpp/KtxTexture2.cpp | 198 +++- .../java_binding/src/main/cpp/libktx-jni.cpp | 477 ++++++--- .../java_binding/src/main/cpp/libktx-jni.h | 104 +- .../java/org/khronos/ktx/KhrDfTransfer.java | 177 ++++ .../java/org/khronos/ktx/KtxAstcParams.java | 329 +++++-- .../java/org/khronos/ktx/KtxBasisParams.java | 904 ++++++++++++++---- .../org/khronos/ktx/KtxCreateStorage.java | 11 - .../java/org/khronos/ktx/KtxErrorCode.java | 210 +++- .../java/org/khronos/ktx/KtxException.java | 43 + .../org/khronos/ktx/KtxInternalformat.java | 5 + .../ktx/KtxPackAstcBlockDimension.java | 145 +++ .../khronos/ktx/KtxPackAstcEncoderMode.java | 31 + .../khronos/ktx/KtxPackAstcQualityLevel.java | 62 +- .../org/khronos/ktx/KtxPackUASTCFlagBits.java | 22 - .../org/khronos/ktx/KtxPackUastcFlagBits.java | 139 +++ .../org/khronos/ktx/KtxSupercmpScheme.java | 52 + .../main/java/org/khronos/ktx/KtxTexture.java | 319 ++++-- .../java/org/khronos/ktx/KtxTexture1.java | 134 ++- .../java/org/khronos/ktx/KtxTexture2.java | 389 ++++++-- .../khronos/ktx/KtxTextureCreateFlagBits.java | 80 +- .../org/khronos/ktx/KtxTextureCreateInfo.java | 393 ++++++-- .../khronos/ktx/KtxTextureCreateStorage.java | 47 + .../org/khronos/ktx/KtxTranscodeFlagBits.java | 80 ++ .../org/khronos/ktx/KtxTranscodeFormat.java | 204 +++- .../khronos/ktx/test/KtxAstcParamsTest.java | 46 + .../org/khronos/ktx/test/KtxParallelTest.java | 4 +- .../ktx/test/KtxTestLibraryLoader.java | 150 ++- .../org/khronos/ktx/test/KtxTexture1Test.java | 2 +- .../org/khronos/ktx/test/KtxTexture2Test.java | 454 +++++++-- lib/strings.c | 2 +- 35 files changed, 4565 insertions(+), 955 deletions(-) create mode 100644 interface/java_binding/src/main/cpp/KtxErrorCode.cpp create mode 100644 interface/java_binding/src/main/java/org/khronos/ktx/KhrDfTransfer.java delete mode 100644 interface/java_binding/src/main/java/org/khronos/ktx/KtxCreateStorage.java create mode 100644 interface/java_binding/src/main/java/org/khronos/ktx/KtxException.java delete mode 100644 interface/java_binding/src/main/java/org/khronos/ktx/KtxPackUASTCFlagBits.java create mode 100644 interface/java_binding/src/main/java/org/khronos/ktx/KtxPackUastcFlagBits.java create mode 100644 interface/java_binding/src/main/java/org/khronos/ktx/KtxTextureCreateStorage.java create mode 100644 interface/java_binding/src/main/java/org/khronos/ktx/KtxTranscodeFlagBits.java create mode 100644 interface/java_binding/src/test/java/org/khronos/ktx/test/KtxAstcParamsTest.java diff --git a/interface/java_binding/CMakeLists.txt b/interface/java_binding/CMakeLists.txt index 0716119a46..1920b83856 100644 --- a/interface/java_binding/CMakeLists.txt +++ b/interface/java_binding/CMakeLists.txt @@ -28,6 +28,7 @@ add_library(ktx-jni SHARED src/main/cpp/KtxTexture.cpp src/main/cpp/KtxTexture1.cpp src/main/cpp/KtxTexture2.cpp + src/main/cpp/KtxErrorCode.cpp src/main/cpp/libktx-jni.cpp ${CMAKE_CURRENT_BINARY_DIR}/ktx-jni.manifest ) diff --git a/interface/java_binding/pom.xml b/interface/java_binding/pom.xml index a6df16d9c0..5d6536ac04 100644 --- a/interface/java_binding/pom.xml +++ b/interface/java_binding/pom.xml @@ -144,6 +144,19 @@ + + org.apache.maven.plugins + maven-javadoc-plugin + 3.6.3 + + + attach-javadocs + + jar + + + +