8146238: [macosx] Java2D Queue Flusher crash on OSX after switching between user accounts
Reviewed-by: prr, avu
This commit is contained in:
parent
672ec6f12a
commit
145c5111a6
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2011, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2011, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -48,8 +48,9 @@ public abstract class CGLSurfaceData extends OGLSurfaceData {
|
|||||||
|
|
||||||
native void validate(int xoff, int yoff, int width, int height, boolean isOpaque);
|
native void validate(int xoff, int yoff, int width, int height, boolean isOpaque);
|
||||||
|
|
||||||
private native void initOps(long pConfigInfo, long pPeerData, long layerPtr,
|
private native void initOps(OGLGraphicsConfig gc, long pConfigInfo,
|
||||||
int xoff, int yoff, boolean isOpaque);
|
long pPeerData, long layerPtr, int xoff,
|
||||||
|
int yoff, boolean isOpaque);
|
||||||
|
|
||||||
protected CGLSurfaceData(CGLGraphicsConfig gc, ColorModel cm, int type,
|
protected CGLSurfaceData(CGLGraphicsConfig gc, ColorModel cm, int type,
|
||||||
int width, int height) {
|
int width, int height) {
|
||||||
@ -74,7 +75,7 @@ public abstract class CGLSurfaceData extends OGLSurfaceData {
|
|||||||
pPeerData = pView.getAWTView();
|
pPeerData = pView.getAWTView();
|
||||||
isOpaque = pView.isOpaque();
|
isOpaque = pView.isOpaque();
|
||||||
}
|
}
|
||||||
initOps(pConfigInfo, pPeerData, 0, 0, 0, isOpaque);
|
initOps(gc, pConfigInfo, pPeerData, 0, 0, 0, isOpaque);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected CGLSurfaceData(CGLLayer layer, CGLGraphicsConfig gc,
|
protected CGLSurfaceData(CGLLayer layer, CGLGraphicsConfig gc,
|
||||||
@ -90,7 +91,7 @@ public abstract class CGLSurfaceData extends OGLSurfaceData {
|
|||||||
layerPtr = layer.getPointer();
|
layerPtr = layer.getPointer();
|
||||||
isOpaque = layer.isOpaque();
|
isOpaque = layer.isOpaque();
|
||||||
}
|
}
|
||||||
initOps(pConfigInfo, 0, layerPtr, 0, 0, isOpaque);
|
initOps(gc, pConfigInfo, 0, layerPtr, 0, 0, isOpaque);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override //SurfaceData
|
@Override //SurfaceData
|
||||||
|
@ -130,31 +130,6 @@ JNF_COCOA_ENTER(env);
|
|||||||
JNF_COCOA_EXIT(env);
|
JNF_COCOA_EXIT(env);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a pointer (as a jlong) to the native CGLGraphicsConfigInfo
|
|
||||||
* associated with the given OGLSDOps. This method can be called from
|
|
||||||
* shared code to retrieve the native GraphicsConfig data in a platform-
|
|
||||||
* independent manner.
|
|
||||||
*/
|
|
||||||
jlong
|
|
||||||
OGLSD_GetNativeConfigInfo(OGLSDOps *oglsdo)
|
|
||||||
{
|
|
||||||
J2dTraceLn(J2D_TRACE_INFO, "OGLSD_GetNativeConfigInfo");
|
|
||||||
|
|
||||||
if (oglsdo == NULL) {
|
|
||||||
J2dRlsTraceLn(J2D_TRACE_ERROR, "OGLSD_GetNativeConfigInfo: ops are null");
|
|
||||||
return 0L;
|
|
||||||
}
|
|
||||||
|
|
||||||
CGLSDOps *cglsdo = (CGLSDOps *)oglsdo->privOps;
|
|
||||||
if (cglsdo == NULL) {
|
|
||||||
J2dRlsTraceLn(J2D_TRACE_ERROR, "OGLSD_GetNativeConfigInfo: cgl ops are null");
|
|
||||||
return 0L;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ptr_to_jlong(cglsdo->configInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes the given GraphicsConfig's context current to its associated
|
* Makes the given GraphicsConfig's context current to its associated
|
||||||
* "scratch" surface. If there is a problem making the context current,
|
* "scratch" surface. If there is a problem making the context current,
|
||||||
@ -359,7 +334,7 @@ extern DisposeFunc OGLSD_Dispose;
|
|||||||
|
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
Java_sun_java2d_opengl_CGLSurfaceData_initOps
|
Java_sun_java2d_opengl_CGLSurfaceData_initOps
|
||||||
(JNIEnv *env, jobject cglsd,
|
(JNIEnv *env, jobject cglsd, jobject gc,
|
||||||
jlong pConfigInfo, jlong pPeerData, jlong layerPtr,
|
jlong pConfigInfo, jlong pPeerData, jlong layerPtr,
|
||||||
jint xoff, jint yoff, jboolean isOpaque)
|
jint xoff, jint yoff, jboolean isOpaque)
|
||||||
{
|
{
|
||||||
@ -367,8 +342,22 @@ Java_sun_java2d_opengl_CGLSurfaceData_initOps
|
|||||||
J2dTraceLn1(J2D_TRACE_INFO, " pPeerData=%p", jlong_to_ptr(pPeerData));
|
J2dTraceLn1(J2D_TRACE_INFO, " pPeerData=%p", jlong_to_ptr(pPeerData));
|
||||||
J2dTraceLn2(J2D_TRACE_INFO, " xoff=%d, yoff=%d", (int)xoff, (int)yoff);
|
J2dTraceLn2(J2D_TRACE_INFO, " xoff=%d, yoff=%d", (int)xoff, (int)yoff);
|
||||||
|
|
||||||
|
gc = (*env)->NewGlobalRef(env, gc);
|
||||||
|
if (gc == NULL) {
|
||||||
|
JNU_ThrowOutOfMemoryError(env, "Initialization of SurfaceData failed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
OGLSDOps *oglsdo = (OGLSDOps *)
|
OGLSDOps *oglsdo = (OGLSDOps *)
|
||||||
SurfaceData_InitOps(env, cglsd, sizeof(OGLSDOps));
|
SurfaceData_InitOps(env, cglsd, sizeof(OGLSDOps));
|
||||||
|
if (oglsdo == NULL) {
|
||||||
|
(*env)->DeleteGlobalRef(env, gc);
|
||||||
|
JNU_ThrowOutOfMemoryError(env, "Initialization of SurfaceData failed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// later the graphicsConfig will be used for deallocation of oglsdo
|
||||||
|
oglsdo->graphicsConfig = gc;
|
||||||
|
|
||||||
CGLSDOps *cglsdo = (CGLSDOps *)malloc(sizeof(CGLSDOps));
|
CGLSDOps *cglsdo = (CGLSDOps *)malloc(sizeof(CGLSDOps));
|
||||||
if (cglsdo == NULL) {
|
if (cglsdo == NULL) {
|
||||||
JNU_ThrowOutOfMemoryError(env, "creating native cgl ops");
|
JNU_ThrowOutOfMemoryError(env, "creating native cgl ops");
|
||||||
|
@ -27,6 +27,7 @@ package sun.java2d.opengl;
|
|||||||
|
|
||||||
import java.awt.AlphaComposite;
|
import java.awt.AlphaComposite;
|
||||||
import java.awt.Composite;
|
import java.awt.Composite;
|
||||||
|
import java.awt.GraphicsConfiguration;
|
||||||
import java.awt.GraphicsEnvironment;
|
import java.awt.GraphicsEnvironment;
|
||||||
import java.awt.Rectangle;
|
import java.awt.Rectangle;
|
||||||
import java.awt.Transparency;
|
import java.awt.Transparency;
|
||||||
@ -578,16 +579,16 @@ public abstract class OGLSurfaceData extends SurfaceData
|
|||||||
* (referenced by the pData parameter). This method is invoked from
|
* (referenced by the pData parameter). This method is invoked from
|
||||||
* the native Dispose() method from the Disposer thread when the
|
* the native Dispose() method from the Disposer thread when the
|
||||||
* Java-level OGLSurfaceData object is about to go away. Note that we
|
* Java-level OGLSurfaceData object is about to go away. Note that we
|
||||||
* also pass a reference to the native GLX/WGLGraphicsConfigInfo
|
* also pass a reference to the OGLGraphicsConfig
|
||||||
* (pConfigInfo) for the purposes of making a context current.
|
* for the purposes of making a context current.
|
||||||
*/
|
*/
|
||||||
static void dispose(long pData, long pConfigInfo) {
|
static void dispose(long pData, OGLGraphicsConfig gc) {
|
||||||
OGLRenderQueue rq = OGLRenderQueue.getInstance();
|
OGLRenderQueue rq = OGLRenderQueue.getInstance();
|
||||||
rq.lock();
|
rq.lock();
|
||||||
try {
|
try {
|
||||||
// make sure we have a current context before
|
// make sure we have a current context before
|
||||||
// disposing the native resources (e.g. texture object)
|
// disposing the native resources (e.g. texture object)
|
||||||
OGLContext.setScratchSurface(pConfigInfo);
|
OGLContext.setScratchSurface(gc);
|
||||||
|
|
||||||
RenderBuffer buf = rq.getBuffer();
|
RenderBuffer buf = rq.getBuffer();
|
||||||
rq.ensureCapacityAndAlignment(12, 4);
|
rq.ensureCapacityAndAlignment(12, 4);
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2012, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -37,7 +37,6 @@
|
|||||||
* The following methods are implemented in the windowing system (i.e. GLX
|
* The following methods are implemented in the windowing system (i.e. GLX
|
||||||
* and WGL) source files.
|
* and WGL) source files.
|
||||||
*/
|
*/
|
||||||
extern jlong OGLSD_GetNativeConfigInfo(OGLSDOps *oglsdo);
|
|
||||||
extern jboolean OGLSD_InitOGLWindow(JNIEnv *env, OGLSDOps *oglsdo);
|
extern jboolean OGLSD_InitOGLWindow(JNIEnv *env, OGLSDOps *oglsdo);
|
||||||
extern void OGLSD_DestroyOGLSurface(JNIEnv *env, OGLSDOps *oglsdo);
|
extern void OGLSD_DestroyOGLSurface(JNIEnv *env, OGLSDOps *oglsdo);
|
||||||
|
|
||||||
@ -593,11 +592,14 @@ void
|
|||||||
OGLSD_Dispose(JNIEnv *env, SurfaceDataOps *ops)
|
OGLSD_Dispose(JNIEnv *env, SurfaceDataOps *ops)
|
||||||
{
|
{
|
||||||
OGLSDOps *oglsdo = (OGLSDOps *)ops;
|
OGLSDOps *oglsdo = (OGLSDOps *)ops;
|
||||||
jlong pConfigInfo = OGLSD_GetNativeConfigInfo(oglsdo);
|
jobject graphicsConfig = oglsdo->graphicsConfig;
|
||||||
|
|
||||||
JNU_CallStaticMethodByName(env, NULL, "sun/java2d/opengl/OGLSurfaceData",
|
JNU_CallStaticMethodByName(env, NULL, "sun/java2d/opengl/OGLSurfaceData",
|
||||||
"dispose", "(JJ)V",
|
"dispose",
|
||||||
ptr_to_jlong(ops), pConfigInfo);
|
"(JLsun/java2d/opengl/OGLGraphicsConfig;)V",
|
||||||
|
ptr_to_jlong(ops), graphicsConfig);
|
||||||
|
(*env)->DeleteGlobalRef(env, graphicsConfig);
|
||||||
|
oglsdo->graphicsConfig = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -85,6 +85,9 @@ typedef struct {
|
|||||||
* Pointer to native-specific (GLX, WGL, etc.) SurfaceData info, such as the
|
* Pointer to native-specific (GLX, WGL, etc.) SurfaceData info, such as the
|
||||||
* native Drawable handle and GraphicsConfig data.
|
* native Drawable handle and GraphicsConfig data.
|
||||||
*
|
*
|
||||||
|
* jobject graphicsConfig;;
|
||||||
|
* Strong reference to the OGLGraphicsConfig used by this OGLSurfaceData.
|
||||||
|
*
|
||||||
* jint drawableType;
|
* jint drawableType;
|
||||||
* The surface type; can be any one of the surface type constants defined
|
* The surface type; can be any one of the surface type constants defined
|
||||||
* below (OGLSD_WINDOW, OGLSD_TEXTURE, etc).
|
* below (OGLSD_WINDOW, OGLSD_TEXTURE, etc).
|
||||||
@ -162,6 +165,7 @@ typedef struct {
|
|||||||
struct _OGLSDOps {
|
struct _OGLSDOps {
|
||||||
SurfaceDataOps sdOps;
|
SurfaceDataOps sdOps;
|
||||||
void *privOps;
|
void *privOps;
|
||||||
|
jobject graphicsConfig;
|
||||||
jint drawableType;
|
jint drawableType;
|
||||||
GLenum activeBuffer;
|
GLenum activeBuffer;
|
||||||
jboolean isOpaque;
|
jboolean isOpaque;
|
||||||
|
@ -40,7 +40,8 @@ public abstract class GLXSurfaceData extends OGLSurfaceData {
|
|||||||
protected X11ComponentPeer peer;
|
protected X11ComponentPeer peer;
|
||||||
private GLXGraphicsConfig graphicsConfig;
|
private GLXGraphicsConfig graphicsConfig;
|
||||||
|
|
||||||
private native void initOps(X11ComponentPeer peer, long aData);
|
private native void initOps(OGLGraphicsConfig gc, X11ComponentPeer peer,
|
||||||
|
long aData);
|
||||||
|
|
||||||
protected GLXSurfaceData(X11ComponentPeer peer, GLXGraphicsConfig gc,
|
protected GLXSurfaceData(X11ComponentPeer peer, GLXGraphicsConfig gc,
|
||||||
ColorModel cm, int type)
|
ColorModel cm, int type)
|
||||||
@ -48,7 +49,7 @@ public abstract class GLXSurfaceData extends OGLSurfaceData {
|
|||||||
super(gc, cm, type);
|
super(gc, cm, type);
|
||||||
this.peer = peer;
|
this.peer = peer;
|
||||||
this.graphicsConfig = gc;
|
this.graphicsConfig = gc;
|
||||||
initOps(peer, graphicsConfig.getAData());
|
initOps(gc, peer, graphicsConfig.getAData());
|
||||||
}
|
}
|
||||||
|
|
||||||
public GraphicsConfiguration getDeviceConfiguration() {
|
public GraphicsConfiguration getDeviceConfiguration() {
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2003, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2003, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -54,23 +54,32 @@ jboolean surfaceCreationFailed = JNI_FALSE;
|
|||||||
|
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
Java_sun_java2d_opengl_GLXSurfaceData_initOps(JNIEnv *env, jobject glxsd,
|
Java_sun_java2d_opengl_GLXSurfaceData_initOps(JNIEnv *env, jobject glxsd,
|
||||||
|
jobject gc,
|
||||||
jobject peer, jlong aData)
|
jobject peer, jlong aData)
|
||||||
{
|
{
|
||||||
#ifndef HEADLESS
|
#ifndef HEADLESS
|
||||||
GLXSDOps *glxsdo = (GLXSDOps *)malloc(sizeof(GLXSDOps));
|
gc = (*env)->NewGlobalRef(env, gc);
|
||||||
|
if (gc == NULL) {
|
||||||
if (glxsdo == NULL) {
|
JNU_ThrowOutOfMemoryError(env, "Initialization of SurfaceData failed.");
|
||||||
JNU_ThrowOutOfMemoryError(env, "creating native GLX ops");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
OGLSDOps *oglsdo = (OGLSDOps *)SurfaceData_InitOps(env, glxsd,
|
OGLSDOps *oglsdo = (OGLSDOps *)SurfaceData_InitOps(env, glxsd,
|
||||||
sizeof(OGLSDOps));
|
sizeof(OGLSDOps));
|
||||||
if (oglsdo == NULL) {
|
if (oglsdo == NULL) {
|
||||||
free(glxsdo);
|
(*env)->DeleteGlobalRef(env, gc);
|
||||||
JNU_ThrowOutOfMemoryError(env, "Initialization of SurfaceData failed.");
|
JNU_ThrowOutOfMemoryError(env, "Initialization of SurfaceData failed.");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
// later the graphicsConfig will be used for deallocation of oglsdo
|
||||||
|
oglsdo->graphicsConfig = gc;
|
||||||
|
|
||||||
|
GLXSDOps *glxsdo = (GLXSDOps *)malloc(sizeof(GLXSDOps));
|
||||||
|
|
||||||
|
if (glxsdo == NULL) {
|
||||||
|
JNU_ThrowOutOfMemoryError(env, "creating native GLX ops");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
J2dTraceLn(J2D_TRACE_INFO, "GLXSurfaceData_initOps");
|
J2dTraceLn(J2D_TRACE_INFO, "GLXSurfaceData_initOps");
|
||||||
|
|
||||||
@ -152,39 +161,6 @@ GLXSD_MakeCurrentToScratch(JNIEnv *env, OGLContext *oglc)
|
|||||||
return JNI_TRUE;
|
return JNI_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a pointer (as a jlong) to the native GLXGraphicsConfigInfo
|
|
||||||
* associated with the given OGLSDOps. This method can be called from
|
|
||||||
* shared code to retrieve the native GraphicsConfig data in a platform-
|
|
||||||
* independent manner.
|
|
||||||
*/
|
|
||||||
jlong
|
|
||||||
OGLSD_GetNativeConfigInfo(OGLSDOps *oglsdo)
|
|
||||||
{
|
|
||||||
GLXSDOps *glxsdo;
|
|
||||||
|
|
||||||
if (oglsdo == NULL) {
|
|
||||||
J2dRlsTraceLn(J2D_TRACE_ERROR,
|
|
||||||
"OGLSD_GetNativeConfigInfo: ops are null");
|
|
||||||
return 0L;
|
|
||||||
}
|
|
||||||
|
|
||||||
glxsdo = (GLXSDOps *)oglsdo->privOps;
|
|
||||||
if (glxsdo == NULL) {
|
|
||||||
J2dRlsTraceLn(J2D_TRACE_ERROR,
|
|
||||||
"OGLSD_GetNativeConfigInfo: glx ops are null");
|
|
||||||
return 0L;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (glxsdo->configData == NULL) {
|
|
||||||
J2dRlsTraceLn(J2D_TRACE_ERROR,
|
|
||||||
"OGLSD_GetNativeConfigInfo: config data is null");
|
|
||||||
return 0L;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ptr_to_jlong(glxsdo->configData->glxInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes the given GraphicsConfig's context current to its associated
|
* Makes the given GraphicsConfig's context current to its associated
|
||||||
* "scratch" surface. If there is a problem making the context current,
|
* "scratch" surface. If there is a problem making the context current,
|
||||||
|
@ -46,8 +46,8 @@ public abstract class WGLSurfaceData extends OGLSurfaceData {
|
|||||||
protected double scaleX = 1;
|
protected double scaleX = 1;
|
||||||
protected double scaleY = 1;
|
protected double scaleY = 1;
|
||||||
|
|
||||||
private native void initOps(long pConfigInfo, WComponentPeer peer,
|
private native void initOps(OGLGraphicsConfig gc, long pConfigInfo,
|
||||||
long hwnd);
|
WComponentPeer peer, long hwnd);
|
||||||
|
|
||||||
protected WGLSurfaceData(WComponentPeer peer, WGLGraphicsConfig gc,
|
protected WGLSurfaceData(WComponentPeer peer, WGLGraphicsConfig gc,
|
||||||
ColorModel cm, int type)
|
ColorModel cm, int type)
|
||||||
@ -62,7 +62,7 @@ public abstract class WGLSurfaceData extends OGLSurfaceData {
|
|||||||
long pConfigInfo = gc.getNativeConfigInfo();
|
long pConfigInfo = gc.getNativeConfigInfo();
|
||||||
long hwnd = peer != null ? peer.getHWnd() : 0L;
|
long hwnd = peer != null ? peer.getHWnd() : 0L;
|
||||||
|
|
||||||
initOps(pConfigInfo, peer, hwnd);
|
initOps(gc, pConfigInfo, peer, hwnd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2004, 2015, Oracle and/or its affiliates. All rights reserved.
|
* Copyright (c) 2004, 2019, Oracle and/or its affiliates. All rights reserved.
|
||||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||||
*
|
*
|
||||||
* This code is free software; you can redistribute it and/or modify it
|
* This code is free software; you can redistribute it and/or modify it
|
||||||
@ -58,11 +58,25 @@ extern void
|
|||||||
|
|
||||||
JNIEXPORT void JNICALL
|
JNIEXPORT void JNICALL
|
||||||
Java_sun_java2d_opengl_WGLSurfaceData_initOps(JNIEnv *env, jobject wglsd,
|
Java_sun_java2d_opengl_WGLSurfaceData_initOps(JNIEnv *env, jobject wglsd,
|
||||||
jlong pConfigInfo,
|
jobject gc, jlong pConfigInfo,
|
||||||
jobject peer, jlong hwnd)
|
jobject peer, jlong hwnd)
|
||||||
{
|
{
|
||||||
|
gc = (*env)->NewGlobalRef(env, gc);
|
||||||
|
if (gc == NULL) {
|
||||||
|
JNU_ThrowOutOfMemoryError(env, "Initialization of SurfaceData failed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
OGLSDOps *oglsdo = (OGLSDOps *)SurfaceData_InitOps(env, wglsd,
|
OGLSDOps *oglsdo = (OGLSDOps *)SurfaceData_InitOps(env, wglsd,
|
||||||
sizeof(OGLSDOps));
|
sizeof(OGLSDOps));
|
||||||
|
if (oglsdo == NULL) {
|
||||||
|
(*env)->DeleteGlobalRef(env, gc);
|
||||||
|
JNU_ThrowOutOfMemoryError(env, "Initialization of SurfaceData failed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// later the graphicsConfig will be used for deallocation of oglsdo
|
||||||
|
oglsdo->graphicsConfig = gc;
|
||||||
|
|
||||||
WGLSDOps *wglsdo = (WGLSDOps *)malloc(sizeof(WGLSDOps));
|
WGLSDOps *wglsdo = (WGLSDOps *)malloc(sizeof(WGLSDOps));
|
||||||
|
|
||||||
J2dTraceLn(J2D_TRACE_INFO, "WGLSurfaceData_initOps");
|
J2dTraceLn(J2D_TRACE_INFO, "WGLSurfaceData_initOps");
|
||||||
@ -144,33 +158,6 @@ WGLSD_MakeCurrentToScratch(JNIEnv *env, OGLContext *oglc)
|
|||||||
return JNI_TRUE;
|
return JNI_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns a pointer (as a jlong) to the native WGLGraphicsConfigInfo
|
|
||||||
* associated with the given OGLSDOps. This method can be called from
|
|
||||||
* shared code to retrieve the native GraphicsConfig data in a platform-
|
|
||||||
* independent manner.
|
|
||||||
*/
|
|
||||||
jlong
|
|
||||||
OGLSD_GetNativeConfigInfo(OGLSDOps *oglsdo)
|
|
||||||
{
|
|
||||||
WGLSDOps *wglsdo;
|
|
||||||
|
|
||||||
if (oglsdo == NULL) {
|
|
||||||
J2dRlsTraceLn(J2D_TRACE_ERROR,
|
|
||||||
"OGLSD_GetNativeConfigInfo: ops are null");
|
|
||||||
return 0L;
|
|
||||||
}
|
|
||||||
|
|
||||||
wglsdo = (WGLSDOps *)oglsdo->privOps;
|
|
||||||
if (wglsdo == NULL) {
|
|
||||||
J2dRlsTraceLn(J2D_TRACE_ERROR,
|
|
||||||
"OGLSD_GetNativeConfigInfo: wgl ops are null");
|
|
||||||
return 0L;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ptr_to_jlong(wglsdo->configInfo);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes the given GraphicsConfig's context current to its associated
|
* Makes the given GraphicsConfig's context current to its associated
|
||||||
* "scratch" surface. If there is a problem making the context current,
|
* "scratch" surface. If there is a problem making the context current,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user