1e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik/*
2e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik * Copyright (C) 2014 The Android Open Source Project
3e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik *
4e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik * Licensed under the Apache License, Version 2.0 (the "License");
5e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik * you may not use this file except in compliance with the License.
6e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik * You may obtain a copy of the License at
7e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik *
8e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik *      http://www.apache.org/licenses/LICENSE-2.0
9e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik *
10e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik * Unless required by applicable law or agreed to in writing, software
11e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik * distributed under the License is distributed on an "AS IS" BASIS,
12e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik * See the License for the specific language governing permissions and
14e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik * limitations under the License.
15e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik */
16e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik#ifndef GLUTILS_H
17e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik#define GLUTILS_H
18e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik
192de7771740ee08fcaff638ec6b2e460bb72fff04John Reck#include "Debug.h"
202de7771740ee08fcaff638ec6b2e460bb72fff04John Reck
2152eb4e01a49fe2e94555c000de38bbcbbb13401bMark Salyzyn#include <log/log.h>
229372ac3621848085e77b867f220c0b5ffce4010dJohn Reck
23e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craiknamespace android {
24e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craiknamespace uirenderer {
25e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik
26975591a7af883d866d86ab819e164c6004694744John Reck
272de7771740ee08fcaff638ec6b2e460bb72fff04John Reck#if DEBUG_OPENGL
28975591a7af883d866d86ab819e164c6004694744John Reck#define GL_CHECKPOINT(LEVEL) \
29975591a7af883d866d86ab819e164c6004694744John Reck    do { if (DEBUG_OPENGL >= DEBUG_LEVEL_##LEVEL) {\
30694d499662838123f474f41b31dea84ec5d563f0sergeyv    LOG_ALWAYS_FATAL_IF(android::uirenderer::GLUtils::dumpGLErrors(),\
31975591a7af883d866d86ab819e164c6004694744John Reck            "GL errors! %s:%d", __FILE__, __LINE__);\
32975591a7af883d866d86ab819e164c6004694744John Reck    } } while (0)
339372ac3621848085e77b867f220c0b5ffce4010dJohn Reck#else
34975591a7af883d866d86ab819e164c6004694744John Reck#define GL_CHECKPOINT(LEVEL)
359372ac3621848085e77b867f220c0b5ffce4010dJohn Reck#endif
369372ac3621848085e77b867f220c0b5ffce4010dJohn Reck
37e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craikclass GLUtils {
38e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craikpublic:
39e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik    /**
405686bae28926dae6e4b4d380d75d18e77335c9d3Chris Craik     * Print out any GL errors with ALOGE, returns true if any errors were found.
41975591a7af883d866d86ab819e164c6004694744John Reck     * You probably want to use GL_CHECKPOINT(LEVEL) instead of calling this directly
42e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik     */
435686bae28926dae6e4b4d380d75d18e77335c9d3Chris Craik    static bool dumpGLErrors();
44e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik
45e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik}; // class GLUtils
46e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik
47e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik} /* namespace uirenderer */
48e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik} /* namespace android */
49e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik
50e4aa95e3627226bcb0d8cc3e42dca6e4df8f421cChris Craik#endif /* GLUTILS_H */
51