version 2.8
oscontext.c
1 #include <GL/oscontext.h>
2 #include "zbuffer.h"
3 #include "zgl.h"
4 #include <GL/gl.h>
5 #include <stdlib.h>
6 
7 static int buffercnt = 0;
8 
9 ostgl_context *
10 ostgl_create_context(const int xsize,
11  const int ysize,
12  const int depth,
13  void **framebuffers,
14  const int numbuffers)
15 {
16  ostgl_context *context;
17  int i;
18  ZBuffer *zb;
19 
20  gl_assert(depth == 16); /* support for other depths must include bpp
21  convertion */
22  gl_assert(numbuffers >= 1);
23 
24  context = gl_malloc(sizeof(ostgl_context));
25  gl_assert(context);
26  context->zbs = gl_malloc(sizeof(void*)*numbuffers);
27  context->framebuffers = gl_malloc(sizeof(void*)*numbuffers);
28 
29  gl_assert(context->zbs != NULL && context->framebuffers != NULL);
30 
31  for (i = 0; i < numbuffers; i++) {
32  context->framebuffers[i] = framebuffers[i];
33  zb = ZB_open(xsize, ysize, ZB_MODE_5R6G5B, 0, NULL, NULL, framebuffers[i]);
34  if (zb == NULL) {
35  fprintf(stderr, "Error while initializing Z buffer\n");
36  exit(1);
37  }
38  context->zbs[i] = zb;
39  }
40  if (++buffercnt == 1) {
41  glInit(context->zbs[0]);
42  }
43  context->xsize = xsize;
44  context->ysize = ysize;
45  context->numbuffers = numbuffers;
46  return context;
47 }
48 
49 void
50 ostgl_delete_context(ostgl_context *context)
51 {
52  int i;
53  for (i = 0; i < context->numbuffers; i++) {
54  ZB_close(context->zbs[i]);
55  }
56  gl_free(context->zbs);
57  gl_free(context->framebuffers);
58  gl_free(context);
59 
60  if (--buffercnt == 0) {
61  glClose();
62  }
63 }
64 
65 void
66 ostgl_make_current(ostgl_context *oscontext, const int idx)
67 {
68  GLContext *context = gl_get_context();
69  gl_assert(idx < oscontext->numbuffers);
70  context->zb = oscontext->zbs[idx];
71 }
72 
73 void
74 ostgl_resize(ostgl_context *context,
75  const int xsize,
76  const int ysize,
77  void **framebuffers)
78 {
79  int i;
80  for (i = 0; i < context->numbuffers; i++) {
81  ZB_resize(context->zbs[i], framebuffers[i], xsize, ysize);
82  }
83 }