aboutsummaryrefslogtreecommitdiffstats
path: root/emulator/opengl/host/libs/libOpenglRender/RenderContext.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'emulator/opengl/host/libs/libOpenglRender/RenderContext.cpp')
-rw-r--r--emulator/opengl/host/libs/libOpenglRender/RenderContext.cpp76
1 files changed, 76 insertions, 0 deletions
diff --git a/emulator/opengl/host/libs/libOpenglRender/RenderContext.cpp b/emulator/opengl/host/libs/libOpenglRender/RenderContext.cpp
new file mode 100644
index 0000000..f5cbd67
--- /dev/null
+++ b/emulator/opengl/host/libs/libOpenglRender/RenderContext.cpp
@@ -0,0 +1,76 @@
+/*
+* 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.
+*/
+#include "RenderContext.h"
+#include "FBConfig.h"
+#include "FrameBuffer.h"
+#include "EGLDispatch.h"
+#include "GLDispatch.h"
+
+RenderContext *RenderContext::create(int p_config,
+ RenderContextPtr p_shareContext,
+ bool p_isGL2)
+{
+ const FBConfig *fbconf = FBConfig::get(p_config);
+ if (!fbconf) {
+ return NULL;
+ }
+
+ RenderContext *c = new RenderContext();
+ if (!c) {
+ return NULL;
+ }
+
+ EGLContext share = EGL_NO_CONTEXT;
+ if (p_shareContext.Ptr() != NULL) {
+ share = p_shareContext->getEGLContext();
+ }
+
+ GLint glContextAttribs[] = {
+ EGL_CONTEXT_CLIENT_VERSION, 1,
+ EGL_NONE
+ };
+
+ if (p_isGL2) {
+ glContextAttribs[1] = 2;
+ c->m_isGL2 = true;
+ }
+
+ c->m_ctx = s_egl.eglCreateContext(FrameBuffer::getFB()->getDisplay(),
+ fbconf->getEGLConfig(), share,
+ glContextAttribs);
+
+ if (c->m_ctx == EGL_NO_CONTEXT) {
+ delete c;
+ return NULL;
+ }
+
+ c->m_config = p_config;
+ return c;
+}
+
+RenderContext::RenderContext() :
+ m_ctx(EGL_NO_CONTEXT),
+ m_config(0),
+ m_isGL2(false)
+{
+}
+
+RenderContext::~RenderContext()
+{
+ if (m_ctx != EGL_NO_CONTEXT) {
+ s_egl.eglDestroyContext(FrameBuffer::getFB()->getDisplay(), m_ctx);
+ }
+}