jdk/src/java.desktop/unix/native/libsunwjdga/jdga.h
changeset 47213 57173ad5c534
parent 47212 000f4e4ddd39
parent 47211 75e8600f1136
child 47214 22850b3a5524
equal deleted inserted replaced
47212:000f4e4ddd39 47213:57173ad5c534
     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 */