JOGL v2.6.0-rc-20250706
JOGL, High-Performance Graphics Binding for Java™ (public API).
X11GraphicsConfiguration.java
Go to the documentation of this file.
1/*
2 * Copyright (c) 2008 Sun Microsystems, Inc. All Rights Reserved.
3 * Copyright (c) 2010 JogAmp Community. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are
7 * met:
8 *
9 * - Redistribution of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * - Redistribution in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * Neither the name of Sun Microsystems, Inc. or the names of
17 * contributors may be used to endorse or promote products derived from
18 * this software without specific prior written permission.
19 *
20 * This software is provided "AS IS," without a warranty of any kind. ALL
21 * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES,
22 * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A
23 * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN
24 * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR
25 * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
26 * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR
27 * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR
28 * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE
29 * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY,
30 * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF
31 * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
32 */
33
34package com.jogamp.nativewindow.x11;
35
36import com.jogamp.common.util.Bitfield;
37import com.jogamp.nativewindow.CapabilitiesImmutable;
38
39import com.jogamp.nativewindow.MutableGraphicsConfiguration;
40
41import jogamp.nativewindow.x11.X11Capabilities;
42import jogamp.nativewindow.x11.X11Lib;
43import jogamp.nativewindow.x11.XRenderDirectFormat;
44import jogamp.nativewindow.x11.XRenderPictFormat;
45import jogamp.nativewindow.x11.XVisualInfo;
46
47/** Encapsulates a graphics configuration, or OpenGL pixel format, on
48 X11 platforms. Objects of this type are returned from {@link
49 com.jogamp.nativewindow.GraphicsConfigurationFactory#chooseGraphicsConfiguration
50 GraphicsConfigurationFactory.chooseGraphicsConfiguration()} on X11
51 platforms when toolkits other than the AWT are being used. */
52
53public class X11GraphicsConfiguration extends MutableGraphicsConfiguration implements Cloneable {
54 private XVisualInfo info;
55
56 // FBConfig
57
58 protected static XRenderDirectFormat XVisual2XRenderMask(final long dpy, final long visual) {
59 final XRenderPictFormat xRenderPictFormat = XRenderPictFormat.create();
60 return XVisual2XRenderMask(dpy, visual, xRenderPictFormat);
61 }
62 protected static XRenderDirectFormat XVisual2XRenderMask(final long dpy, final long visual, final XRenderPictFormat dest) {
63 if( !X11Lib.XRenderFindVisualFormat(dpy, visual, dest) ) {
64 return null;
65 } else {
66 return dest.getDirect();
67 }
68 }
69
70 public static X11Capabilities XVisualInfo2X11Capabilities(final X11GraphicsDevice device, final XVisualInfo info) {
71 final long display = device.getHandle();
72 final X11Capabilities res = new X11Capabilities(info);
73
74 final XRenderDirectFormat xrmask = ( null != info ) ? XVisual2XRenderMask( display, info.getVisual() ) : null ;
75 final int alphaMask = ( null != xrmask ) ? xrmask.getAlphaMask() : 0;
76 if( 0 < alphaMask ) {
77 res.setBackgroundOpaque(false);
78 res.setTransparentRedValue(xrmask.getRedMask());
79 res.setTransparentGreenValue(xrmask.getGreenMask());
80 res.setTransparentBlueValue(xrmask.getBlueMask());
81 res.setTransparentAlphaValue(alphaMask);
82 } else {
83 res.setBackgroundOpaque(true);
84 }
85 // ALPHA shall be set at last - due to it's auto setting by the above (!opaque / samples)
86 res.setRedBits (Bitfield.Util.bitCount((int)info.getRed_mask()));
87 res.setGreenBits (Bitfield.Util.bitCount((int)info.getGreen_mask()));
88 res.setBlueBits (Bitfield.Util.bitCount((int)info.getBlue_mask()));
89 res.setAlphaBits (Bitfield.Util.bitCount(alphaMask));
90
91 return res;
92 }
93
95 final CapabilitiesImmutable capsChosen, final CapabilitiesImmutable capsRequested,
96 final XVisualInfo info) {
97 super(screen, capsChosen, capsRequested);
98 this.info = info;
99 }
100
101 @Override
102 public Object clone() {
103 return super.clone();
104 }
105
106 final public XVisualInfo getXVisualInfo() {
107 return info;
108 }
109
110 final protected void setXVisualInfo(final XVisualInfo info) {
111 this.info = info;
112 }
113
114 final public int getXVisualID() {
115 return (null!=info)?(int)info.getVisualid():0;
116 }
117
118 @Override
119 public String toString() {
120 return getClass().getSimpleName()+"["+getScreen()+", visualID 0x" + Long.toHexString(getXVisualID()) +
121 ",\n\tchosen " + capabilitiesChosen+
122 ",\n\trequested " + capabilitiesRequested+
123 "]";
124 }
125}
final AbstractGraphicsScreen getScreen()
Return the screen this graphics configuration is valid for.
final long getHandle()
Returns the native handle of the underlying native device, if such thing exist.
Encapsulates a graphics configuration, or OpenGL pixel format, on X11 platforms.
static XRenderDirectFormat XVisual2XRenderMask(final long dpy, final long visual, final XRenderPictFormat dest)
X11GraphicsConfiguration(final X11GraphicsScreen screen, final CapabilitiesImmutable capsChosen, final CapabilitiesImmutable capsRequested, final XVisualInfo info)
static X11Capabilities XVisualInfo2X11Capabilities(final X11GraphicsDevice device, final XVisualInfo info)
static XRenderDirectFormat XVisual2XRenderMask(final long dpy, final long visual)
Encapsulates a graphics device on X11 platforms.
Encapsulates a screen index on X11 platforms.
Specifies an immutable set of capabilities that a window's rendering context must support,...