This is needed to support the rare, but still legal scenario, when glDrawElemets is used with some index array data is stored in VBO's while the actual attributes (vertices) data is in immediate mode. When in immediate mode, we need to process the incodes, in order to know which vertex data to send, which was impossible without the caching. This commit introduces a new class GLSharedGroup, which will hold all data that can be shared by shared contexts (buffers are such data). This also makes the "Jet Cars Stunts" app work properly. Change-Id: Ic937080dae461bc8cdf4d10cf37066a6e847f464
63 lines
1.7 KiB
C++
63 lines
1.7 KiB
C++
/*
|
|
* Copyright (C) 2011 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
#ifndef _GL_SHARED_GROUP_H_
|
|
#define _GL_SHARED_GROUP_H_
|
|
|
|
#define GL_API
|
|
#ifndef ANDROID
|
|
#define GL_APIENTRY
|
|
#define GL_APIENTRYP
|
|
#endif
|
|
|
|
#include <GLES/gl.h>
|
|
#include <GLES/glext.h>
|
|
#include <GLES2/gl2.h>
|
|
#include <GLES2/gl2ext.h>
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "ErrorLog.h"
|
|
#include <utils/KeyedVector.h>
|
|
#include <utils/threads.h>
|
|
#include "FixedBuffer.h"
|
|
#include "SmartPtr.h"
|
|
|
|
struct BufferData {
|
|
BufferData();
|
|
BufferData(GLsizeiptr size, void * data);
|
|
GLsizeiptr m_size;
|
|
FixedBuffer m_fixedBuffer;
|
|
};
|
|
|
|
|
|
class GLSharedGroup {
|
|
private:
|
|
android::DefaultKeyedVector<GLuint, BufferData*> m_buffers;
|
|
mutable android::Mutex m_lock;
|
|
public:
|
|
GLSharedGroup();
|
|
~GLSharedGroup();
|
|
BufferData * getBufferData(GLuint bufferId);
|
|
void addBufferData(GLuint bufferId, GLsizeiptr size, void * data);
|
|
void updateBufferData(GLuint bufferId, GLsizeiptr size, void * data);
|
|
GLenum subUpdateBufferData(GLuint bufferId, GLintptr offset, GLsizeiptr size, void * data);
|
|
void deleteBufferData(GLuint);
|
|
};
|
|
|
|
typedef SmartPtr<GLSharedGroup> GLSharedGroupPtr;
|
|
|
|
#endif //_GL_SHARED_GROUP_H_
|