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:
+ *
+ * - OpenGL: GLuint texture ID
+ *
+ *
+ *
+ *
+ * @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 = ...