blob: 659a618cc5ef376f5746950028de568808121ee7 [file] [log] [blame]
Jarkko Poyry3c827362014-09-02 11:48:52 +03001#ifndef _GLUCONTEXTINFO_HPP
2#define _GLUCONTEXTINFO_HPP
3/*-------------------------------------------------------------------------
4 * drawElements Quality Program OpenGL ES Utilities
5 * ------------------------------------------------
6 *
7 * Copyright 2014 The Android Open Source Project
8 *
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
12 *
13 * http://www.apache.org/licenses/LICENSE-2.0
14 *
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 *
21 *//*!
22 * \file
23 * \brief Context Info Class.
24 *//*--------------------------------------------------------------------*/
25
26#include "gluDefs.hpp"
27
28#include <vector>
29#include <string>
30#include <set>
31
32namespace glu
33{
34
35class RenderContext;
36
37template <typename T, class ComputeValue>
38class CachedValue
39{
40public:
41 CachedValue (ComputeValue compute = ComputeValue(), const T& defaultValue = T())
42 : m_compute (compute)
43 , m_value (defaultValue)
44 , m_isComputed (false)
45 {
46 }
47
48 const T& getValue (const RenderContext& context) const
49 {
50 if (!m_isComputed)
51 {
52 m_value = m_compute(context);
53 m_isComputed = true;
54 }
55 return m_value;
56 }
57
58private:
59 ComputeValue m_compute;
60 mutable T m_value;
61 mutable bool m_isComputed;
62};
63
64class GetExtensions
65{
66public:
67 std::vector<std::string> operator() (const RenderContext& context) const;
68};
69
70class GetCompressedTextureFormats
71{
72public:
73 std::set<int> operator() (const RenderContext& context) const;
74};
75
76typedef CachedValue<std::vector<std::string>, GetExtensions> ExtensionList;
77typedef CachedValue<std::set<int>, GetCompressedTextureFormats> CompressedTextureFormats;
78
79/*--------------------------------------------------------------------*//*!
80 * \brief Context information & limit query.
81 *//*--------------------------------------------------------------------*/
82class ContextInfo
83{
84public:
85 virtual ~ContextInfo (void);
86
87 virtual int getInt (int param) const;
88 virtual bool getBool (int param) const;
89 virtual const char* getString (int param) const;
90
91 virtual bool isVertexUniformLoopSupported (void) const { return true; }
92 virtual bool isVertexDynamicLoopSupported (void) const { return true; }
93 virtual bool isFragmentHighPrecisionSupported (void) const { return true; }
94 virtual bool isFragmentUniformLoopSupported (void) const { return true; }
95 virtual bool isFragmentDynamicLoopSupported (void) const { return true; }
96
97 virtual bool isCompressedTextureFormatSupported (int format) const;
98
99 const std::vector<std::string>& getExtensions (void) const { return m_extensions.getValue(m_context); }
100 bool isExtensionSupported (const char* extName) const;
101
102 static ContextInfo* create (const RenderContext& context);
103
104protected:
105 ContextInfo (const RenderContext& context);
106
107 const RenderContext& m_context;
108
109private:
110 ContextInfo (const ContextInfo& other);
111 ContextInfo& operator= (const ContextInfo& other);
112
113 ExtensionList m_extensions;
114 CompressedTextureFormats m_compressedTextureFormats;
115};
116
117} // glu
118
119#endif // _GLUCONTEXTINFO_HPP