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