本文整理汇总了C++中RootWindow函数的典型用法代码示例。如果您正苦于以下问题:C++ RootWindow函数的具体用法?C++ RootWindow怎么用?C++ RootWindow使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了RootWindow函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ungrab_keys
static void ungrab_keys(int screen)
{
Window root = RootWindow(dpy, screen);
XUngrabKey(dpy, AnyKey, AnyModifier, root);
}
示例2: main
int main(int argc, char**argv) {
char **missing_charset_list;
int missing_charset_count;
XGCValues xgcv;
unsigned long mask;
Display* dpy;
int scr;
gi_window_id_t w, root;
XSetWindowAttributes set_attr;
int i;
XIMStyle *style;
static char buf[128];
KeySym keysym = 0;
Status status;
XWMHints wm_hints;
XClassHint class_hints;
XIMStyle input_style = 0;
char **font_name_list;
char *def_string;
gi_ufont_t **font_struct_list;
char **font_encoding_list;
int nb_font;
int len = 0;
int no_xim = 0;
printf ("A -> %c \n", XUtf8Tolower('A'));
if (!setlocale(LC_ALL, ""))
puts("locale not supported by C library, locale unchanged");
if (!XSetLocaleModifiers(""))
puts("X locale modifiers not supported, using default");
dpy = gi_init();
if (!dpy) { puts("cannot open display.\n"); exit(-1); }
scr = DefaultScreen(dpy);
root = RootWindow(dpy, scr);
set_attr.event_mask = KeyPressMask|FocusChangeMask;
set_attr.background_pixel = WhitePixel(dpy, DefaultScreen(dpy));
set_attr.border_pixel = BlackPixel(dpy, DefaultScreen(dpy));
w = XCreateWindow(dpy, root, 10,10,200,100,0,
DefaultDepth(dpy, DefaultScreen(dpy)),
InputOutput, DefaultVisual(dpy, DefaultScreen(dpy)),
CWEventMask | CWBackPixel | CWBorderPixel, &set_attr);
if (!w) {
puts("cannot creat window.\n");
exit(-1);
}
class_hints.res_name = "test";
class_hints.res_class = "Test";
wm_hints.input = True;
wm_hints.flags = InputHint;
XmbSetWMProperties(dpy, w, "test", "test", NULL, 0,
NULL, &wm_hints, &class_hints);
XMapWindow(dpy, w);
xim_im = XOpenIM(dpy, NULL, "test", "Test");
if (!xim_im) {
puts("cannot Open Input Manager: Try default.\n");
XSetLocaleModifiers("@im=");
xim_im = XOpenIM(dpy, NULL, "test", "Test");
if (!xim_im) {
puts("Failed exiting.\n");
exit(-1);
}
}
XGetIMValues (xim_im, XNQueryInputStyle, &xim_styles, NULL, NULL);
for (i = 0, style = xim_styles->supported_styles;
i < xim_styles->count_styles; i++, style++) {
if (i == 0 && *style == (XIMStatusNone|XIMPreeditNone)) {
printf("this is not a XIM server !!!\n");
no_xim = 1;
}
printf("input style : 0x%X\n", *style);
}
xim_ic = XCreateIC(xim_im,
XNInputStyle,
(XIMPreeditNothing | XIMStatusNothing),
XNClientWindow, w,
XNFocusWindow, w,
NULL);
if (!xim_ic) {
puts("cannot create Input Context.\n");
exit(-1);
}
XFree(xim_styles);
XSetICFocus(xim_ic);
/***************************************************************
* I don't recommend to use a font base name list similar
* to the following one in a real application ;-)
* You should use an iso8859-1 font, plus a single font for
* your language.
***************************************************************/
fontset = XCreateUtf8FontStruct(dpy,
"-*-*-*-*-*-*-*-*-*-*-*-*-iso8858-3," /* not valid */
"-*-*-medium-r-*-*-*-*-*-*-*-*-iso8859-1,"
"-*-*-*-*-*-*-*-*-*-*-*-*-iso8859-6,"
//.........这里部分代码省略.........
示例3: Java_org_lwjgl_opengl_LinuxDisplay_getRootWindow
JNIEXPORT jlong JNICALL Java_org_lwjgl_opengl_LinuxDisplay_getRootWindow(JNIEnv *env, jclass clazz, jlong display, jint screen) {
Display *disp = (Display *)(intptr_t)display;
return RootWindow(disp, screen);
}
示例4: wincreat
int wincreat( int x, int y, int width, int height, char *title)
{
XSetWindowAttributes swa;
Colormap cmap;
XVisualInfo *vi;
int dummy;
GLXContext glcx;
XEvent event;
int attributes[] = { GLX_RGBA,
GLX_DEPTH_SIZE, 16,
GLX_RED_SIZE, 8,
GLX_GREEN_SIZE, 8,
GLX_BLUE_SIZE, 8,
GLX_ALPHA_SIZE, 8,
GLX_DOUBLEBUFFER,
None };
if( !(dpy = XOpenDisplay( NULL )) ) /* defaults to $DISPLAY */
{
fprintf( stderr, "Unable to open display.\n" );
exit( 1 );
} else {
/*printf( "Connected to display... %s (%s).\n", dpy->display_name, dpy->vendor );*/
} /* end if( ) */
if( !glXQueryExtension( dpy, &dummy, &dummy ) )
{
fprintf( stderr, "Unable to query GLX extensions.\n" );
exit( 1 );
} /* end if( ) */
if( !(vi = glXChooseVisual( dpy, DefaultScreen( dpy ), attributes )) )
{
fprintf( stderr, "Unable get a visual.\n" );
exit( 1 );
} /* end if( ) */
if( vi->class != TrueColor )
{
fprintf( stderr, "Need TrueColor class.\n" );
exit( 1 );
}
if( !(glcx = glXCreateContext( dpy, vi, None, GL_TRUE )) )
{
fprintf( stderr, "Unable create a GL context.\n" );
exit( 1 );
} /* end if( ) */
cmap = XCreateColormap( dpy, RootWindow( dpy, vi->screen ),
vi->visual, AllocNone );
swa.colormap = cmap;
swa.border_pixel = 0;
swa.event_mask = ExposureMask
| KeyPressMask
| StructureNotifyMask;
glwin = XCreateWindow( dpy,
RootWindow( dpy, vi->screen ),
x,
y,
width,
height,
0,
vi->depth,
InputOutput,
vi->visual,
CWBorderPixel |
CWColormap |
CWEventMask,
&swa
);
/* Make a clear cursor so it looks like we have none. */
{
Pixmap pixmap;
Cursor cursor;
XColor color;
char clear_bits[32];
memset(clear_bits, 0, sizeof(clear_bits));
pixmap = XCreatePixmapFromBitmapData(dpy, glwin, clear_bits,
16, 16, 1, 0, 1);
cursor = XCreatePixmapCursor(dpy, pixmap, pixmap, &color, &color, 8, 8);
XDefineCursor(dpy, glwin, cursor);
XFreePixmap(dpy, pixmap);
}
XSetStandardProperties( dpy, glwin, title, title, None, NULL, 0, NULL );
//.........这里部分代码省略.........
示例5: Fake_glXUseXFont
void
Fake_glXUseXFont(Font font, int first, int count, int listbase)
{
Display *dpy;
Window win;
Pixmap pixmap;
GC gc;
XGCValues values;
unsigned long valuemask;
XFontStruct *fs;
GLint swapbytes, lsbfirst, rowlength;
GLint skiprows, skippixels, alignment;
unsigned int max_width, max_height, max_bm_width, max_bm_height;
GLubyte *bm;
int i;
dpy = glXGetCurrentDisplay();
if (!dpy)
return; /* I guess glXMakeCurrent wasn't called */
win = RootWindow(dpy, DefaultScreen(dpy));
fs = XQueryFont(dpy, font);
if (!fs) {
_mesa_error(NULL, GL_INVALID_VALUE,
"Couldn't get font structure information");
return;
}
/* Allocate a bitmap that can fit all characters. */
max_width = fs->max_bounds.rbearing - fs->min_bounds.lbearing;
max_height = fs->max_bounds.ascent + fs->max_bounds.descent;
max_bm_width = (max_width + 7) / 8;
max_bm_height = max_height;
bm = (GLubyte *) MALLOC((max_bm_width * max_bm_height) * sizeof(GLubyte));
if (!bm) {
XFreeFontInfo(NULL, fs, 1);
_mesa_error(NULL, GL_OUT_OF_MEMORY,
"Couldn't allocate bitmap in glXUseXFont()");
return;
}
#if 0
/* get the page info */
pages = fs->max_char_or_byte2 - fs->min_char_or_byte2 + 1;
firstchar = (fs->min_byte1 << 8) + fs->min_char_or_byte2;
lastchar = (fs->max_byte1 << 8) + fs->max_char_or_byte2;
rows = fs->max_byte1 - fs->min_byte1 + 1;
unsigned int first_char, last_char, pages, rows;
#endif
/* Save the current packing mode for bitmaps. */
glGetIntegerv(GL_UNPACK_SWAP_BYTES, &swapbytes);
glGetIntegerv(GL_UNPACK_LSB_FIRST, &lsbfirst);
glGetIntegerv(GL_UNPACK_ROW_LENGTH, &rowlength);
glGetIntegerv(GL_UNPACK_SKIP_ROWS, &skiprows);
glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &skippixels);
glGetIntegerv(GL_UNPACK_ALIGNMENT, &alignment);
/* Enforce a standard packing mode which is compatible with
fill_bitmap() from above. This is actually the default mode,
except for the (non)alignment. */
glPixelStorei(GL_UNPACK_SWAP_BYTES, GL_FALSE);
glPixelStorei(GL_UNPACK_LSB_FIRST, GL_FALSE);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
pixmap = XCreatePixmap(dpy, win, 10, 10, 1);
values.foreground = BlackPixel(dpy, DefaultScreen(dpy));
values.background = WhitePixel(dpy, DefaultScreen(dpy));
values.font = fs->fid;
valuemask = GCForeground | GCBackground | GCFont;
gc = XCreateGC(dpy, pixmap, valuemask, &values);
XFreePixmap(dpy, pixmap);
#ifdef DEBUG
if (debug_xfonts)
dump_font_struct(fs);
#endif
for (i = 0; i < count; i++) {
unsigned int width, height, bm_width, bm_height;
GLfloat x0, y0, dx, dy;
XCharStruct *ch;
int x, y;
unsigned int c = first + i;
int list = listbase + i;
int valid;
/* check on index validity and get the bounds */
ch = isvalid(fs, c);
if (!ch) {
ch = &fs->max_bounds;
valid = 0;
}
else {
valid = 1;
}
//.........这里部分代码省略.........
示例6: setup
void
setup(void) {
int x, y, screen;
XSetWindowAttributes wa;
#ifdef XINERAMA
int n;
XineramaScreenInfo *info;
#endif
screen = DefaultScreen(dc->dpy);
root = RootWindow(dc->dpy, screen);
utf8 = XInternAtom(dc->dpy, "UTF8_STRING", False);
normcol[ColBG] = getcolor(dc, normbgcolor);
normcol[ColFG] = getcolor(dc, normfgcolor);
selcol[ColBG] = getcolor(dc, selbgcolor);
selcol[ColFG] = getcolor(dc, selfgcolor);
/* menu geometry */
bh = dc->font.height + 2;
lines = MAX(lines, 0);
mh = (MAX(MIN(lines + 1, itemcount), 1)) * bh;
if(height < mh) {
height = mh;
}
#ifdef XINERAMA
if((info = XineramaQueryScreens(dc->dpy, &n))) {
int i, di;
unsigned int du;
Window dw;
XQueryPointer(dc->dpy, root, &dw, &dw, &x, &y, &di, &di, &du);
for(i = 0; i < n; i++)
if((monitor == info[i].screen_number)
|| (monitor < 0 && INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height)))
break;
x = info[i].x_org;
y = info[i].y_org + (topbar ? 0 : info[i].height - height);
mw = info[i].width;
XFree(info);
}
else
#endif
{
x = 0;
y = topbar ? 0 : DisplayHeight(dc->dpy, screen) - height;
mw = DisplayWidth(dc->dpy, screen);
}
/* menu window */
wa.override_redirect = True;
wa.background_pixmap = ParentRelative;
wa.event_mask = ExposureMask | KeyPressMask | VisibilityChangeMask;
win = XCreateWindow(dc->dpy, root, x, y, mw, height, 0,
DefaultDepth(dc->dpy, screen), CopyFromParent,
DefaultVisual(dc->dpy, screen),
CWOverrideRedirect | CWBackPixmap | CWEventMask, &wa);
grabkeyboard();
resizedc(dc, mw, height);
inputw = MIN(inputw, mw/3);
promptw = prompt ? textw(dc, prompt) : 0;
XMapRaised(dc->dpy, win);
text[0] = '\0';
match();
}
示例7: DeleteXi18nAtom
static int DeleteXi18nAtom(Xi18n i18n_core)
{
Display *dpy = i18n_core->address.dpy;
Window root = RootWindow (dpy, DefaultScreen (dpy));
Atom realtype;
int realformat;
unsigned long bytesafter;
long *data=NULL;
unsigned long length;
Atom atom;
int i, ret;
int found;
char buf[256];
(void)snprintf(buf, 256, "@server=%s", i18n_core->address.im_name);
if ((atom = XInternAtom(dpy, buf, False)) == 0)
return False;
i18n_core->address.selection = atom;
if (XIM_Servers == None)
XIM_Servers = XInternAtom (dpy, XIM_SERVERS, False);
XGetWindowProperty (dpy,
root,
XIM_Servers,
0L,
1000000L,
False,
XA_ATOM,
&realtype,
&realformat,
&length,
&bytesafter,
(unsigned char **) (&data));
if (realtype != XA_ATOM || realformat != 32) {
if (data != NULL)
XFree ((char *) data);
return False;
}
found = False;
for (i = 0; i < length; i++) {
if (data[i] == atom) {
found = True;
break;
}
}
if (found == True) {
for (i=i+1; i<length; i++)
data[i-1] = data[i];
XChangeProperty (dpy,
root,
XIM_Servers,
XA_ATOM,
32,
PropModeReplace,
(unsigned char *)data,
length-1);
ret = True;
}
else {
XChangeProperty (dpy,
root,
XIM_Servers,
XA_ATOM,
32,
PropModePrepend,
(unsigned char *)data,
0);
ret = False;
}
if (data != NULL)
XFree ((char *) data);
return ret;
}
示例8: lookup
static Status
lookup(Display *dpy, int screen, VisualID visualid, Atom property,
XStandardColormap *cnew, Bool replace)
/*
* dpy - specifies display connection
* screen - specifies screen number
* visualid - specifies visualid for std map
* property - specifies colormap property name
* cnew - specifies a standard colormap
* replace - specifies whether to replace
*/
{
register int i;
int count;
XStandardColormap *stdcmaps, *s;
Window win = RootWindow(dpy, screen);
/* The property does not already exist */
if (! XGetRGBColormaps(dpy, win, &stdcmaps, &count, property)) {
if (cnew)
XSetRGBColormaps(dpy, win, cnew, 1, property);
return 0;
}
/* The property exists and is not describing the RGB_DEFAULT_MAP */
if (property != XA_RGB_DEFAULT_MAP) {
if (replace) {
XmuDeleteStandardColormap(dpy, screen, property);
if (cnew)
XSetRGBColormaps(dpy, win, cnew, 1, property);
}
XFree((char *)stdcmaps);
return 1;
}
/* The property exists and is RGB_DEFAULT_MAP */
for (i=0, s=stdcmaps; (i < count) && (s->visualid != visualid); i++, s++)
;
/* No RGB_DEFAULT_MAP property matches the given visualid */
if (i == count) {
if (cnew) {
XStandardColormap *m, *maps;
s = (XStandardColormap *) malloc((unsigned) ((count+1) * sizeof
(XStandardColormap)));
for (i = 0, m = s, maps = stdcmaps; i < count; i++, m++, maps++) {
m->colormap = maps->colormap;
m->red_max = maps->red_max;
m->red_mult = maps->red_mult;
m->green_max = maps->green_max;
m->green_mult = maps->green_mult;
m->blue_max = maps->blue_max;
m->blue_mult = maps->blue_mult;
m->base_pixel = maps->base_pixel;
m->visualid = maps->visualid;
m->killid = maps->killid;
}
m->colormap = cnew->colormap;
m->red_max = cnew->red_max;
m->red_mult = cnew->red_mult;
m->green_max = cnew->green_max;
m->green_mult = cnew->green_mult;
m->blue_max = cnew->blue_max;
m->blue_mult = cnew->blue_mult;
m->base_pixel = cnew->base_pixel;
m->visualid = cnew->visualid;
m->killid = cnew->killid;
XSetRGBColormaps(dpy, win, s, ++count, property);
free((char *) s);
}
XFree((char *) stdcmaps);
return 0;
}
/* Found an RGB_DEFAULT_MAP property with a matching visualid */
if (replace) {
/* Free old resources first - we may need them, particularly in
* the default colormap of the screen. However, because of this,
* it is possible that we will destroy the old resource and fail
* to create a new one if XmuStandardColormap() fails.
*/
if (count == 1) {
XmuDeleteStandardColormap(dpy, screen, property);
if (cnew)
XSetRGBColormaps(dpy, win, cnew, 1, property);
}
else {
XStandardColormap *map;
/* s still points to the matching standard colormap */
//.........这里部分代码省略.........
示例9: makeControlPanel
controlPanelStruct *
makeControlPanel(void)
{
Window cw;
int i,num;
controlPanelStruct *control;
buttonStruct *buttons;
controlXY cXY;
XSetWindowAttributes cwAttrib, controlAttrib;
XSizeHints sizehints;
Pixmap mousebits,mousemask;
XColor foreColor, backColor;
if (!(control = (controlPanelStruct *)malloc(sizeof(controlPanelStruct)))) {
fprintf(stderr,"Ran out of memory trying to create a control panel.\n");
exitWithAck(RootWindow(dsply,scrn),Window,-1);
}
cXY = getControlXY(0);
/* Define and assign a mouse cursor. */
mousebits = XCreateBitmapFromData(dsply,rtWindow,mouseBitmap_bits,
mouseBitmap_width,mouseBitmap_height);
mousemask = XCreateBitmapFromData(dsply,rtWindow,mouseMask_bits,
mouseMask_width,mouseMask_height);
cwAttrib.background_pixel = backgroundColor; /* controlBackground; */
cwAttrib.border_pixel = foregroundColor;
cwAttrib.backing_store = WhenMapped;
cwAttrib.event_mask = controlMASK;
cwAttrib.colormap = colorMap;
cwAttrib.override_redirect = overrideManager;
foreColor.pixel = controlCursorForeground;
XQueryColor(dsply,colorMap,&foreColor);
backColor.pixel = controlCursorBackground;
XQueryColor(dsply,colorMap,&backColor);
cwAttrib.cursor = XCreatePixmapCursor(dsply,mousebits,mousemask,
&foreColor,&backColor,
mouseBitmap_x_hot,mouseBitmap_y_hot);
cw = XCreateWindow(dsply,rtWindow,
cXY.putX,cXY.putY,controlWidth,controlHeight,3,
CopyFromParent,InputOutput,CopyFromParent,
controlCreateMASK,&cwAttrib);
sizehints.flags = PPosition | PSize;
sizehints.x = cXY.putX;
sizehints.y = cXY.putY;
sizehints.width = controlWidth;
sizehints.height = controlHeight;
/*** the None stands for icon pixmap...change.... ***/
XSetNormalHints(dsply,cw,&sizehints);
XSetStandardProperties(dsply,cw,"2D Control Panel","2D Control Panel",
None,NULL,0,&sizehints);
control->controlWindow = cw;
num = initButtons(control->buttonQueue);
control->numOfButtons = num;
buttons = control->buttonQueue;
for (i=0; i<num; i++) {
controlAttrib.event_mask = (control->buttonQueue[i]).mask;
(control->buttonQueue[i]).self = XCreateWindow(dsply,cw,
(control->buttonQueue[i]).buttonX,
(control->buttonQueue[i]).buttonY,
(control->buttonQueue[i]).buttonWidth,
(control->buttonQueue[i]).buttonHeight,
0,0,InputOnly,CopyFromParent,
buttonCreateMASK,&controlAttrib);
XMakeAssoc(dsply,table,(control->buttonQueue[i]).self,
&((control->buttonQueue[i]).buttonKey));
/* Use buttonKey instead of i because buttonKey has a permanent address */
XMapWindow(dsply,(control->buttonQueue[i]).self);
}
/* Create message window */
control->messageWindow = XCreateWindow(dsply,cw,0,controlMessageY,
controlWidth,controlMessageHeight,
0,0,InputOnly,CopyFromParent,
messageCreateMASK,&cwAttrib);
XMapWindow(dsply,control->messageWindow);
for (i=0; i<scaleArrowN; i++) {
scaleArrow[i].x += buttons[scale2D].buttonX;
scaleArrow[i].y += buttons[scale2D].buttonY;
}
for (i=0; i<translateArrowN; i++) {
translateArrow[i].x += buttons[translate2D].buttonX;
translateArrow[i].y += buttons[translate2D].buttonY;
}
viewport->justMadeControl = yes;
return(control);
} /* makeControlPanel() */
示例10: initGraphics
// Initializes and opens both X11 display and OpenGL ES.
static int initGraphics()
{
static const EGLint configAttribs[] =
{
#if (WINDOW_BPP == 16)
EGL_RED_SIZE, 5,
EGL_GREEN_SIZE, 5,
EGL_BLUE_SIZE, 5,
#elif (WINDOW_BPP == 32)
EGL_RED_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_BLUE_SIZE, 8,
#else
#error WINDOW_BPP must be 16 or 32
#endif
EGL_DEPTH_SIZE, 16,
EGL_ALPHA_SIZE, EGL_DONT_CARE,
EGL_STENCIL_SIZE, EGL_DONT_CARE,
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_NONE
};
EGLBoolean success;
EGLint numConfigs;
EGLint majorVersion;
EGLint minorVersion;
int importGLResult;
importGLResult = importGLInit();
if (!importGLResult)
return 0;
sDisplay = XOpenDisplay(NULL);
sEglDisplay = eglGetDisplay(sDisplay);
success = eglInitialize(sEglDisplay, &majorVersion, &minorVersion);
if (success != EGL_FALSE)
success = eglGetConfigs(sEglDisplay, NULL, 0, &numConfigs);
if (success != EGL_FALSE)
success = eglChooseConfig(sEglDisplay, configAttribs,
&sEglConfig, 1, &numConfigs);
if (success != EGL_FALSE)
{
sEglContext = eglCreateContext(sEglDisplay, sEglConfig, NULL, NULL);
if (sEglContext == EGL_NO_CONTEXT)
success = EGL_FALSE;
}
if (success != EGL_FALSE)
{
XSetWindowAttributes swa;
XVisualInfo *vi, tmp;
XSizeHints sh;
int n;
EGLint vid;
eglGetConfigAttrib(sEglDisplay, sEglConfig,
EGL_NATIVE_VISUAL_ID, &vid);
tmp.visualid = vid;
vi = XGetVisualInfo(sDisplay, VisualIDMask, &tmp, &n);
swa.colormap = XCreateColormap(sDisplay,
RootWindow(sDisplay, vi->screen),
vi->visual, AllocNone);
sh.flags = PMinSize | PMaxSize;
sh.min_width = sh.max_width = sWindowWidth;
sh.min_height = sh.max_height = sWindowHeight;
swa.border_pixel = 0;
swa.event_mask = ExposureMask | StructureNotifyMask |
KeyPressMask | ButtonPressMask | ButtonReleaseMask;
sWindow = XCreateWindow(sDisplay, RootWindow(sDisplay, vi->screen),
0, 0, sWindowWidth, sWindowHeight,
0, vi->depth, InputOutput, vi->visual,
CWBorderPixel | CWColormap | CWEventMask,
&swa);
XMapWindow(sDisplay, sWindow);
XSetStandardProperties(sDisplay, sWindow, sAppName, sAppName,
None, (void *)0, 0, &sh);
}
if (success != EGL_FALSE)
{
sEglSurface = eglCreateWindowSurface(sEglDisplay, sEglConfig,
(NativeWindowType)sWindow, NULL);
if (sEglSurface == EGL_NO_SURFACE)
success = EGL_FALSE;
}
if (success != EGL_FALSE)
success = eglMakeCurrent(sEglDisplay, sEglSurface,
sEglSurface, sEglContext);
if (success == EGL_FALSE)
checkEGLErrors();
return success != EGL_FALSE;
}
示例11: d
QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *)
: d(new QGLTemporaryContextPrivate)
{
d->initialized = false;
d->window = 0;
d->context = 0;
d->surface = 0;
int screen = 0;
d->display = QEgl::display();
EGLConfig config;
int numConfigs = 0;
EGLint attribs[] = {
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
#ifdef QT_OPENGL_ES_2
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
#endif
EGL_NONE
};
eglChooseConfig(d->display, attribs, &config, 1, &numConfigs);
if (!numConfigs) {
qWarning("QGLTemporaryContext: No EGL configurations available.");
return;
}
XVisualInfo visualInfo;
XVisualInfo *vi;
int numVisuals;
visualInfo.visualid = QEgl::getCompatibleVisualId(config);
vi = XGetVisualInfo(X11->display, VisualIDMask, &visualInfo, &numVisuals);
if (!vi || numVisuals < 1) {
qWarning("QGLTemporaryContext: Unable to get X11 visual info id.");
return;
}
XSetWindowAttributes attr;
unsigned long mask;
attr.background_pixel = 0;
attr.border_pixel = 0;
attr.colormap = XCreateColormap(X11->display, DefaultRootWindow(X11->display), vi->visual, AllocNone);
attr.event_mask = StructureNotifyMask | ExposureMask;
mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
d->window = XCreateWindow(X11->display, RootWindow(X11->display, screen),
0, 0, 1, 1, 0,
vi->depth, InputOutput, vi->visual,
mask, &attr);
d->surface = eglCreateWindowSurface(d->display, config, (EGLNativeWindowType) d->window, NULL);
if (d->surface == EGL_NO_SURFACE) {
qWarning("QGLTemporaryContext: Error creating EGL surface.");
XFree(vi);
XDestroyWindow(X11->display, d->window);
return;
}
EGLint contextAttribs[] = {
#ifdef QT_OPENGL_ES_2
EGL_CONTEXT_CLIENT_VERSION, 2,
#endif
EGL_NONE
};
d->context = eglCreateContext(d->display, config, 0, contextAttribs);
if (d->context != EGL_NO_CONTEXT
&& eglMakeCurrent(d->display, d->surface, d->surface, d->context))
{
d->initialized = true;
} else {
qWarning("QGLTemporaryContext: Error creating EGL context.");
eglDestroySurface(d->display, d->surface);
XDestroyWindow(X11->display, d->window);
}
XFree(vi);
}
示例12: print_screen_info
static Bool
print_screen_info(Display *dpy, int scrnum, Bool allowDirect,
Bool coreProfile, Bool es2Profile, Bool limits,
Bool singleLine, Bool coreWorked)
{
Window win;
XSetWindowAttributes attr;
unsigned long mask;
Window root;
GLXContext ctx = NULL;
XVisualInfo *visinfo;
int width = 100, height = 100;
GLXFBConfig *fbconfigs;
const char *oglstring = coreProfile ? "OpenGL core profile" :
es2Profile ? "OpenGL ES profile" : "OpenGL";
root = RootWindow(dpy, scrnum);
/*
* Choose FBConfig or XVisualInfo and create a context.
*/
fbconfigs = choose_fb_config(dpy, scrnum);
if (fbconfigs) {
ctx = create_context_with_config(dpy, fbconfigs[0],
coreProfile, es2Profile, allowDirect);
if (!ctx && allowDirect && !coreProfile) {
/* try indirect */
ctx = create_context_with_config(dpy, fbconfigs[0],
coreProfile, es2Profile, False);
}
visinfo = glXGetVisualFromFBConfig(dpy, fbconfigs[0]);
XFree(fbconfigs);
}
else if (!coreProfile && !es2Profile) {
visinfo = choose_xvisinfo(dpy, scrnum);
if (visinfo)
ctx = glXCreateContext(dpy, visinfo, NULL, allowDirect);
} else
visinfo = NULL;
if (!visinfo && !coreProfile && !es2Profile) {
fprintf(stderr, "Error: couldn't find RGB GLX visual or fbconfig\n");
return False;
}
if (!ctx) {
if (!coreProfile && !es2Profile)
fprintf(stderr, "Error: glXCreateContext failed\n");
XFree(visinfo);
return False;
}
/*
* Create a window so that we can just bind the context.
*/
attr.background_pixel = 0;
attr.border_pixel = 0;
attr.colormap = XCreateColormap(dpy, root, visinfo->visual, AllocNone);
attr.event_mask = StructureNotifyMask | ExposureMask;
mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
win = XCreateWindow(dpy, root, 0, 0, width, height,
0, visinfo->depth, InputOutput,
visinfo->visual, mask, &attr);
if (glXMakeCurrent(dpy, win, ctx)) {
const char *serverVendor = glXQueryServerString(dpy, scrnum, GLX_VENDOR);
const char *serverVersion = glXQueryServerString(dpy, scrnum, GLX_VERSION);
const char *serverExtensions = glXQueryServerString(dpy, scrnum, GLX_EXTENSIONS);
const char *clientVendor = glXGetClientString(dpy, GLX_VENDOR);
const char *clientVersion = glXGetClientString(dpy, GLX_VERSION);
const char *clientExtensions = glXGetClientString(dpy, GLX_EXTENSIONS);
const char *glxExtensions = glXQueryExtensionsString(dpy, scrnum);
const char *glVendor = (const char *) glGetString(GL_VENDOR);
const char *glRenderer = (const char *) glGetString(GL_RENDERER);
const char *glVersion = (const char *) glGetString(GL_VERSION);
char *glExtensions;
int glxVersionMajor;
int glxVersionMinor;
char *displayName = NULL;
char *colon = NULL, *period = NULL;
struct ext_functions extfuncs;
CheckError(__LINE__);
/* Get some ext functions */
extfuncs.GetProgramivARB = (GETPROGRAMIVARBPROC)
glXGetProcAddressARB((GLubyte *) "glGetProgramivARB");
extfuncs.GetStringi = (GETSTRINGIPROC)
glXGetProcAddressARB((GLubyte *) "glGetStringi");
extfuncs.GetConvolutionParameteriv = (GETCONVOLUTIONPARAMETERIVPROC)
glXGetProcAddressARB((GLubyte *) "glGetConvolutionParameteriv");
/* Get list of GL extensions */
if (coreProfile) {
glExtensions = build_core_profile_extension_list(&extfuncs);
}
else {
glExtensions = (char *) glGetString(GL_EXTENSIONS);
}
//.........这里部分代码省略.........
示例13: iupdrvImageCreateImage
void* iupdrvImageCreateImage(Ihandle *ih, const char* bgcolor, int make_inactive)
{
int y, x, bpp, bgcolor_depend = 0,
width = ih->currentwidth,
height = ih->currentheight;
unsigned char *imgdata = (unsigned char*)ih->handle;
Pixmap pixmap;
unsigned char bg_r=0, bg_g=0, bg_b=0;
GC gc;
Pixel color2pixel[256];
bpp = iupAttribGetInt(ih, "BPP");
iupStrToRGB(bgcolor, &bg_r, &bg_g, &bg_b);
if (bpp == 8)
{
int i, colors_count = 0;
iupColor colors[256];
iupImageInitColorTable(ih, colors, &colors_count);
for (i=0;i<colors_count;i++)
{
if (colors[i].a == 0)
{
colors[i].r = bg_r;
colors[i].g = bg_g;
colors[i].b = bg_b;
colors[i].a = 255;
bgcolor_depend = 1;
}
if (make_inactive)
iupImageColorMakeInactive(&(colors[i].r), &(colors[i].g), &(colors[i].b),
bg_r, bg_g, bg_b);
color2pixel[i] = iupmotColorGetPixel(colors[i].r, colors[i].g, colors[i].b);
}
}
pixmap = XCreatePixmap(iupmot_display,
RootWindow(iupmot_display,iupmot_screen),
width, height, iupdrvGetScreenDepth());
if (!pixmap)
return NULL;
gc = XCreateGC(iupmot_display,pixmap,0,NULL);
for (y=0;y<height;y++)
{
for(x=0;x<width;x++)
{
unsigned long p;
if (bpp == 8)
p = color2pixel[imgdata[y*width+x]];
else
{
int channels = (bpp==24)? 3: 4;
unsigned char *pixel_data = imgdata + y*width*channels + x*channels;
unsigned char r = *(pixel_data),
g = *(pixel_data+1),
b = *(pixel_data+2);
if (bpp == 32)
{
unsigned char a = *(pixel_data+3);
if (a != 255)
{
r = iupALPHABLEND(r, bg_r, a);
g = iupALPHABLEND(g, bg_g, a);
b = iupALPHABLEND(b, bg_b, a);
bgcolor_depend = 1;
}
}
if (make_inactive)
iupImageColorMakeInactive(&r, &g, &b, bg_r, bg_g, bg_b);
p = iupmotColorGetPixel(r, g, b);
}
XSetForeground(iupmot_display,gc,p);
XDrawPoint(iupmot_display,pixmap,gc,x,y);
}
}
XFreeGC(iupmot_display,gc);
if (bgcolor_depend || make_inactive)
iupAttribSetStr(ih, "_IUP_BGCOLOR_DEPEND", "1");
return (void*)pixmap;
}
示例14: iupdrvImageCreateCursor
void* iupdrvImageCreateCursor(Ihandle *ih)
{
int bpp,y,x,hx,hy,
width = ih->currentwidth,
height = ih->currentheight,
line_size = (width+7)/8,
size_bytes = line_size*height;
unsigned char *imgdata = (unsigned char*)ih->handle;
char *sbits, *mbits, *sb, *mb;
Pixmap source, mask;
XColor fg, bg;
unsigned char r, g, b;
Cursor cursor;
bpp = iupAttribGetInt(ih, "BPP");
if (bpp > 8)
return NULL;
sbits = (char*)malloc(2*size_bytes);
if (!sbits) return (Cursor)NULL;
memset(sbits, 0, 2*size_bytes);
mbits = sbits + size_bytes;
sb = sbits;
mb = mbits;
for (y=0; y<height; y++)
{
for (x=0; x<width; x++)
{
int byte = x/8;
int bit = x%8;
int cor = (int)imgdata[y*width+x];
if (cor == 1)
sb[byte] = (char)(sb[byte] | (1<<bit));
if (cor != 0)
mb[byte] = (char)(mb[byte] | (1<<bit));
}
sb += line_size;
mb += line_size;
}
r = 255; g = 255; b = 255;
iupStrToRGB(iupAttribGet(ih, "1"), &r, &g, &b );
fg.red = iupCOLOR8TO16(r);
fg.green = iupCOLOR8TO16(g);
fg.blue = iupCOLOR8TO16(b);
fg.flags = DoRed | DoGreen | DoBlue;
r = 0; g = 0; b = 0;
iupStrToRGB(iupAttribGet(ih, "2"), &r, &g, &b );
bg.red = iupCOLOR8TO16(r);
bg.green = iupCOLOR8TO16(g);
bg.blue = iupCOLOR8TO16(b);
bg.flags = DoRed | DoGreen | DoBlue;
hx=0; hy=0;
iupStrToIntInt(iupAttribGet(ih, "HOTSPOT"), &hx, &hy, ':');
source = XCreateBitmapFromData(iupmot_display,
RootWindow(iupmot_display,iupmot_screen),
sbits, width, height);
mask = XCreateBitmapFromData(iupmot_display,
RootWindow(iupmot_display,iupmot_screen),
mbits, width, height);
cursor = XCreatePixmapCursor(iupmot_display, source, mask, &fg, &bg, hx, hy);
free(sbits);
return (void*)cursor;
}
示例15: choose_cmap
static Colormap choose_cmap( Display *dpy, XVisualInfo *vi )
{
if ( !cmap_dict ) {
cmap_dict = new QIntDict<CMapEntry>;
const char *v = glXQueryServerString( dpy, vi->screen, GLX_VERSION );
if ( v )
mesa_gl = strstr(v,"Mesa") != 0;
qAddPostRoutine( cleanup_cmaps );
}
CMapEntry *x = cmap_dict->find( (long) vi->visualid + ( vi->screen * 256 ) );
if ( x ) // found colormap for visual
return x->cmap;
x = new CMapEntry();
XStandardColormap *c;
int n, i;
// qDebug( "Choosing cmap for vID %0x", vi->visualid );
if ( vi->visualid ==
XVisualIDFromVisual( (Visual*)QPaintDevice::x11AppVisual( vi->screen ) ) ) {
// qDebug( "Using x11AppColormap" );
return QPaintDevice::x11AppColormap( vi->screen );
}
if ( mesa_gl ) { // we're using MesaGL
Atom hp_cmaps = XInternAtom( dpy, "_HP_RGB_SMOOTH_MAP_LIST", TRUE );
if ( hp_cmaps && vi->visual->c_class == TrueColor && vi->depth == 8 ) {
if ( XGetRGBColormaps(dpy,RootWindow(dpy,vi->screen),&c,&n,
hp_cmaps) ) {
i = 0;
while ( i < n && x->cmap == 0 ) {
if ( c[i].visualid == vi->visual->visualid ) {
x->cmap = c[i].colormap;
x->scmap = c[i];
//qDebug( "Using HP_RGB scmap" );
}
i++;
}
XFree( (char *)c );
}
}
}
#if !defined(Q_OS_SOLARIS)
if ( !x->cmap ) {
#ifdef QT_DLOPEN_OPENGL
typedef Status (*_XmuLookupStandardColormap)( Display *dpy, int screen, VisualID visualid, unsigned int depth,
Atom property, Bool replace, Bool retain );
_XmuLookupStandardColormap qt_XmuLookupStandardColormap;
qt_XmuLookupStandardColormap = (_XmuLookupStandardColormap) QLibrary::resolve("Xmu", "XmuLookupStandardColormap");
if (!qt_XmuLookupStandardColormap)
qFatal("Unable to resolve Xmu symbols - please check your Xmu library installation.");
#define XmuLookupStandardColormap qt_XmuLookupStandardColormap
#endif
if ( XmuLookupStandardColormap(dpy,vi->screen,vi->visualid,vi->depth,
XA_RGB_DEFAULT_MAP,FALSE,TRUE) ) {
if ( XGetRGBColormaps(dpy,RootWindow(dpy,vi->screen),&c,&n,
XA_RGB_DEFAULT_MAP) ) {
i = 0;
while ( i < n && x->cmap == 0 ) {
if ( c[i].visualid == vi->visualid ) {
x->cmap = c[i].colormap;
x->scmap = c[i];
//qDebug( "Using RGB_DEFAULT scmap" );
}
i++;
}
XFree( (char *)c );
}
}
}
#endif
if ( !x->cmap ) { // no shared cmap found
x->cmap = XCreateColormap( dpy, RootWindow(dpy,vi->screen), vi->visual,
AllocNone );
x->alloc = TRUE;
// qDebug( "Allocating cmap" );
}
// associate cmap with visualid
cmap_dict->insert( (long) vi->visualid + ( vi->screen * 256 ), x );
return x->cmap;
}