From bdbfbd90942156c5ecd2f2f1b3bfb3a8254e1cc3 Mon Sep 17 00:00:00 2001 From: seungho Date: Thu, 24 Jun 2021 16:14:08 +0900 Subject: [PATCH] Add ApplyCustomFragmentPrefix - Apply suitable prefix for the native image fragment shader Change-Id: I5e28b65d9d925de4fc76e8b23307204cc1eeb389 Signed-off-by: seungho --- .../dali-toolkit-test-utils/test-native-image.h | 17 +++++++++++++++++ .../toolkit-native-image-source.cpp | 5 +++++ .../internal/controls/camera-view/camera-view-impl.cpp | 11 +++++------ .../internal/controls/camera-view/camera-view-impl.h | 4 ++-- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-native-image.h b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-native-image.h index d134942..fb9451c 100644 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-native-image.h +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/test-native-image.h @@ -83,6 +83,23 @@ public: mCallStack.PushCall("GetCustomFragmentPrefix", ""); return "#extension GL_OES_EGL_image_external:require\n"; }; + inline virtual bool ApplyNativeFragmentShader(std::string& shader) + { + mCallStack.PushCall("ApplyNativeFragmentShader", ""); + shader = "#extension GL_OES_EGL_image_external:require\n" + shader; + + //Get custom sampler type name + const char* customSamplerTypename = GetCustomSamplerTypename(); + if(customSamplerTypename) + { + size_t samplerPosition = shader.find("sampler2D"); + if(samplerPosition != std::string::npos) + { + shader.replace(samplerPosition, strlen("sampler2D"), customSamplerTypename); + } + } + return true; + }; inline const char* GetCustomSamplerTypename() const override { mCallStack.PushCall("GetCustomSamplerTypename", ""); diff --git a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-native-image-source.cpp b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-native-image-source.cpp index 11bd75b..29ea5d5 100755 --- a/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-native-image-source.cpp +++ b/automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-native-image-source.cpp @@ -105,6 +105,11 @@ const char* NativeImageSource::GetCustomFragmentPrefix() const return ""; } +bool NativeImageSource::ApplyNativeFragmentShader(std::string& shader) +{ + return true; +} + const char* NativeImageSource::GetCustomSamplerTypename() const { return ""; diff --git a/dali-toolkit/internal/controls/camera-view/camera-view-impl.cpp b/dali-toolkit/internal/controls/camera-view/camera-view-impl.cpp index 9ca121b..772c1a0 100644 --- a/dali-toolkit/internal/controls/camera-view/camera-view-impl.cpp +++ b/dali-toolkit/internal/controls/camera-view/camera-view-impl.cpp @@ -145,7 +145,7 @@ void CameraView::SetNativeImageTarget() mNativeTexture = Dali::Texture::New(*nativeImageSourcePtr); Dali::Geometry geometry = VisualFactoryCache::CreateQuadGeometry(); - Dali::Shader shader = CreateShader(nativeImageSourcePtr->GetCustomFragmentPrefix()); + Dali::Shader shader = CreateShader(nativeImageSourcePtr); Dali::TextureSet textureSet = Dali::TextureSet::New(); textureSet.SetTexture(0u, mNativeTexture); @@ -181,13 +181,12 @@ void CameraView::UpdateDisplayArea(Dali::PropertyNotification& source) mCameraPlayer.SetDisplayArea(mDisplayArea); } -Dali::Shader CameraView::CreateShader(const char* fragmentPrefix) +Dali::Shader CameraView::CreateShader(Dali::NativeImageSourcePtr nativeImageSourcePtr) { - std::string fragmentShader = fragmentPrefix; - std::string vertexShader; + std::string vertexShader = SHADER_VIDEO_VIEW_TEXTURE_VERT.data(); + std::string fragmentShader = SHADER_VIDEO_VIEW_TEXTURE_FRAG.data(); - vertexShader = SHADER_VIDEO_VIEW_TEXTURE_VERT.data(); - fragmentShader += SHADER_VIDEO_VIEW_TEXTURE_FRAG.data(); + nativeImageSourcePtr->ApplyNativeFragmentShader(fragmentShader); return Dali::Shader::New(vertexShader, fragmentShader); } diff --git a/dali-toolkit/internal/controls/camera-view/camera-view-impl.h b/dali-toolkit/internal/controls/camera-view/camera-view-impl.h index 6c77889..cc5ba82 100644 --- a/dali-toolkit/internal/controls/camera-view/camera-view-impl.h +++ b/dali-toolkit/internal/controls/camera-view/camera-view-impl.h @@ -101,10 +101,10 @@ private: /** * @brief CreateShader for native image target - * @param[in] fragmentPrefix prefix of fragment + * @param[in] nativeImageSourcePtr to apply custom fragment prefix * @return Returns the shader for NativeImage. */ - Dali::Shader CreateShader(const char* fragmentPrefix); + Dali::Shader CreateShader(Dali::NativeImageSourcePtr nativeImageSourcePtr); private: Dali::CameraPlayer mCameraPlayer; -- 2.7.4