egl_object.cpp revision 5b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09
1518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian/*
2518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian ** Copyright 2007, The Android Open Source Project
3518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian **
4518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian ** Licensed under the Apache License, Version 2.0 (the "License");
5518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian ** you may not use this file except in compliance with the License.
6518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian ** You may obtain a copy of the License at
7518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian **
8518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian **     http://www.apache.org/licenses/LICENSE-2.0
9518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian **
10518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian ** Unless required by applicable law or agreed to in writing, software
11518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian ** distributed under the License is distributed on an "AS IS" BASIS,
12518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian ** See the License for the specific language governing permissions and
14518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian ** limitations under the License.
15518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian */
16518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
17518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian#include <ctype.h>
18518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian#include <stdint.h>
19518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian#include <stdlib.h>
20518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
21518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian#include <EGL/egl.h>
22518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian#include <EGL/eglext.h>
23518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian#include <GLES/gl.h>
24518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian#include <GLES/glext.h>
25518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
26518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian#include <utils/threads.h>
27518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
28518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian#include "egl_object.h"
29518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
30518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian// ----------------------------------------------------------------------------
31518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopiannamespace android {
32518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian// ----------------------------------------------------------------------------
33518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
34518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopianegl_object_t::egl_object_t(egl_display_t* disp) :
355b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian    display(disp), count(1) {
365b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian    // NOTE: this does an implicit incRef
37518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian    display->addObject(this);
38518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian}
39518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
405b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopianegl_object_t::~egl_object_t() {
415b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian}
425b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian
435b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopianvoid egl_object_t::terminate() {
445b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian    // this marks the object as "terminated"
455b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian    display->removeObject(this);
465b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian    if (decRef() == 1) {
475b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian        // shouldn't happen because this is called from LocalRef
485b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian        LOGE("egl_object_t::terminate() removed the last reference!");
495b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian    }
50518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian}
51518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
525b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopianvoid egl_object_t::destroy() {
535b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian    if (decRef() == 1) {
545b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian        delete this;
555b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian    }
565b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian}
575b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian
585b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopianbool egl_object_t::get() {
595b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian    // used by LocalRef, this does an incRef() atomically with
605b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian    // checking that the object is valid.
615b287a6ea8dfac7ab3e03ae1e98f9e2214cbae09Mathias Agopian    return display->getObject(this);
62518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian}
63518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian
64518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian// ----------------------------------------------------------------------------
65518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian}; // namespace android
66518ec112f468eb67bf681b3eec896d7bfb4ff98dMathias Agopian// ----------------------------------------------------------------------------
67