From c1347e55cb868e12198a973f1ba59bd5cd00df8e Mon Sep 17 00:00:00 2001 From: Mathias Agopian Date: Fri, 14 May 2021 13:29:46 -0700 Subject: [PATCH] add java API for Texture::Builder::import() deprecate Stream::stream(intptr_t). This method was needed for ARCore back in the days, but there is now a zero-copy way to achieve the same thing. This API shouldn't be used anymore. --- RELEASE_NOTES.md | 1 + .../filament-android/src/main/cpp/Stream.cpp | 2 ++ .../filament-android/src/main/cpp/Texture.cpp | 7 +++++++ .../com/google/android/filament/Stream.java | 2 ++ .../com/google/android/filament/Texture.java | 21 +++++++++++++++++++ filament/include/filament/Stream.h | 2 ++ filament/include/filament/Texture.h | 2 +- 7 files changed, 36 insertions(+), 1 deletion(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index cf4c928a77..b2cb5823a7 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -7,6 +7,7 @@ A new header is inserted each time a *tag* is created. - engine: User materials can now use 9 samplers instead of 8 [⚠️ **Material breakage**]. - engine: Remove `populateTangentQuaternions` [⚠️ **API change**]. +- engine: Deprecate `Stream::Builder::stream(intptr_t)` [⚠️ **API Change**]. ## v1.9.25 diff --git a/android/filament-android/src/main/cpp/Stream.cpp b/android/filament-android/src/main/cpp/Stream.cpp index 46b94bb0f8..f7297762eb 100644 --- a/android/filament-android/src/main/cpp/Stream.cpp +++ b/android/filament-android/src/main/cpp/Stream.cpp @@ -102,7 +102,9 @@ extern "C" JNIEXPORT void JNICALL Java_com_google_android_filament_Stream_nBuilderStream(JNIEnv*, jclass, jlong nativeStreamBuilder, jlong externalTextureId) { StreamBuilder* builder = (StreamBuilder*) nativeStreamBuilder; +#pragma clang diagnostic ignored "-Wdeprecated-declarations" builder->builder()->stream(externalTextureId); +#pragma clang diagnostic pop } extern "C" JNIEXPORT void JNICALL diff --git a/android/filament-android/src/main/cpp/Texture.cpp b/android/filament-android/src/main/cpp/Texture.cpp index ba91618afb..5a63833da1 100644 --- a/android/filament-android/src/main/cpp/Texture.cpp +++ b/android/filament-android/src/main/cpp/Texture.cpp @@ -129,6 +129,13 @@ Java_com_google_android_filament_Texture_nBuilderSwizzle(JNIEnv *, jclass , (Texture::Swizzle)r, (Texture::Swizzle)g, (Texture::Swizzle)b, (Texture::Swizzle)a); } +extern "C" +JNIEXPORT void JNICALL +Java_com_google_android_filament_Texture_nBuilderImportTexture(JNIEnv*, jclass, jlong nativeBuilder, jlong id) { + Texture::Builder *builder = (Texture::Builder *) nativeBuilder; + builder->import((intptr_t)id); +} + extern "C" JNIEXPORT jlong JNICALL Java_com_google_android_filament_Texture_nBuilderBuild(JNIEnv*, jclass, jlong nativeBuilder, jlong nativeEngine) { diff --git a/android/filament-android/src/main/java/com/google/android/filament/Stream.java b/android/filament-android/src/main/java/com/google/android/filament/Stream.java index 583d3b0506..850463f918 100644 --- a/android/filament-android/src/main/java/com/google/android/filament/Stream.java +++ b/android/filament-android/src/main/java/com/google/android/filament/Stream.java @@ -166,7 +166,9 @@ public class Stream { * GL_TEXTURE_EXTERNAL_OES. * @return This Builder, for chaining calls. * @see Texture#setExternalStream + * @deprecated this method existed only for ARCore which doesn't need this anymore, use {@link Texture.Builder#importTexture(long)} instead. */ + @Deprecated @NonNull public Builder stream(long externalTextureId) { nBuilderStream(mNativeBuilder, externalTextureId); diff --git a/android/filament-android/src/main/java/com/google/android/filament/Texture.java b/android/filament-android/src/main/java/com/google/android/filament/Texture.java index 92cae94914..fa20825715 100644 --- a/android/filament-android/src/main/java/com/google/android/filament/Texture.java +++ b/android/filament-android/src/main/java/com/google/android/filament/Texture.java @@ -695,6 +695,26 @@ public class Texture { return this; } + /** + * Specify a native texture to import as a Filament texture. + *

+ * The texture id is backend-specific: + *

+ *

+ * + * + * @param id a backend specific texture identifier + * + * @return This Builder, for chaining calls. + */ + @NonNull + public Builder importTexture(long id) { + nBuilderImportTexture(mNativeBuilder, id); + return this; + } + /** * Creates a new Texture instance. * @param engine The {@link Engine} to associate this Texture with. @@ -1167,6 +1187,7 @@ public class Texture { private static native void nBuilderFormat(long nativeBuilder, int format); private static native void nBuilderUsage(long nativeBuilder, int flags); private static native void nBuilderSwizzle(long nativeBuilder, int r, int g, int b, int a); + private static native void nBuilderImportTexture(long nativeBuilder, long id); private static native long nBuilderBuild(long nativeBuilder, long nativeEngine); private static native int nGetWidth(long nativeTexture, int level); diff --git a/filament/include/filament/Stream.h b/filament/include/filament/Stream.h index f826bcb800..146762c20e 100644 --- a/filament/include/filament/Stream.h +++ b/filament/include/filament/Stream.h @@ -131,7 +131,9 @@ public: * @return This Builder, for chaining calls. * * @see Texture::setExternalStream() + * @deprecated this method existed only for ARCore which doesn't need this anymore, use Texture::import() instead. */ + UTILS_DEPRECATED Builder& stream(intptr_t externalTextureId) noexcept; /** diff --git a/filament/include/filament/Texture.h b/filament/include/filament/Texture.h index d3c0afde48..60dfbeeaff 100644 --- a/filament/include/filament/Texture.h +++ b/filament/include/filament/Texture.h @@ -217,7 +217,7 @@ public: * * With Metal, the id object should be cast to an intptr_t using * CFBridgingRetain to transfer ownership to Filament. Filament will release ownership of - * the textue object when the Filament texture is destroyed. + * the texture object when the Filament texture is destroyed. * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} * id metalTexture = ...