src/solaris/native/sun/java2d/opengl/GLXSurfaceData.c

Print this page

        

*** 1,7 **** /* ! * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this --- 1,7 ---- /* ! * Copyright (c) 2003, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. Oracle designates this
*** 48,59 **** extern struct MComponentPeerIDs mComponentPeerIDs; extern void OGLSD_SetNativeDimensions(JNIEnv *env, OGLSDOps *oglsdo, jint w, jint h); - jboolean surfaceCreationFailed = JNI_FALSE; - #endif /* !HEADLESS */ JNIEXPORT void JNICALL Java_sun_java2d_opengl_GLXSurfaceData_initOps(JNIEnv *env, jobject glxsd, jobject peer, jlong aData) --- 48,57 ----
*** 391,412 **** oglsdo->width, oglsdo->height); return JNI_TRUE; } - static int - GLXSD_BadAllocXErrHandler(Display *display, XErrorEvent *xerr) - { - int ret = 0; - if (xerr->error_code == BadAlloc) { - surfaceCreationFailed = JNI_TRUE; - } else { - ret = (*xerror_saved_handler)(display, xerr); - } - return ret; - } - JNIEXPORT jboolean JNICALL Java_sun_java2d_opengl_GLXSurfaceData_initPbuffer (JNIEnv *env, jobject glxsd, jlong pData, jlong pConfigInfo, jboolean isOpaque, --- 389,398 ----
*** 418,427 **** --- 404,415 ---- GLXSDOps *glxsdo; GLXPbuffer pbuffer; int attrlist[] = {GLX_PBUFFER_WIDTH, 0, GLX_PBUFFER_HEIGHT, 0, GLX_PRESERVED_CONTENTS, GL_FALSE, 0}; + jboolean errorOccurredFlag; + jobject errorHandlerRef; J2dTraceLn3(J2D_TRACE_INFO, "GLXSurfaceData_initPbuffer: w=%d h=%d opq=%d", width, height, isOpaque);
*** 445,460 **** } attrlist[1] = width; attrlist[3] = height; ! surfaceCreationFailed = JNI_FALSE; ! EXEC_WITH_XERROR_HANDLER( ! GLXSD_BadAllocXErrHandler, ! pbuffer = j2d_glXCreatePbuffer(awt_display, ! glxinfo->fbconfig, attrlist)); ! if ((pbuffer == 0) || surfaceCreationFailed) { J2dRlsTraceLn(J2D_TRACE_ERROR, "GLXSurfaceData_initPbuffer: could not create glx pbuffer"); return JNI_FALSE; } --- 433,451 ---- } attrlist[1] = width; attrlist[3] = height; ! errorOccurredFlag = JNI_FALSE; ! WITH_XERROR_HANDLER(env, "sun/awt/X11/XErrorHandler$GLXBadAllocHandler", ! "()Lsun/awt/X11/XErrorHandler$GLXBadAllocHandler;", JNI_TRUE, errorHandlerRef); ! pbuffer = j2d_glXCreatePbuffer(awt_display, glxinfo->fbconfig, attrlist); ! XSync(awt_display, False); ! RESTORE_XERROR_HANDLER(env, JNI_FALSE); ! GET_HANDLER_ERROR_OCCURRED_FLAG(env, errorHandlerRef, errorOccurredFlag); ! ! if ((pbuffer == 0) || errorOccurredFlag) { J2dRlsTraceLn(J2D_TRACE_ERROR, "GLXSurfaceData_initPbuffer: could not create glx pbuffer"); return JNI_FALSE; }