JNIEXPORT jboolean JNICALL Java_sun_java2d_opengl_GLXSurfaceData_initPbuffer (JNIEnv *env, jobject glxsd, jlong pData, jlong pConfigInfo, jboolean isOpaque, jint width, jint height) { OGLSDOps *oglsdo = (OGLSDOps *)jlong_to_ptr(pData); GLXGraphicsConfigInfo *glxinfo = (GLXGraphicsConfigInfo *)jlong_to_ptr(pConfigInfo); GLXSDOps *glxsdo; GLXPbuffer pbuffer; int attrlist[] = {GLX_PBUFFER_WIDTH, 0, GLX_PBUFFER_HEIGHT, 0, GLX_PRESERVED_CONTENTS, GL_FALSE, 0}; J2dTraceLn3(J2D_TRACE_INFO, "GLXSurfaceData_initPbuffer: w=%d h=%d opq=%d", width, height, isOpaque); if (oglsdo == NULL) { J2dRlsTraceLn(J2D_TRACE_ERROR, "GLXSurfaceData_initPbuffer: ops are null"); return JNI_FALSE; } glxsdo = (GLXSDOps *)oglsdo->privOps; if (glxsdo == NULL) { J2dRlsTraceLn(J2D_TRACE_ERROR, "GLXSurfaceData_initPbuffer: glx ops are null"); return JNI_FALSE; } if (glxinfo == NULL) { J2dRlsTraceLn(J2D_TRACE_ERROR, "GLXSurfaceData_initPbuffer: glx config info is null"); return JNI_FALSE; } 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; } oglsdo->drawableType = OGLSD_PBUFFER; oglsdo->isOpaque = isOpaque; oglsdo->width = width; oglsdo->height = height; oglsdo->xOffset = 0; oglsdo->yOffset = 0; glxsdo->drawable = pbuffer; glxsdo->xdrawable = 0; return JNI_TRUE; }
JNIEXPORT jboolean JNICALL Java_sun_java2d_opengl_GLXSurfaceData_initPbuffer (JNIEnv *env, jobject glxsd, jlong pCtx, jlong pData, jint width, jint height) { OGLSDOps *oglsdo = (OGLSDOps *)jlong_to_ptr(pData); OGLContext *oglc = (OGLContext *)jlong_to_ptr(pCtx); GLXSDOps *glxsdo; GLXCtxInfo *ctxinfo; GLXPbuffer pbuffer; int attrlist[] = {GLX_PBUFFER_WIDTH, 0, GLX_PBUFFER_HEIGHT, 0, GLX_PRESERVED_CONTENTS, GL_FALSE, 0}; J2dTraceLn2(J2D_TRACE_INFO, "in GLXSurfaceData_initPbuffer (w=%d h=%d)", width, height); if (oglsdo == NULL) { J2dTraceLn(J2D_TRACE_ERROR, "ops are null"); return JNI_FALSE; } glxsdo = (GLXSDOps *)oglsdo->privOps; if (glxsdo == NULL) { J2dTraceLn(J2D_TRACE_ERROR, "glx ops are null"); return JNI_FALSE; } if (oglc == NULL) { J2dTraceLn(J2D_TRACE_ERROR, "context is null"); return JNI_FALSE; } ctxinfo = (GLXCtxInfo *)oglc->ctxInfo; if (ctxinfo == NULL) { J2dTraceLn(J2D_TRACE_ERROR, "glx context info is null"); return JNI_FALSE; } attrlist[1] = width; attrlist[3] = height; surfaceCreationFailed = JNI_FALSE; EXEC_WITH_XERROR_HANDLER( GLXSD_BadAllocXErrHandler, pbuffer = j2d_glXCreatePbuffer(awt_display, ctxinfo->fbconfig, attrlist)); if ((pbuffer == 0) || surfaceCreationFailed) { J2dTraceLn(J2D_TRACE_ERROR, "could not create glx pbuffer"); return JNI_FALSE; } oglsdo->drawableType = OGLSD_PBUFFER; oglsdo->width = width; oglsdo->height = height; oglsdo->xOffset = 0; oglsdo->yOffset = 0; oglsdo->isPremult = JNI_TRUE; glxsdo->drawable = pbuffer; glxsdo->xdrawable = 0; return JNI_TRUE; }