15 #include <grass/glocale.h>
16 #include <grass/nviz.h>
26 struct render_window *rwin;
29 rwin = (
struct render_window *)G_malloc(
sizeof(
struct render_window));
41 #if defined(OPENGL_X11)
42 rwin->displayId =
NULL;
43 rwin->contextId =
NULL;
46 #elif defined(OPENGL_AQUA)
47 rwin->pixelFmtId =
NULL;
48 rwin->contextId =
NULL;
49 rwin->windowId =
NULL;
50 #elif defined(OPENGL_WINDOWS)
51 rwin->displayId =
NULL;
52 rwin->contextId =
NULL;
53 rwin->bitmapId =
NULL;
64 #if defined(OPENGL_X11)
65 glXDestroyContext(rwin->displayId, rwin->contextId);
66 glXDestroyGLXPixmap(rwin->displayId, rwin->windowId);
67 XFreePixmap(rwin->displayId, rwin->pixmap);
68 #elif defined(OPENGL_AQUA)
69 aglDestroyPixelFormat(rwin->pixelFmtId);
70 aglDestroyContext(rwin->contextId);
71 aglDestroyPBuffer(rwin->windowId);
73 #elif defined(OPENGL_WINDOWS)
74 wglDeleteContext(rwin->contextId);
75 DeleteDC(rwin->displayId);
76 DeleteObject(rwin->bitmapId);
95 #if defined(OPENGL_X11)
96 int attributeList[] = { GLX_RGBA, GLX_RED_SIZE, 1,
97 GLX_GREEN_SIZE, 1, GLX_BLUE_SIZE, 1,
98 GLX_DEPTH_SIZE, 1, None
102 rwin->displayId = XOpenDisplay((
char *)display);
103 if (!rwin->displayId) {
107 v = glXChooseVisual(rwin->displayId,
108 DefaultScreen(rwin->displayId), attributeList);
110 rwin->contextId = glXCreateContext(rwin->displayId, v,
NULL, GL_FALSE);
112 if (!rwin->contextId) {
117 rwin->pixmap = XCreatePixmap(rwin->displayId,
118 RootWindow(rwin->displayId, v->screen),
119 width, height, v->depth);
122 rwin->windowId = glXCreateGLXPixmap(rwin->displayId, v, rwin->pixmap);
127 #elif defined(OPENGL_AQUA)
128 int attributeList[] = { AGL_RGBA, AGL_RED_SIZE, 1,
129 AGL_GREEN_SIZE, 1, AGL_BLUE_SIZE, 1,
130 AGL_DEPTH_SIZE, 1, AGL_NONE
135 rwin->pixelFmtId = aglChoosePixelFormat(
NULL, 0, attributeList);
137 rwin->contextId = aglCreateContext(rwin->pixelFmtId,
NULL);
140 aglCreatePBuffer(width, height, GL_TEXTURE_2D, GL_RGBA, 0, &(rwin->windowId));
141 #elif defined(OPENGL_WINDOWS)
142 PIXELFORMATDESCRIPTOR pfd = {
143 sizeof(PIXELFORMATDESCRIPTOR),
164 rwin->displayId = CreateCompatibleDC(
NULL);
165 iPixelFormat = ChoosePixelFormat(rwin->displayId, &pfd);
166 SetPixelFormat(rwin->displayId, iPixelFormat, &pfd);
167 rwin->bitmapId = CreateCompatibleBitmap(rwin->displayId, width, height);
168 SelectObject(rwin->displayId, rwin->bitmapId);
169 rwin->contextId = wglCreateContext(rwin->displayId);
185 #if defined(OPENGL_X11)
186 if (!rwin->displayId || !rwin->contextId)
189 if (rwin->contextId == glXGetCurrentContext())
192 glXMakeCurrent(rwin->displayId, rwin->windowId, rwin->contextId);
193 #elif defined(OPENGL_AQUA)
194 if (!rwin->contextId)
197 if (rwin->contextId == aglGetCurrentContext())
200 aglSetCurrentContext(rwin->contextId);
201 aglSetPBuffer(rwin->contextId, rwin->windowId, 0, 0, 0);
202 #elif defined(OPENGL_WINDOWS)
203 if (!rwin->displayId || !rwin->contextId)
206 wglMakeCurrent(rwin->displayId, rwin->contextId);