Merge "Clean up the code to build successfully on macOS" into devel/master
[platform/core/uifw/dali-core.git] / dali / internal / render / shaders / program-cache.h
1 #ifndef DALI_INTERNAL_PROGRAM_CACHE_H
2 #define DALI_INTERNAL_PROGRAM_CACHE_H
3
4 /*
5  * Copyright (c) 2019 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/integration-api/gl-abstraction.h> // for GLenum
23 #include <dali/internal/common/shader-data.h>
24
25 namespace Dali
26 {
27
28 namespace Internal
29 {
30
31 class Program;
32
33 /**
34  * This class is interface for caching Program objects
35  */
36 class ProgramCache
37 {
38 public:
39
40   /**
41    * Constructor
42    */
43   ProgramCache() = default;
44
45   /**
46    * Destructor, virtual as this is an interface
47    */
48   virtual ~ProgramCache() = default;
49
50 public: // API
51
52   /**
53    * @return GlAbstraction
54    */
55   virtual Integration::GlAbstraction& GetGlAbstraction() = 0;
56
57   /**
58    * Get the program from cache with hash
59    * @param shaderHash to use
60    * @return program
61    */
62   virtual Program* GetProgram( size_t shaderHash ) = 0;
63
64   /**
65    * Add a program to cache
66    * @param shaderHash of the program
67    * @param program to add
68    */
69   virtual void AddProgram( size_t shaderHash, Program* program ) = 0;
70
71   /**
72    * Get currently bound program
73    * @return program that is currently used
74    */
75   virtual Program* GetCurrentProgram() = 0;
76
77   /**
78    * Set the currently bound program
79    * @param program that is used
80    */
81   virtual void SetCurrentProgram( Program* program ) = 0;
82
83   /**
84    * @return true if program binaries are supported
85    */
86   virtual bool IsBinarySupported() = 0;
87
88   /**
89    * @return the binary format to use
90    */
91   virtual GLenum ProgramBinaryFormat() = 0;
92
93   /**
94    * @param programData to store/save
95    */
96   virtual void StoreBinary( Internal::ShaderDataPtr programData ) = 0;
97
98 private: // not implemented as non-copyable
99
100   ProgramCache( const ProgramCache& rhs );
101   ProgramCache& operator=( const ProgramCache& rhs );
102
103 };
104
105
106 } // namespace Internal
107
108 } // namespace Dali
109
110 #endif // DALI_INTERNAL_PROGRAM_CACHE_H
111