diff --git a/filament/backend/include/backend/platforms/VulkanPlatformAndroid.h b/filament/backend/include/backend/platforms/VulkanPlatformAndroid.h index 9d8e49323b..f08ff384cc 100644 --- a/filament/backend/include/backend/platforms/VulkanPlatformAndroid.h +++ b/filament/backend/include/backend/platforms/VulkanPlatformAndroid.h @@ -26,6 +26,20 @@ namespace filament::backend { class VulkanPlatformAndroid : public VulkanPlatform { public: + Platform::ExternalImageHandle UTILS_PUBLIC createExternalImage(AHardwareBuffer const* buffer, + bool sRGB) noexcept; + + struct UTILS_PUBLIC ExternalImageDescAndroid { + uint32_t width; // Texture width + uint32_t height; // Texture height + TextureFormat format;// Texture format + TextureUsage usage; // Texture usage flags + }; + + ExternalImageDescAndroid UTILS_PUBLIC getExternalImageDesc( + ExternalImageHandleRef externalImage) const noexcept; + +protected: struct ExternalImageVulkanAndroid : public Platform::ExternalImage { AHardwareBuffer* aHardwareBuffer = nullptr; bool sRGB = false; @@ -38,9 +52,6 @@ public: ~ExternalImageVulkanAndroid() override; }; - Platform::ExternalImageHandle createExternalImage(AHardwareBuffer const* buffer, - bool sRGB) noexcept; - virtual ExternalImageMetadata getExternalImageMetadata(ExternalImageHandleRef externalImage); using ImageData = VulkanPlatform::ImageData; @@ -48,7 +59,6 @@ public: const ExternalImageMetadata& metadata, uint32_t memoryTypeIndex, VkImageUsageFlags usage); -protected: virtual ExtensionSet getSwapchainInstanceExtensions() const; using SurfaceBundle = VulkanPlatform::SurfaceBundle; diff --git a/filament/backend/src/vulkan/platform/VulkanPlatformAndroid.cpp b/filament/backend/src/vulkan/platform/VulkanPlatformAndroid.cpp index 1813f57473..441004e995 100644 --- a/filament/backend/src/vulkan/platform/VulkanPlatformAndroid.cpp +++ b/filament/backend/src/vulkan/platform/VulkanPlatformAndroid.cpp @@ -223,6 +223,19 @@ Platform::ExternalImageHandle VulkanPlatformAndroid::createExternalImage( return Platform::ExternalImageHandle{}; } +VulkanPlatformAndroid::ExternalImageDescAndroid VulkanPlatformAndroid::getExternalImageDesc( + ExternalImageHandleRef externalImage) const noexcept { + auto const* fvkExternalImage = + static_cast(externalImage.get()); + + return { + .width = fvkExternalImage->width, + .height = fvkExternalImage->height, + .format = fvkExternalImage->format, + .usage = fvkExternalImage->usage, + }; +} + VulkanPlatform::ExternalImageMetadata VulkanPlatformAndroid::getExternalImageMetadata( ExternalImageHandleRef externalImage) { auto const* fvkExternalImage =