From e3f1a3ca11234576099f419dc245d66721a94cc9 Mon Sep 17 00:00:00 2001 From: taeyoon Date: Wed, 7 Sep 2016 19:53:03 +0900 Subject: [PATCH] [3.0] Modify texture bind for OES_EGL_image_external Modify BindTexture part for native image source with OES_EGL_image_external Change-Id: I4c4063d98293f833739870a7c8c42d0ab70d409c --- .../dali/dali-test-suite-utils/test-native-image.h | 3 +++ .../images/native-image-interface-extension.h | 7 +++++++ dali/internal/render/gl-resources/context.h | 14 ++++++++++++++ dali/internal/render/gl-resources/native-texture.cpp | 20 ++++++++++++++++++-- 4 files changed, 42 insertions(+), 2 deletions(-) diff --git a/automated-tests/src/dali/dali-test-suite-utils/test-native-image.h b/automated-tests/src/dali/dali-test-suite-utils/test-native-image.h index 7724717..3a6557f 100644 --- a/automated-tests/src/dali/dali-test-suite-utils/test-native-image.h +++ b/automated-tests/src/dali/dali-test-suite-utils/test-native-image.h @@ -21,6 +21,7 @@ // INTERNAL INCLUDES #include #include +#include namespace Dali { @@ -35,6 +36,8 @@ public: inline const char* GetCustomFragmentPreFix(){return "#extension GL_OES_EGL_image_external:require\n";} inline const char* GetCustomSamplerTypename(){return "samplerExternalOES";} + inline int GetEglImageTextureTarget(){return GL_TEXTURE_EXTERNAL_OES;} + }; class DALI_IMPORT_API TestNativeImage : public Dali::NativeImageInterface diff --git a/dali/devel-api/images/native-image-interface-extension.h b/dali/devel-api/images/native-image-interface-extension.h index ca19c14..dfc60d4 100644 --- a/dali/devel-api/images/native-image-interface-extension.h +++ b/dali/devel-api/images/native-image-interface-extension.h @@ -48,6 +48,13 @@ public: virtual const char* GetCustomSamplerTypename() = 0; /** + * @brief Get texture target for binding native image as texture. + * + * @return Texture target. + */ + virtual int GetEglImageTextureTarget() = 0; + + /** * @brief Retrieve the extension for the interface. * * @return Extension2 pointer if available, NULL otherwise diff --git a/dali/internal/render/gl-resources/context.h b/dali/internal/render/gl-resources/context.h index c2f11ac..136f09b 100644 --- a/dali/internal/render/gl-resources/context.h +++ b/dali/internal/render/gl-resources/context.h @@ -286,6 +286,20 @@ public: } /** + * Wrapper for OpenGL ES 2.0 glBindTexture( target ) + */ + void BindTexture( int target, GLuint texture ) + { + if (mBound2dTextureId[ mActiveTextureUnit ] != texture) + { + mBound2dTextureId[ mActiveTextureUnit ] = texture; + + LOG_GL("BindTexture target(%d) %d\n", target, texture); + CHECK_GL( mGlAbstraction, mGlAbstraction.BindTexture(target, texture) ); + } + } + + /** * Wrapper for OpenGL ES 2.0 glBindTexture(GL_TEXTURE_CUBE_MAP) */ void BindCubeMapTexture( GLuint texture ) diff --git a/dali/internal/render/gl-resources/native-texture.cpp b/dali/internal/render/gl-resources/native-texture.cpp index 8110880..11a62ce 100644 --- a/dali/internal/render/gl-resources/native-texture.cpp +++ b/dali/internal/render/gl-resources/native-texture.cpp @@ -23,6 +23,7 @@ #include #include #include +#include namespace Dali { @@ -62,8 +63,15 @@ bool NativeTexture::Bind( GLenum target, TextureUnit textureunit ) { // Bind the texture id mContext.ActiveTexture( textureunit ); - mContext.Bind2dTexture(mId); + int textureTarget = GL_TEXTURE_2D; + NativeImageInterface::Extension* extension = mNativeImage->GetExtension(); + if( extension ) + { + textureTarget = extension->GetEglImageTextureTarget(); + } + + mContext.BindTexture( textureTarget, mId ); mNativeImage->PrepareTexture(); } @@ -92,7 +100,15 @@ bool NativeTexture::CreateGlTexture() { mContext.GenTextures( 1, &mId ); mContext.ActiveTexture( TEXTURE_UNIT_UPLOAD ); // bind in unused unit so rebind works the first time - mContext.Bind2dTexture( mId ); + + int textureTarget = GL_TEXTURE_2D; + NativeImageInterface::Extension* extension = mNativeImage->GetExtension(); + if( extension ) + { + textureTarget = extension->GetEglImageTextureTarget(); + } + + mContext.BindTexture( textureTarget, mId ); mContext.PixelStorei( GL_UNPACK_ALIGNMENT, 1 ); // We always use tightly packed data -- 2.7.4