aboutsummaryrefslogtreecommitdiffstats
path: root/emulator/opengl/tests/ut_renderer/RendererSurface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'emulator/opengl/tests/ut_renderer/RendererSurface.cpp')
-rw-r--r--emulator/opengl/tests/ut_renderer/RendererSurface.cpp108
1 files changed, 108 insertions, 0 deletions
diff --git a/emulator/opengl/tests/ut_renderer/RendererSurface.cpp b/emulator/opengl/tests/ut_renderer/RendererSurface.cpp
new file mode 100644
index 0000000..7d8d8c6
--- /dev/null
+++ b/emulator/opengl/tests/ut_renderer/RendererSurface.cpp
@@ -0,0 +1,108 @@
+/*
+* 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 "RendererSurface.h"
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "NativeWindowing.h"
+
+#define MAX_ATTRIB 100
+
+
+EGLConfig RendererSurface::getEglConfig(EGLDisplay eglDisplay, SurfaceConfig config)
+{
+ EGLConfig eglConfig;
+ int nConfigs;
+
+ EGLint attrib[MAX_ATTRIB];
+ int pos =0;
+
+ attrib[pos++] = EGL_SURFACE_TYPE; attrib[pos++] = EGL_WINDOW_BIT;
+ if (config & CONFIG_DEPTH) {attrib[pos++] = EGL_DEPTH_SIZE; attrib[pos++] = 1;}
+ attrib[pos++] = EGL_NONE;
+
+ if (!eglChooseConfig(eglDisplay, attrib, &eglConfig, 1, &nConfigs)) {
+ return 0;
+ }
+ /***/
+ int ibuf;
+ if (eglGetConfigAttrib(eglDisplay, eglConfig, EGL_BUFFER_SIZE, &ibuf)) {
+ fprintf(stderr, "EGL COLOR Buffer size: %d\n", ibuf);
+ } else {
+ fprintf(stderr, "eglGetConfigAttrib error: %d\n", eglGetError());
+ }
+ if (eglGetConfigAttrib(eglDisplay, eglConfig, EGL_DEPTH_SIZE, &ibuf)) {
+ fprintf(stderr, "EGL DEPTH Buffer size: %d\n", ibuf);
+ } else {
+ fprintf(stderr, "eglGetConfigAttrib error: %d\n", eglGetError());
+ }
+ /***/
+
+
+ if (nConfigs != 1) {
+ return 0;
+ }
+ return eglConfig;
+}
+
+RendererSurface * RendererSurface::create(EGLDisplay eglDisplay, SurfaceConfig config, NativeWindowing *nw)
+{
+ int width = 0, height = 0;
+ const char* env;
+
+ env = getenv("ANDROID_WINDOW_WIDTH");
+ if (env && *env) {
+ width = atoi(env);
+ }
+ env = getenv("ANDROID_WINDOW_HEIGHT");
+ if (env && *env) {
+ height = atoi(env);
+ }
+ if (width <= 160)
+ width = DEFAULT_WIDTH;
+ if (height <= 160)
+ height = DEFAULT_HEIGHT;
+
+ printf("%s: Using width=%d height=%d\n", __FUNCTION__, width, height);
+
+ EGLConfig eglConfig = getEglConfig(eglDisplay, config);
+ if (eglConfig == 0) {
+ return NULL;
+ }
+
+ NativeWindowType window = nw->createNativeWindow(nw->getNativeDisplay(), width, height);
+ if (window == 0) {
+ return NULL;
+ }
+
+ EGLSurface eglSurface = eglCreateWindowSurface(eglDisplay,
+ eglConfig,
+ window, NULL);
+
+ if (eglGetError() != EGL_SUCCESS) {
+ return NULL;
+ }
+
+ return new RendererSurface(eglDisplay, window, eglSurface, eglConfig);
+}
+
+int RendererSurface::destroy(NativeWindowing *nw)
+{
+ eglDestroySurface(m_eglDisplay, m_eglSurface);
+ nw->destroyNativeWindow(nw->getNativeDisplay(), m_window);
+ return 1;
+}
+