10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #include <awt.h> 27 #include "Trace.h" 28 #include "WindowsFlags.h" 29 30 BOOL accelReset; // reset registry 2d acceleration settings 31 BOOL useD3D = TRUE; // d3d enabled flag 32 // initially is TRUE to allow D3D preloading 33 BOOL forceD3DUsage; // force d3d on or off 34 jboolean g_offscreenSharing; // JAWT accelerated surface sharing 35 BOOL checkRegistry; // Diagnostic tool: outputs 2d registry settings 36 BOOL disableRegistry; // Diagnostic tool: disables registry interaction 37 BOOL setHighDPIAware; // Whether to set the high-DPI awareness flag 38 39 extern WCHAR *j2dAccelKey; // Name of java2d root key 40 extern WCHAR *j2dAccelDriverKey; // Name of j2d per-device key 41 42 static jfieldID d3dEnabledID; 43 static jfieldID d3dSetID; 44 static jclass wFlagsClassID; 45 46 void SetIDs(JNIEnv *env, jclass wFlagsClass) 47 { 48 wFlagsClassID = (jclass)env->NewGlobalRef(wFlagsClass); 49 d3dEnabledID = env->GetStaticFieldID(wFlagsClass, "d3dEnabled", "Z"); 50 CHECK_NULL(d3dEnabledID); 51 d3dSetID = env->GetStaticFieldID(wFlagsClass, "d3dSet", "Z"); 52 CHECK_NULL(d3dSetID); 53 } 54 55 BOOL GetStaticBoolean(JNIEnv *env, jclass wfClass, const char *fieldName) 56 { 78 char *d3dEnv = getenv("J2D_D3D"); 79 if (d3dEnv) { 80 if (strcmp(d3dEnv, "false") == 0) { 81 // printf("Java2D Direct3D usage disabled by J2D_D3D env\n"); 82 d3dEnabled = FALSE; 83 d3dSet = TRUE; 84 SetD3DEnabledFlag(env, d3dEnabled, d3dSet); 85 } else if (strcmp(d3dEnv, "true") == 0) { 86 // printf("Java2D Direct3D usage forced on by J2D_D3D env\n"); 87 d3dEnabled = TRUE; 88 d3dSet = TRUE; 89 SetD3DEnabledFlag(env, d3dEnabled, d3dSet); 90 } 91 } 92 } 93 useD3D = d3dEnabled; 94 forceD3DUsage = d3dSet; 95 g_offscreenSharing = GetStaticBoolean(env, wFlagsClass, 96 "offscreenSharingEnabled"); 97 JNU_CHECK_EXCEPTION(env); 98 accelReset = GetStaticBoolean(env, wFlagsClass, "accelReset"); 99 JNU_CHECK_EXCEPTION(env); 100 checkRegistry = GetStaticBoolean(env, wFlagsClass, "checkRegistry"); 101 JNU_CHECK_EXCEPTION(env); 102 disableRegistry = GetStaticBoolean(env, wFlagsClass, "disableRegistry"); 103 JNU_CHECK_EXCEPTION(env); 104 105 setHighDPIAware = 106 (IS_WINVISTA && GetStaticBoolean(env, wFlagsClass, "setHighDPIAware")); 107 JNU_CHECK_EXCEPTION(env); 108 109 J2dTraceLn(J2D_TRACE_INFO, "WindowsFlags (native):"); 110 J2dTraceLn1(J2D_TRACE_INFO, " d3dEnabled = %s", 111 (useD3D ? "true" : "false")); 112 J2dTraceLn1(J2D_TRACE_INFO, " d3dSet = %s", 113 (forceD3DUsage ? "true" : "false")); 114 J2dTraceLn1(J2D_TRACE_INFO, " offscreenSharing = %s", 115 (g_offscreenSharing ? "true" : "false")); 116 J2dTraceLn1(J2D_TRACE_INFO, " accelReset = %s", 117 (accelReset ? "true" : "false")); 118 J2dTraceLn1(J2D_TRACE_INFO, " checkRegistry = %s", 119 (checkRegistry ? "true" : "false")); 120 J2dTraceLn1(J2D_TRACE_INFO, " disableRegistry = %s", 121 (disableRegistry ? "true" : "false")); 122 J2dTraceLn1(J2D_TRACE_INFO, " setHighDPIAware = %s", 123 (setHighDPIAware ? "true" : "false")); 124 } 125 126 void SetD3DEnabledFlag(JNIEnv *env, BOOL d3dEnabled, BOOL d3dSet) 127 { 128 useD3D = d3dEnabled; 129 forceD3DUsage = d3dSet; 130 if (env == NULL) { 131 env = (JNIEnv * ) JNU_GetEnv(jvm, JNI_VERSION_1_2); 132 } 133 env->SetStaticBooleanField(wFlagsClassID, d3dEnabledID, d3dEnabled); 134 if (d3dSet) { 135 env->SetStaticBooleanField(wFlagsClassID, d3dSetID, d3dSet); 136 } 137 } 138 139 BOOL IsD3DEnabled() { 140 return useD3D; 141 } | 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 #include <awt.h> 27 #include "Trace.h" 28 #include "WindowsFlags.h" 29 30 BOOL useD3D = TRUE; // d3d enabled flag 31 // initially is TRUE to allow D3D preloading 32 BOOL forceD3DUsage; // force d3d on or off 33 jboolean g_offscreenSharing; // JAWT accelerated surface sharing 34 BOOL setHighDPIAware; // Whether to set the high-DPI awareness flag 35 36 extern WCHAR *j2dAccelKey; // Name of java2d root key 37 extern WCHAR *j2dAccelDriverKey; // Name of j2d per-device key 38 39 static jfieldID d3dEnabledID; 40 static jfieldID d3dSetID; 41 static jclass wFlagsClassID; 42 43 void SetIDs(JNIEnv *env, jclass wFlagsClass) 44 { 45 wFlagsClassID = (jclass)env->NewGlobalRef(wFlagsClass); 46 d3dEnabledID = env->GetStaticFieldID(wFlagsClass, "d3dEnabled", "Z"); 47 CHECK_NULL(d3dEnabledID); 48 d3dSetID = env->GetStaticFieldID(wFlagsClass, "d3dSet", "Z"); 49 CHECK_NULL(d3dSetID); 50 } 51 52 BOOL GetStaticBoolean(JNIEnv *env, jclass wfClass, const char *fieldName) 53 { 75 char *d3dEnv = getenv("J2D_D3D"); 76 if (d3dEnv) { 77 if (strcmp(d3dEnv, "false") == 0) { 78 // printf("Java2D Direct3D usage disabled by J2D_D3D env\n"); 79 d3dEnabled = FALSE; 80 d3dSet = TRUE; 81 SetD3DEnabledFlag(env, d3dEnabled, d3dSet); 82 } else if (strcmp(d3dEnv, "true") == 0) { 83 // printf("Java2D Direct3D usage forced on by J2D_D3D env\n"); 84 d3dEnabled = TRUE; 85 d3dSet = TRUE; 86 SetD3DEnabledFlag(env, d3dEnabled, d3dSet); 87 } 88 } 89 } 90 useD3D = d3dEnabled; 91 forceD3DUsage = d3dSet; 92 g_offscreenSharing = GetStaticBoolean(env, wFlagsClass, 93 "offscreenSharingEnabled"); 94 JNU_CHECK_EXCEPTION(env); 95 96 setHighDPIAware = 97 (IS_WINVISTA && GetStaticBoolean(env, wFlagsClass, "setHighDPIAware")); 98 JNU_CHECK_EXCEPTION(env); 99 100 J2dTraceLn(J2D_TRACE_INFO, "WindowsFlags (native):"); 101 J2dTraceLn1(J2D_TRACE_INFO, " d3dEnabled = %s", 102 (useD3D ? "true" : "false")); 103 J2dTraceLn1(J2D_TRACE_INFO, " d3dSet = %s", 104 (forceD3DUsage ? "true" : "false")); 105 J2dTraceLn1(J2D_TRACE_INFO, " offscreenSharing = %s", 106 (g_offscreenSharing ? "true" : "false")); 107 J2dTraceLn1(J2D_TRACE_INFO, " setHighDPIAware = %s", 108 (setHighDPIAware ? "true" : "false")); 109 } 110 111 void SetD3DEnabledFlag(JNIEnv *env, BOOL d3dEnabled, BOOL d3dSet) 112 { 113 useD3D = d3dEnabled; 114 forceD3DUsage = d3dSet; 115 if (env == NULL) { 116 env = (JNIEnv * ) JNU_GetEnv(jvm, JNI_VERSION_1_2); 117 } 118 env->SetStaticBooleanField(wFlagsClassID, d3dEnabledID, d3dEnabled); 119 if (d3dSet) { 120 env->SetStaticBooleanField(wFlagsClassID, d3dSetID, d3dSet); 121 } 122 } 123 124 BOOL IsD3DEnabled() { 125 return useD3D; 126 } |