8 #include <X11/extensions/shape.h>
16 static int x_error_handler(Display * disp, XErrorEvent * error)
19 XGetErrorText(disp, error->error_code, buf, 1024);
29 int main(int argc, char **argv)
35 XEvent report, report2;
37 Atom delete_win, protocols;
41 { GLX_DEPTH_SIZE, 1, GLX_DOUBLEBUFFER, GLX_RGBA, None };
43 struct GlftFont *font;
46 printf("Usage: %s fontname text\n", argv[0]);
50 if (!GlftInit()) return 1;
52 if (!(display = XOpenDisplay(NULL))) {
53 fprintf(stderr, "couldn't connect to X server in DISPLAY\n");
57 font = GlftFontOpen(display, DefaultScreen(display), argv[1]);
60 XSetErrorHandler(x_error_handler);
61 win = XCreateWindow(display, RootWindow(display, DefaultScreen(display)),
63 CopyFromParent, /* depth */
64 CopyFromParent, /* class */
65 CopyFromParent, /* visual */
68 chint.res_name = "glfttest";
69 chint.res_class = "Glfttest";
70 XSetClassHint(display, win, &chint);
71 XSelectInput(display, win, ExposureMask | StructureNotifyMask);
72 XMapWindow(display, win);
74 vi = glXChooseVisual(display, DefaultScreen(display), config);
76 printf("no conforming visual\n");
77 cont = glXCreateContext(display, vi, NULL, GL_TRUE);
79 printf("context creation failed\n");
80 glXMakeCurrent(display, win, cont);
82 delete_win = XInternAtom(display, "WM_DELETE_WINDOW", False);
83 protocols = XInternAtom(display, "WM_PROTOCOLS", False);
84 XSetWMProtocols(display, win, &delete_win, 1);
85 glMatrixMode(GL_PROJECTION);
87 glOrtho(-50, W-50, -100, H-100, 0, 10);
88 glMatrixMode(GL_MODELVIEW);
89 glEnable(GL_TEXTURE_2D);
90 glClearColor(0.0, 0.0, 1.0, 0.0);
91 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
95 XNextEvent(display, &report);
96 switch (report.type) {
98 if ((Atom)report.xclient.message_type == protocols)
99 if ((Atom)report.xclient.data.l[0] == delete_win)
102 glClear(GL_COLOR_BUFFER_BIT);
103 col.r = 0.0; col.g = 0.0; col.b = 0.0; col.a = 1.0;
104 GlftRenderString(font, argv[2], strlen(argv[2]), &col, 9, -9);
105 col.r = 1.0; col.g = 1.0; col.b = 0.0; col.a = 0.25;
106 GlftRenderString(font, argv[2], strlen(argv[2]), &col, 0, 0);
107 glXSwapBuffers(display, win);
108 case ConfigureNotify: