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