• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (C) 2011 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 #include "EglContext.h"
17 #include "EglDisplay.h"
18 #include "EglGlobalInfo.h"
19 #include "EglOsApi.h"
20 
21 unsigned int EglContext::s_nextContextHndl = 0;
22 
23 extern EglGlobalInfo* g_eglInfo; // defined in EglImp.cpp
24 
usingSurface(SurfacePtr surface)25 bool EglContext::usingSurface(SurfacePtr surface) {
26   return surface.Ptr() == m_read.Ptr() || surface.Ptr() == m_draw.Ptr();
27 }
28 
EglContext(EglDisplay * dpy,EGLNativeContextType context,ContextPtr shared_context,EglConfig * config,GLEScontext * glesCtx,GLESVersion ver,ObjectNameManager * mngr)29 EglContext::EglContext(EglDisplay *dpy, EGLNativeContextType context,ContextPtr shared_context,
30             EglConfig* config,GLEScontext* glesCtx,GLESVersion ver,ObjectNameManager* mngr):
31 m_dpy(dpy),
32 m_native(context),
33 m_config(config),
34 m_glesContext(glesCtx),
35 m_read(NULL),
36 m_draw(NULL),
37 m_version(ver),
38 m_mngr(mngr)
39 {
40     m_shareGroup = shared_context.Ptr()?
41                    mngr->attachShareGroup(context,shared_context->nativeType()):
42                    mngr->createShareGroup(context);
43     m_hndl = ++s_nextContextHndl;
44 }
45 
~EglContext()46 EglContext::~EglContext()
47 {
48 
49     //
50     // remove the context in the underlying OS layer
51     //
52     EglOS::destroyContext(m_dpy->nativeType(),m_native);
53 
54     //
55     // call the client-api to remove the GLES context
56     //
57     g_eglInfo->getIface(version())->deleteGLESContext(m_glesContext);
58 
59     if (m_mngr)
60     {
61         m_mngr->deleteShareGroup(m_native);
62     }
63 }
64 
setSurfaces(SurfacePtr read,SurfacePtr draw)65 void EglContext::setSurfaces(SurfacePtr read,SurfacePtr draw)
66 {
67     m_read = read;
68     m_draw = draw;
69 }
70 
getAttrib(EGLint attrib,EGLint * value)71 bool EglContext::getAttrib(EGLint attrib,EGLint* value) {
72     switch(attrib) {
73     case EGL_CONFIG_ID:
74         *value = m_config->id();
75         break;
76     default:
77         return false;
78     }
79     return true;
80 }
81 
attachImage(unsigned int imageId,ImagePtr img)82 bool EglContext::attachImage(unsigned int imageId,ImagePtr img){
83    if(m_attachedImages.find(imageId) == m_attachedImages.end()){
84        m_attachedImages[imageId] = img;
85        return true;
86    }
87    return false;
88 }
89 
detachImage(unsigned int imageId)90 void EglContext::detachImage(unsigned int imageId){
91     m_attachedImages.erase(imageId);
92 }
93 
94