1 /* 2 * Copyright (c) 1998, 2001, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 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 /* 27 * The JDGA interface enables "Direct Graphics Access" to the pixels 28 * of X11 drawables for the Java runtime graphics implementation. 29 * 30 * This include file defines the external interface that the 31 * Solaris X11 port of the Java(tm) 2D API uses to communicate 32 * with a dynamically loadable object library to obtain information 33 * for rendering directly to the memory mapped surfaces that store 34 * the pixel information for an X11 Window (or technically any X11 35 * Drawable). 36 * 37 * The 2D graphics library will link to an object file, either 38 * through direct linking at compile time or through dynamic 39 * loading at runtime, and use an entry point defined as 40 * 41 * JDgaLibInitFunc JDgaLibInit; 42 * 43 * to initialize the library and obtain a copy of a JDgaLibInfo 44 * structure that will be used to communicate with the library 45 * to obtain information about X11 Drawable IDs and the memory 46 * used to store their pixels. 47 * 48 * Some parts of this interface use interfaces and structures 49 * defined by the JNI native interface technology. 50 */ 51 52 #ifndef HEADLESS 53 /* 54 * 55 */ 56 #define JDGALIB_MAJOR_VERSION 1 57 #define JDGALIB_MINOR_VERSION 0 58 59 /* 60 * Definitions for the return status codes for most of the JDGA 61 * access functions. 62 */ 63 #ifndef _DEFINE_JDGASTATUS_ 64 #define _DEFINE_JDGASTATUS_ 65 typedef enum { 66 JDGA_SUCCESS = 0, /* operation succeeded */ 67 JDGA_FAILED = 1, /* unable to complete operation */ 68 JDGA_UNAVAILABLE = 2 /* DGA not available on attached devices */ 69 } JDgaStatus; 70 #endif 71 72 /* 73 * This structure defines the location and size of a rectangular 74 * region of a drawing surface. 75 * 76 * lox, loy - coordinates that point to the pixel just inside 77 * the top left-hand corner of the region. 78 * hix, hiy - coordinates that point to the pixel just beyond 79 * the bottom right-hand corner of the region. 80 * 81 * Thus, the region is a rectangle containing (hiy-loy) rows of 82 * (hix-lox) columns of pixels. 83 */ 84 typedef struct { 85 jint lox; 86 jint loy; 87 jint hix; 88 jint hiy; 89 } JDgaBounds; 90 91 typedef struct { 92 /* 93 * Information describing the global memory partition containing 94 * the pixel information for the window. 95 */ 96 void *basePtr; /* Base address of memory partition. */ 97 jint surfaceScan; /* Number of pixels from one row to the next */ 98 jint surfaceWidth; /* Total accessible pixels across */ 99 jint surfaceHeight; /* Total accessible pixels down */ 100 jint surfaceDepth; /* Mapped depth */ 101 102 /* 103 * Location and size information of the entire window (may include 104 * portions outside of the memory partition). 105 * 106 * The coordinates are relative to the "basePtr" origin of the screen. 107 */ 108 JDgaBounds window; 109 110 /* 111 * Location and size information of the visible portion of the 112 * window (includes only portions that are inside the writable 113 * portion of the memory partition and not covered by other windows) 114 * 115 * This rectangle may represent a subset of the rendering 116 * rectangle supplied in the JDgaGetLock function if that 117 * rectangle is partially clipped and the remaining visible 118 * portion is exactly rectangular. 119 * 120 * The coordinates are relative to the "basePtr" origin of the screen. 121 */ 122 JDgaBounds visible; 123 124 } JDgaSurfaceInfo; 125 126 typedef struct _JDgaLibInfo JDgaLibInfo; 127 128 /* 129 * This function is called to initialize the JDGA implementation 130 * library for access to the given X11 Display. 131 * This function stores a pointer to a structure that holds function 132 * pointers for the rest of the requests as well as any additinoal 133 * data that that library needs to track the indicated display. 134 * 135 * @return 136 * JDGA_SUCCESS if library was successfully initialized 137 * JDGA_FAILED if library is unable to perform operations 138 * on the given X11 Display. 139 */ 140 typedef JDgaStatus 141 JDgaLibInitFunc(JNIEnv *env, JDgaLibInfo *ppInfo); 142 143 /* 144 * This function is called to lock the given X11 Drawable into 145 * a locally addressable memory location and to return specific 146 * rendering information about the location and geometry of the 147 * display memory that the Drawable occupies. 148 * 149 * Information provided to this function includes: 150 * 151 * lox, loy - the X and Y coordinates of the pixel just inside 152 * the upper left corner of the region to be rendered 153 * hix, hiy - the X and Y coordinates of the pixel just beyond 154 * the lower right corner of the region to be rendered 155 * 156 * Information obtained via this function includes: 157 * 158 * *pSurface - A pointer to a JDgaSurfaceInfo structure which is 159 * filled in with information about the drawing area for 160 * the specified Drawable. 161 * 162 * The return value indicates whether or not the library was able 163 * to successfully lock the drawable into memory and obtain the 164 * specific geometry information required to render to the Drawable's 165 * pixel memory. Failure indicates only a temporary inability to 166 * lock down the memory for this Drawable and does not imply a general 167 * inability to lock this or other Drawable's at a later time. 168 * 169 * If the indicated rendering region is not visible at all then this 170 * function should indicate JDGA_SUCCESS and return an empty 171 * "visible" rectangle. 172 * If the indicated rendering region has a visible portion that cannot 173 * be expressed as a single rectangle in the JDgaSurfaceInfo structure 174 * then JDGA_FAILED should be indicated so that the rendering library 175 * can back off to another rendering mechanism. 176 * 177 * @return 178 * JDGA_SUCCESS memory successfully locked and described 179 * JDGA_FAILED temporary failure to lock the specified Drawable 180 */ 181 typedef JDgaStatus 182 JDgaGetLockFunc(JNIEnv *env, Display *display, void **dgaDev, 183 Drawable d, JDgaSurfaceInfo *pSurface, 184 jint lox, jint loy, jint hix, jint hiy); 185 186 /* 187 * This function is called to unlock the locally addressable memory 188 * associated with the given X11 Drawable until the next rendering 189 * operation. The JDgaSurfaceInfo structure supplied is the same 190 * structure that was supplied in the dga_get_lock function and 191 * can be used to determine implementation specific data needed to 192 * manage the access lock for the indicated drawable. 193 * 194 * The return value indicates whether or not the library was able 195 * to successfully remove its lock. Typically failure indicates 196 * only that the lock had been invalidated through external means 197 * before the rendering library completed its work and is for 198 * informational purposes only, though it could also mean that 199 * the rendering library asked to unlock a Drawable that it had 200 * never locked. 201 * 202 * @return 203 * JDGA_SUCCESS lock successfully released 204 * JDGA_FAILED unable to release lock for some reason, 205 * typically the lock was already invalid 206 */ 207 typedef JDgaStatus 208 JDgaReleaseLockFunc(JNIEnv *env, void *dgaDev, Drawable d); 209 210 /* 211 * This function is called to inform the JDGA library that the 212 * AWT rendering library has enqueued an X11 request for the 213 * indicated Drawable. The JDGA library will have to synchronize 214 * the X11 output buffer with the server before this drawable 215 * is again locked in order to prevent race conditions between 216 * the rendering operations in the X11 queue and the rendering 217 * operations performed directly between calls to the GetLockFunc 218 * and the ReleaseLockFunc. 219 */ 220 typedef void 221 JDgaXRequestSentFunc(JNIEnv *env, void *dgaDev, Drawable d); 222 223 /* 224 * This function is called to shut down a JDGA library implementation 225 * and dispose of any resources that it is using for a given display. 226 * 227 */ 228 229 typedef void 230 JDgaLibDisposeFunc(JNIEnv *env); 231 232 struct _JDgaLibInfo { 233 /* 234 * The X11 display structure that this instance of JDgaLibInfo 235 * structure is tracking. 236 */ 237 Display *display; 238 239 /* 240 * Pointers to the utility functions to query information about 241 * X11 drawables and perform synchronization on them. 242 */ 243 JDgaGetLockFunc *pGetLock; 244 JDgaReleaseLockFunc *pReleaseLock; 245 JDgaXRequestSentFunc *pXRequestSent; 246 JDgaLibDisposeFunc *pLibDispose; 247 248 /* 249 * Since the JDGA library is responsible for allocating this 250 * structure, implementation specific information can be tracked 251 * by the library by declaring its own structure that contains 252 * data following the above members. 253 */ 254 }; 255 #endif /* !HEADLESS */