Merge "Add ApplyCustomFragmentPrefix" into devel/master
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / dali-toolkit-test-utils / test-native-image.h
1 #ifndef TEST_NATIVE_IMAGE_H
2 #define TEST_NATIVE_IMAGE_H
3
4 /*
5  * Copyright (c) 2021 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // INTERNAL INCLUDES
22 #include <dali/public-api/images/native-image-interface.h>
23
24 #include <dali/integration-api/gl-defines.h>
25
26 namespace Dali
27 {
28 class TestNativeImage;
29 typedef IntrusivePtr<TestNativeImage> TestNativeImagePointer;
30
31 class DALI_CORE_API TestNativeImage : public Dali::NativeImageInterface
32 {
33 public:
34   static TestNativeImagePointer New(uint32_t width, uint32_t height);
35
36   inline void SetGlExtensionCreateResult(bool result)
37   {
38     createResult = result;
39   }
40   inline virtual bool CreateResource()
41   {
42     ++mExtensionCreateCalls;
43     mCallStack.PushCall("CreateResource", "");
44     return createResult;
45   };
46   inline virtual void DestroyResource()
47   {
48     ++mExtensionDestroyCalls;
49     mCallStack.PushCall("DestroyResource", "");
50   };
51   inline virtual GLenum TargetTexture()
52   {
53     ++mTargetTextureCalls;
54     mCallStack.PushCall("TargetTexture", "");
55     return mTargetTextureError--;
56   };
57   inline virtual void PrepareTexture()
58   {
59     mCallStack.PushCall("PrepareTexture", "");
60   };
61   inline virtual uint32_t GetWidth() const
62   {
63     mCallStack.PushCall("GetWidth", "");
64     return mWidth;
65   };
66   inline virtual uint32_t GetHeight() const
67   {
68     mCallStack.PushCall("GetHeight", "");
69     return mHeight;
70   };
71   inline virtual bool RequiresBlending() const
72   {
73     mCallStack.PushCall("RequiresBlending", "");
74     return true;
75   };
76   inline virtual int GetTextureTarget() const
77   {
78     mCallStack.PushCall("GetTextureTarget", "");
79     return GL_TEXTURE_EXTERNAL_OES;
80   };
81   inline virtual const char* GetCustomFragmentPrefix() const
82   {
83     mCallStack.PushCall("GetCustomFragmentPrefix", "");
84     return "#extension GL_OES_EGL_image_external:require\n";
85   };
86   inline virtual bool ApplyNativeFragmentShader(std::string& shader)
87   {
88     mCallStack.PushCall("ApplyNativeFragmentShader", "");
89     shader = "#extension GL_OES_EGL_image_external:require\n" + shader;
90
91     //Get custom sampler type name
92     const char* customSamplerTypename = GetCustomSamplerTypename();
93     if(customSamplerTypename)
94     {
95       size_t samplerPosition = shader.find("sampler2D");
96       if(samplerPosition != std::string::npos)
97       {
98         shader.replace(samplerPosition, strlen("sampler2D"), customSamplerTypename);
99       }
100     }
101     return true;
102   };
103   inline const char* GetCustomSamplerTypename() const override
104   {
105     mCallStack.PushCall("GetCustomSamplerTypename", "");
106     return "samplerExternalOES";
107   };
108
109   inline Any GetNativeImageHandle() const override
110   {
111     return nullptr;
112   };
113   inline bool SourceChanged() const override
114   {
115     return false;
116   };
117
118   inline virtual Dali::NativeImageInterface::Extension* GetExtension()
119   {
120     return nullptr;
121   }
122
123 private:
124   TestNativeImage(uint32_t width, uint32_t height);
125   virtual ~TestNativeImage();
126
127   uint32_t mWidth;
128   uint32_t mHeight;
129
130 public:
131   int32_t                mExtensionCreateCalls;
132   int32_t                mExtensionDestroyCalls;
133   int32_t                mTargetTextureCalls;
134   uint32_t               mTargetTextureError{0u};
135   bool                   createResult;
136   mutable TraceCallStack mCallStack;
137 };
138
139 } // namespace Dali
140
141 #endif // TEST_NATIVE_IMAGE_H