minor code clean-up
This commit is contained in:
@@ -42,28 +42,6 @@
|
||||
|
||||
using namespace android;
|
||||
|
||||
static __attribute__((noinline))
|
||||
const char *egl_strerror(EGLint err)
|
||||
{
|
||||
switch (err){
|
||||
case EGL_SUCCESS: return "EGL_SUCCESS";
|
||||
case EGL_NOT_INITIALIZED: return "EGL_NOT_INITIALIZED";
|
||||
case EGL_BAD_ACCESS: return "EGL_BAD_ACCESS";
|
||||
case EGL_BAD_ALLOC: return "EGL_BAD_ALLOC";
|
||||
case EGL_BAD_ATTRIBUTE: return "EGL_BAD_ATTRIBUTE";
|
||||
case EGL_BAD_CONFIG: return "EGL_BAD_CONFIG";
|
||||
case EGL_BAD_CONTEXT: return "EGL_BAD_CONTEXT";
|
||||
case EGL_BAD_CURRENT_SURFACE: return "EGL_BAD_CURRENT_SURFACE";
|
||||
case EGL_BAD_DISPLAY: return "EGL_BAD_DISPLAY";
|
||||
case EGL_BAD_MATCH: return "EGL_BAD_MATCH";
|
||||
case EGL_BAD_NATIVE_PIXMAP: return "EGL_BAD_NATIVE_PIXMAP";
|
||||
case EGL_BAD_NATIVE_WINDOW: return "EGL_BAD_NATIVE_WINDOW";
|
||||
case EGL_BAD_PARAMETER: return "EGL_BAD_PARAMETER";
|
||||
case EGL_BAD_SURFACE: return "EGL_BAD_SURFACE";
|
||||
case EGL_CONTEXT_LOST: return "EGL_CONTEXT_LOST";
|
||||
default: return "UNKNOWN";
|
||||
}
|
||||
}
|
||||
|
||||
static __attribute__((noinline))
|
||||
void checkGLErrors()
|
||||
@@ -80,7 +58,7 @@ void checkEGLErrors(const char* token)
|
||||
// GLESonGL seems to be returning 0 when there is no errors?
|
||||
if (error && error != EGL_SUCCESS)
|
||||
LOGE("%s error 0x%04x (%s)",
|
||||
token, int(error), egl_strerror(error));
|
||||
token, int(error), EGLUtils::strerror(error));
|
||||
}
|
||||
|
||||
|
||||
@@ -112,28 +90,22 @@ PixelFormat DisplayHardware::getFormat() const { return mFormat; }
|
||||
|
||||
void DisplayHardware::init(uint32_t dpy)
|
||||
{
|
||||
hw_module_t const* module;
|
||||
|
||||
mNativeWindow = new FramebufferNativeWindow();
|
||||
framebuffer_device_t const * fbDev = mNativeWindow->getDevice();
|
||||
|
||||
mOverlayEngine = NULL;
|
||||
hw_module_t const* module;
|
||||
if (hw_get_module(OVERLAY_HARDWARE_MODULE_ID, &module) == 0) {
|
||||
overlay_control_open(module, &mOverlayEngine);
|
||||
}
|
||||
|
||||
framebuffer_device_t const * fbDev = mNativeWindow->getDevice();
|
||||
|
||||
PixelFormatInfo fbFormatInfo;
|
||||
getPixelFormatInfo(PixelFormat(fbDev->format), &fbFormatInfo);
|
||||
|
||||
// initialize EGL
|
||||
const EGLint attribs[] = {
|
||||
EGL_BUFFER_SIZE, fbFormatInfo.bitsPerPixel,
|
||||
EGL_DEPTH_SIZE, 0,
|
||||
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
|
||||
EGL_NONE
|
||||
};
|
||||
EGLint w, h, dummy;
|
||||
EGLint numConfigs=0, n=0;
|
||||
EGLint numConfigs=0;
|
||||
EGLSurface surface;
|
||||
EGLContext context;
|
||||
mFlags = 0;
|
||||
@@ -146,10 +118,16 @@ void DisplayHardware::init(uint32_t dpy)
|
||||
eglGetConfigs(display, NULL, 0, &numConfigs);
|
||||
|
||||
EGLConfig config;
|
||||
status_t err = EGLUtils::selectConfigForPixelFormat(
|
||||
display, attribs, fbDev->format, &config);
|
||||
status_t err = EGLUtils::selectConfigForNativeWindow(
|
||||
display, attribs, mNativeWindow.get(), &config);
|
||||
LOGE_IF(err, "couldn't find an EGLConfig matching the screen format");
|
||||
|
||||
EGLint r,g,b,a;
|
||||
eglGetConfigAttrib(display, config, EGL_RED_SIZE, &r);
|
||||
eglGetConfigAttrib(display, config, EGL_GREEN_SIZE, &g);
|
||||
eglGetConfigAttrib(display, config, EGL_BLUE_SIZE, &b);
|
||||
eglGetConfigAttrib(display, config, EGL_ALPHA_SIZE, &a);
|
||||
|
||||
/*
|
||||
* Gather EGL extensions
|
||||
*/
|
||||
@@ -163,7 +141,8 @@ void DisplayHardware::init(uint32_t dpy)
|
||||
LOGI("version : %s", eglQueryString(display, EGL_VERSION));
|
||||
LOGI("extensions: %s", egl_extensions);
|
||||
LOGI("Client API: %s", eglQueryString(display, EGL_CLIENT_APIS)?:"Not Supported");
|
||||
|
||||
LOGI("EGLSurface: %d-%d-%d-%d, config=%p", r, g, b, a, config);
|
||||
|
||||
|
||||
if (mNativeWindow->isUpdateOnDemand()) {
|
||||
mFlags |= UPDATE_ON_DEMAND;
|
||||
|
||||
@@ -1,21 +1,19 @@
|
||||
/*
|
||||
**
|
||||
** Copyright 2006, 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.
|
||||
*/
|
||||
|
||||
#define LOG_TAG "fillrate"
|
||||
**
|
||||
** Copyright 2006, 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 <stdlib.h>
|
||||
#include <stdio.h>
|
||||
@@ -33,72 +31,90 @@ using namespace android;
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
EGLint configAttribs[] = {
|
||||
EGL_DEPTH_SIZE, 0,
|
||||
EGL_NONE
|
||||
};
|
||||
|
||||
EGLint majorVersion;
|
||||
EGLint minorVersion;
|
||||
EGLContext context;
|
||||
EGLConfig config;
|
||||
EGLSurface surface;
|
||||
EGLint w, h;
|
||||
EGLDisplay dpy;
|
||||
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
|
||||
EGL_NONE
|
||||
};
|
||||
|
||||
dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
||||
eglInitialize(dpy, &majorVersion, &minorVersion);
|
||||
|
||||
EGLNativeWindowType window = android_createDisplaySurface();
|
||||
|
||||
status_t err = EGLUtils::selectConfigForNativeWindow(
|
||||
dpy, configAttribs, window, &config);
|
||||
if (err) {
|
||||
fprintf(stderr, "couldn't find an EGLConfig matching the screen format\n");
|
||||
return 0;
|
||||
}
|
||||
EGLint majorVersion;
|
||||
EGLint minorVersion;
|
||||
EGLContext context;
|
||||
EGLConfig config;
|
||||
EGLint numConfigs=0;
|
||||
EGLSurface surface;
|
||||
EGLint w, h;
|
||||
EGLDisplay dpy;
|
||||
|
||||
surface = eglCreateWindowSurface(dpy, config, window, NULL);
|
||||
context = eglCreateContext(dpy, config, NULL, NULL);
|
||||
eglMakeCurrent(dpy, surface, surface, context);
|
||||
eglQuerySurface(dpy, surface, EGL_WIDTH, &w);
|
||||
eglQuerySurface(dpy, surface, EGL_HEIGHT, &h);
|
||||
|
||||
printf("w=%d, h=%d\n", w, h);
|
||||
|
||||
glDisable(GL_DITHER);
|
||||
glEnable(GL_BLEND);
|
||||
dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY);
|
||||
eglInitialize(dpy, 0 ,0) ;//&majorVersion, &minorVersion);
|
||||
eglGetConfigs(dpy, NULL, 0, &numConfigs);
|
||||
printf("# configs = %d\n", numConfigs);
|
||||
|
||||
EGLNativeWindowType window = android_createDisplaySurface();
|
||||
|
||||
glViewport(0, 0, w, h);
|
||||
glOrthof(0, w, 0, h, 0, 1);
|
||||
status_t err = EGLUtils::selectConfigForNativeWindow(
|
||||
dpy, configAttribs, window, &config);
|
||||
if (err) {
|
||||
fprintf(stderr, "couldn't find an EGLConfig matching the screen format\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
eglSwapInterval(dpy, 1);
|
||||
EGLint r,g,b,a;
|
||||
eglGetConfigAttrib(dpy, config, EGL_RED_SIZE, &r);
|
||||
eglGetConfigAttrib(dpy, config, EGL_GREEN_SIZE, &g);
|
||||
eglGetConfigAttrib(dpy, config, EGL_BLUE_SIZE, &b);
|
||||
eglGetConfigAttrib(dpy, config, EGL_ALPHA_SIZE, &a);
|
||||
|
||||
glClearColor(1,0,0,0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
eglSwapBuffers(dpy, surface);
|
||||
surface = eglCreateWindowSurface(dpy, config, window, NULL);
|
||||
if (surface == EGL_NO_SURFACE) {
|
||||
EGLint err = eglGetError();
|
||||
fprintf(stderr, "%s, config=%p, format = %d-%d-%d-%d\n",
|
||||
EGLUtils::strerror(err), config, r,g,b,a);
|
||||
return 0;
|
||||
} else {
|
||||
printf("config=%p, format = %d-%d-%d-%d\n", config, r,g,b,a);
|
||||
}
|
||||
|
||||
context = eglCreateContext(dpy, config, NULL, NULL);
|
||||
eglMakeCurrent(dpy, surface, surface, context);
|
||||
eglQuerySurface(dpy, surface, EGL_WIDTH, &w);
|
||||
eglQuerySurface(dpy, surface, EGL_HEIGHT, &h);
|
||||
|
||||
printf("w=%d, h=%d\n", w, h);
|
||||
|
||||
glDisable(GL_DITHER);
|
||||
glEnable(GL_BLEND);
|
||||
|
||||
glViewport(0, 0, w, h);
|
||||
glOrthof(0, w, 0, h, 0, 1);
|
||||
|
||||
eglSwapInterval(dpy, 1);
|
||||
|
||||
glClearColor(1,0,0,0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
eglSwapBuffers(dpy, surface);
|
||||
|
||||
|
||||
int time = 10;
|
||||
printf("screen should flash red/green quickly for %d s...\n", time);
|
||||
|
||||
int c = 0;
|
||||
nsecs_t start = systemTime();
|
||||
nsecs_t t;
|
||||
do {
|
||||
glClearColor(1,0,0,0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
eglSwapBuffers(dpy, surface);
|
||||
glClearColor(0,1,0,0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
eglSwapBuffers(dpy, surface);
|
||||
t = systemTime() - start;
|
||||
c += 2;
|
||||
} while (int(ns2s(t))<=time);
|
||||
|
||||
double p = (double(t) / c) / 1000000000.0;
|
||||
printf("refresh-rate is %f fps (%f ms)\n", 1.0f/p, p*1000.0);
|
||||
|
||||
eglTerminate(dpy);
|
||||
|
||||
return 0;
|
||||
int time = 10;
|
||||
printf("screen should flash red/green quickly for %d s...\n", time);
|
||||
|
||||
int c = 0;
|
||||
nsecs_t start = systemTime();
|
||||
nsecs_t t;
|
||||
do {
|
||||
glClearColor(1,0,0,0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
eglSwapBuffers(dpy, surface);
|
||||
glClearColor(0,1,0,0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
eglSwapBuffers(dpy, surface);
|
||||
t = systemTime() - start;
|
||||
c += 2;
|
||||
} while (int(ns2s(t))<=time);
|
||||
|
||||
double p = (double(t) / c) / 1000000000.0;
|
||||
printf("refresh-rate is %f fps (%f ms)\n", 1.0f/p, p*1000.0);
|
||||
|
||||
eglTerminate(dpy);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user