Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/openjdk-multiarch-jdk8u
Path: blob/aarch64-shenandoah-jdk8u272-b10/jdk/src/solaris/native/sun/jdga/jdga.h
32287 views
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 */
256
257