diff options
Diffstat (limited to 'opengl/tests/gl2_basic/gl2_basic.cpp')
-rw-r--r-- | opengl/tests/gl2_basic/gl2_basic.cpp | 41 |
1 files changed, 39 insertions, 2 deletions
diff --git a/opengl/tests/gl2_basic/gl2_basic.cpp b/opengl/tests/gl2_basic/gl2_basic.cpp index 13f6fba92e..0bb77f35f9 100644 --- a/opengl/tests/gl2_basic/gl2_basic.cpp +++ b/opengl/tests/gl2_basic/gl2_basic.cpp @@ -32,6 +32,8 @@ using namespace android; extern "C" EGLAPI const char* eglQueryStringImplementationANDROID(EGLDisplay dpy, EGLint name); +#define METADATA_SCALE(x) (static_cast<EGLint>(x * EGL_METADATA_SCALING_EXT)) + static void printGLString(const char *name, GLenum s) { // fprintf(stderr, "printGLString %s, %d\n", name, s); const char *v = (const char *) glGetString(s); @@ -265,6 +267,39 @@ int printEGLConfigurations(EGLDisplay dpy) { return true; } +void setSurfaceMetadata(EGLDisplay dpy, EGLSurface surface) { + static EGLBoolean toggle = GL_FALSE; + if (EGLUtils::hasEglExtension(dpy, "EGL_EXT_surface_SMPTE2086_metadata")) { + eglSurfaceAttrib(dpy, surface, EGL_SMPTE2086_DISPLAY_PRIMARY_RX_EXT, METADATA_SCALE(0.640)); + eglSurfaceAttrib(dpy, surface, EGL_SMPTE2086_DISPLAY_PRIMARY_RY_EXT, METADATA_SCALE(0.330)); + eglSurfaceAttrib(dpy, surface, EGL_SMPTE2086_DISPLAY_PRIMARY_GX_EXT, METADATA_SCALE(0.290)); + eglSurfaceAttrib(dpy, surface, EGL_SMPTE2086_DISPLAY_PRIMARY_GY_EXT, METADATA_SCALE(0.600)); + eglSurfaceAttrib(dpy, surface, EGL_SMPTE2086_DISPLAY_PRIMARY_BX_EXT, METADATA_SCALE(0.150)); + eglSurfaceAttrib(dpy, surface, EGL_SMPTE2086_DISPLAY_PRIMARY_BY_EXT, METADATA_SCALE(0.060)); + eglSurfaceAttrib(dpy, surface, EGL_SMPTE2086_WHITE_POINT_X_EXT, METADATA_SCALE(0.3127)); + eglSurfaceAttrib(dpy, surface, EGL_SMPTE2086_WHITE_POINT_Y_EXT, METADATA_SCALE(0.3290)); + if (toggle) { + eglSurfaceAttrib(dpy, surface, EGL_SMPTE2086_MAX_LUMINANCE_EXT, METADATA_SCALE(350)); + } else { + eglSurfaceAttrib(dpy, surface, EGL_SMPTE2086_MAX_LUMINANCE_EXT, METADATA_SCALE(300)); + } + eglSurfaceAttrib(dpy, surface, EGL_SMPTE2086_MIN_LUMINANCE_EXT, METADATA_SCALE(0.7)); + } + + if (EGLUtils::hasEglExtension(dpy, "EGL_EXT_surface_CTA861_3_metadata")) { + if (toggle) { + eglSurfaceAttrib(dpy, surface, EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT, + METADATA_SCALE(300)); + } else { + eglSurfaceAttrib(dpy, surface, EGL_CTA861_3_MAX_CONTENT_LIGHT_LEVEL_EXT, + METADATA_SCALE(325)); + } + eglSurfaceAttrib(dpy, surface, EGL_CTA861_3_MAX_FRAME_AVERAGE_LEVEL_EXT, + METADATA_SCALE(75)); + } + toggle = !toggle; +} + int main(int /*argc*/, char** /*argv*/) { EGLBoolean returnValue; EGLConfig myConfig = {0}; @@ -318,10 +353,11 @@ int main(int /*argc*/, char** /*argv*/) { printf("Chose this configuration:\n"); printEGLConfiguration(dpy, myConfig); - surface = eglCreateWindowSurface(dpy, myConfig, window, NULL); + EGLint winAttribs[] = {EGL_GL_COLORSPACE_KHR, EGL_GL_COLORSPACE_SRGB_KHR, EGL_NONE}; + surface = eglCreateWindowSurface(dpy, myConfig, window, winAttribs); checkEglError("eglCreateWindowSurface"); if (surface == EGL_NO_SURFACE) { - printf("gelCreateWindowSurface failed.\n"); + printf("eglCreateWindowSurface failed.\n"); return 0; } @@ -356,6 +392,7 @@ int main(int /*argc*/, char** /*argv*/) { for (;;) { renderFrame(); + setSurfaceMetadata(dpy, surface); eglSwapBuffers(dpy, surface); checkEglError("eglSwapBuffers"); } |