| 178 | |
| 179 | |
| 180 | void drawableInit(void) |
| 181 | { |
| 182 | int pbattribs[] = { GLX_PBUFFER_WIDTH, 0, GLX_PBUFFER_HEIGHT, 0, None }; |
| 183 | |
| 184 | // Use GLX 1.1 functions here in case we're remotely displaying to |
| 185 | // something that doesn't support GLX 1.3 |
| 186 | if(useWindow || usePixmap || useFBO) |
| 187 | { |
| 188 | if(!(ctx = glXCreateContext(dpy, v, NULL, True))) |
| 189 | THROW("Could not create GL context"); |
| 190 | |
| 191 | if(usePixmap) |
| 192 | { |
| 193 | if(!(glxpm = glXCreateGLXPixmap(dpy, v, pm))) |
| 194 | THROW("Could not creaate GLX pixmap"); |
| 195 | } |
| 196 | glXMakeCurrent(dpy, usePixmap ? glxpm : win, ctx); |
| 197 | |
| 198 | #ifdef GL_EXT_framebuffer_object |
| 199 | if(useFBO) |
| 200 | { |
| 201 | GLenum format = useAlpha ? GL_RGBA8 : GL_RGB8; |
| 202 | if(v->depth == 30) format = useAlpha ? GL_RGB10_A2 : GL_RGB10; |
| 203 | glGenFramebuffersEXT(1, &fbo); |
| 204 | glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); |
| 205 | if(useRTT) |
| 206 | { |
| 207 | glGenTextures(1, &texture); |
| 208 | glBindTexture(GL_TEXTURE_RECTANGLE_ARB, texture); |
| 209 | glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MIN_FILTER, |
| 210 | GL_LINEAR); |
| 211 | glTexParameteri(GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_MAG_FILTER, |
| 212 | GL_LINEAR); |
| 213 | glTexImage2D(GL_TEXTURE_RECTANGLE_ARB, 0, format, drawableWidth, |
| 214 | drawableHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL); |
| 215 | glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, |
| 216 | GL_TEXTURE_RECTANGLE_ARB, texture, 0); |
| 217 | } |
| 218 | else |
| 219 | { |
| 220 | glGenRenderbuffersEXT(1, &rbo); |
| 221 | glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, rbo); |
| 222 | glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, format, drawableWidth, |
| 223 | drawableHeight); |
| 224 | glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, |
| 225 | GL_COLOR_ATTACHMENT0_EXT, GL_RENDERBUFFER_EXT, rbo); |
| 226 | } |
| 227 | if(glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) |
| 228 | != GL_FRAMEBUFFER_COMPLETE_EXT) |
| 229 | THROW("Could not create FBO"); |
| 230 | } |
| 231 | #endif |
| 232 | return; |
| 233 | } |
| 234 | |
| 235 | ctx = glXCreateNewContext(dpy, c, GLX_RGBA_TYPE, NULL, True); |
| 236 | if(!ctx) THROW("Could not create GL context"); |
| 237 |
no test coverage detected