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