BufferObjectManager.h revision edbf3b6af777b721cd2a1ef461947e51e88241e1
1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** Copyright 2006, The Android Open Source Project 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** Licensed under the Apache License, Version 2.0 (the "License"); 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** you may not use this file except in compliance with the License. 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** You may obtain a copy of the License at 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** http://www.apache.org/licenses/LICENSE-2.0 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** Unless required by applicable law or agreed to in writing, software 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** distributed under the License is distributed on an "AS IS" BASIS, 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** See the License for the specific language governing permissions and 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ** limitations under the License. 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_OPENGLES_BUFFER_OBJECT_MANAGER_H 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_OPENGLES_BUFFER_OBJECT_MANAGER_H 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h> 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stddef.h> 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <sys/types.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Atomic.h> 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/RefBase.h> 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/KeyedVector.h> 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h> 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <GLES/gl.h> 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "Tokenizer.h" 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include "TokenManager.h" 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace gl { 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstruct buffer_t { 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GLsizeiptr size; 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project GLenum usage; 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint8_t* data; 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t name; 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass EGLBufferObjectManager : public TokenManager 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project EGLBufferObjectManager(); 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project ~EGLBufferObjectManager(); 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project // protocol for sp<> 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline void incStrong(const void* id) const; 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline void decStrong(const void* id) const; 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project typedef void weakref_type; 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project gl::buffer_t const* bind(GLuint buffer); 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int allocateStore(gl::buffer_t* bo, GLsizeiptr size, GLenum usage); 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project void deleteBuffers(GLsizei n, const GLuint* buffers); 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable volatile int32_t mCount; 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mutable Mutex mLock; 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project KeyedVector<GLuint, gl::buffer_t*> mBuffers; 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid EGLBufferObjectManager::incStrong(const void* id) const { 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project android_atomic_inc(&mCount); 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectvoid EGLBufferObjectManager::decStrong(const void* id) const { 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project if (android_atomic_dec(&mCount) == 1) { 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project delete this; 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project } 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------- 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_OPENGLES_BUFFER_OBJECT_MANAGER_H 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 86