Extensions.h revision bd0e6aa0ff0bd8b376772c3e23513a6021bdda87
1bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy/* 2bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * Copyright (C) 2010 The Android Open Source Project 3bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * 4bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 5bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * you may not use this file except in compliance with the License. 6bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * You may obtain a copy of the License at 7bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * 8bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 9bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * 10bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * Unless required by applicable law or agreed to in writing, software 11bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 12bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * See the License for the specific language governing permissions and 14bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy * limitations under the License. 15bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy */ 16bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 17bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy#define LOG_TAG "OpenGLRenderer" 18bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 19bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy#ifndef ANDROID_UI_EXTENSIONS_H 20bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy#define ANDROID_UI_EXTENSIONS_H 21bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 22bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy#include <utils/SortedVector.h> 23bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy#include <utils/String8.h> 24bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 25bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy#include <GLES2/gl2.h> 26bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy#include <GLES2/gl2ext.h> 27bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 28bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guynamespace android { 29bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guynamespace uirenderer { 30bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 31bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guyclass Extensions { 32bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guypublic: 33bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy Extensions() { 34bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy const char* buffer = (const char*) glGetString(GL_EXTENSIONS); 35bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy const char* current = buffer; 36bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy const char* head = current; 37bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy do { 38bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy head = strchr(current, ' '); 39bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy String8 s(current, head ? head - current : strlen(current)); 40bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy if (s.length()) { 41bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy mExtensionList.add(s); 42bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy } 43bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy current = head + 1; 44bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy } while (head); 45bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 46bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy mHasNPot = hasExtension("GL_OES_texture_npot"); 47bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy } 48bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 49bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy inline bool hasNPot() const { return mHasNPot; } 50bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 51bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy bool hasExtension(const char* extension) const { 52bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy const String8 s(extension); 53bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy return mExtensionList.indexOf(s) >= 0; 54bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy } 55bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 56bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guyprivate: 57bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy SortedVector<String8> mExtensionList; 58bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 59bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy bool mHasNPot; 60bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy}; // class Extensions 61bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 62bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy}; // namespace uirenderer 63bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy}; // namespace android 64bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy 65bd0e6aa0ff0bd8b376772c3e23513a6021bdda87Romain Guy#endif // ANDROID_UI_EXTENSIONS_H 66