[3.0] Modify texture bind for OES_EGL_image_external 35/87335/4 accepted/tizen/3.0/common/20161114.110118 accepted/tizen/3.0/ivi/20161028.133842 accepted/tizen/3.0/ivi/20161104.103405 accepted/tizen/3.0/mobile/20161028.132939 accepted/tizen/3.0/mobile/20161104.103208 accepted/tizen/3.0/tv/20161028.133301 accepted/tizen/3.0/tv/20161104.103307 accepted/tizen/3.0/wearable/20161028.133603 accepted/tizen/3.0/wearable/20161104.103335 accepted/tizen/common/20161014.103239 accepted/tizen/ivi/20161017.013539 accepted/tizen/mobile/20161017.013339 accepted/tizen/tv/20161017.013427 accepted/tizen/wearable/20161017.013504 submit/tizen/20161014.094936 submit/tizen_3.0/20161028.062323 submit/tizen_3.0/20161028.082423 submit/tizen_3.0/20161102.074150 submit/tizen_3.0_common/20161104.104000
authortaeyoon <taeyoon0.lee@samsung.com>
Wed, 7 Sep 2016 10:53:03 +0000 (19:53 +0900)
committertaeyoon <taeyoon0.lee@samsung.com>
Thu, 29 Sep 2016 15:23:04 +0000 (00:23 +0900)
  Modify BindTexture part for native image source with OES_EGL_image_external

Change-Id: I4c4063d98293f833739870a7c8c42d0ab70d409c

automated-tests/src/dali/dali-test-suite-utils/test-native-image.h
dali/devel-api/images/native-image-interface-extension.h
dali/internal/render/gl-resources/context.h
dali/internal/render/gl-resources/native-texture.cpp

index 7724717..3a6557f 100644 (file)
@@ -21,6 +21,7 @@
 // INTERNAL INCLUDES
 #include <dali/public-api/images/native-image-interface.h>
 #include <dali/devel-api/images/native-image-interface-extension.h>
+#include <dali/integration-api/gl-defines.h>
 
 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
index ca19c14..dfc60d4 100644 (file)
@@ -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
index c2f11ac..136f09b 100644 (file)
@@ -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 )
index 8110880..11a62ce 100644 (file)
@@ -23,6 +23,7 @@
 #include <dali/internal/render/gl-resources/context.h>
 #include <dali/internal/render/gl-resources/texture-units.h>
 #include <dali/internal/render/gl-resources/gl-texture.h>
+#include <dali/devel-api/images/native-image-interface-extension.h>
 
 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