TinyGL 0.4.1 for MinGW
nglx.c
Go to the documentation of this file.
1/* simple glx like driver for TinyGL and Nano X */
2#include <GL/gl.h>
3#include <GL/nglx.h>
4#include <microwin/nano-X.h>
5#include "zgl.h"
6
7typedef struct {
9 int xsize,ysize;
10 GR_DRAW_ID drawable;
11 GR_GC_ID gc;
12 int pixtype; /* pixel type in TinyGL */
14
16{
17 TinyNGLXContext *ctx;
18
19 if (shareList != NULL) {
20 gl_fatal_error("No sharing available in TinyGL");
21 }
22 ctx=gl_malloc(sizeof(TinyNGLXContext));
23 if (!ctx)
24 return NULL;
25 ctx->gl_context=NULL;
26 return (NGLXContext) ctx;
27}
28
30{
31 TinyNGLXContext *ctx = (TinyNGLXContext *) ctx1;
32 if (ctx->gl_context != NULL) {
33 glClose();
34 }
35 gl_free(ctx);
36}
37
38
39/* resize the glx viewport : we try to use the xsize and ysize
40 given. We return the effective size which is guaranted to be smaller */
41
42static int glX_resize_viewport(GLContext *c,int *xsize_ptr,int *ysize_ptr)
43{
44 TinyNGLXContext *ctx;
45 int xsize,ysize;
46
47 ctx=(TinyNGLXContext *)c->opaque;
48
49 xsize=*xsize_ptr;
50 ysize=*ysize_ptr;
51
52 /* we ensure that xsize and ysize are multiples of 2 for the zbuffer.
53 TODO: find a better solution */
54 xsize&=~3;
55 ysize&=~3;
56
57 if (xsize == 0 || ysize == 0) return -1;
58
59 *xsize_ptr=xsize;
60 *ysize_ptr=ysize;
61
62 ctx->xsize=xsize;
63 ctx->ysize=ysize;
64
65 /* resize the Z buffer */
66 ZB_resize(c->zb,NULL,xsize,ysize);
67 return 0;
68}
69
70/* we assume here that drawable is a window */
72 NGLXContext ctx1)
73{
74 TinyNGLXContext *ctx = (TinyNGLXContext *) ctx1;
75 int mode, xsize, ysize;
76 ZBuffer *zb;
77 GR_WINDOW_INFO win_info;
78
79 if (ctx->gl_context == NULL) {
80 /* create the TinyGL context */
81 GrGetWindowInfo(drawable, &win_info);
82
83 xsize = win_info.width;
84 ysize = win_info.height;
85
86 /* currently, we only support 16 bit rendering */
87 mode = ZB_MODE_5R6G5B;
88 zb=ZB_open(xsize,ysize,mode,0,NULL,NULL,NULL);
89 if (zb == NULL) {
90 fprintf(stderr, "Error while initializing Z buffer\n");
91 exit(1);
92 }
93
95
96 /* create a gc */
97 ctx->gc = GrNewGC();
98
99 /* initialisation of the TinyGL interpreter */
100 glInit(zb);
102 ctx->gl_context->opaque=(void *) ctx;
104
105 /* set the viewport : we force a call to glX_resize_viewport */
106 ctx->gl_context->viewport.xsize=-1;
107 ctx->gl_context->viewport.ysize=-1;
108
109 glViewport(0, 0, xsize, ysize);
110 }
111
112 return 1;
113}
114
116{
117 GLContext *gl_context;
118 TinyNGLXContext *ctx;
119
120 /* retrieve the current NGLXContext */
121 gl_context=gl_get_context();
122 ctx=(TinyNGLXContext *)gl_context->opaque;
123
124 GrArea(drawable, ctx->gc, 0, 0, ctx->xsize,
125 ctx->ysize, ctx->gl_context->zb->pbuf, ctx->pixtype);
126}
127
128
void gl_fatal_error(char *format,...)
Definition: error.c:4
#define MWPF_TRUECOLOR565
Definition: gdi.h:27
void glClose(void)
Definition: init.c:184
void glViewport(int x, int y, int width, int height)
Definition: api.c:341
void glInit(void *zbuffer)
Definition: init.c:30
int glX_resize_viewport(GLContext *c, int *xsize_ptr, int *ysize_ptr)
Definition: glx.c:220
GLContext * gl_get_context(void)
Definition: list.c:25
void gl_free(void *p)
Definition: memory.c:8
void * gl_malloc(int size)
Definition: memory.c:13
void glXDestroyContext(NGLXContext ctx1)
Definition: nglx.c:29
int nglXMakeCurrent(NGLXDrawable drawable, NGLXContext ctx1)
Definition: nglx.c:71
NGLXContext nglXCreateContext(NGLXContext shareList, int flags)
Definition: nglx.c:15
void nglXSwapBuffers(NGLXDrawable drawable)
Definition: nglx.c:115
void * NGLXContext
Definition: nglx.h:11
GR_DRAW_ID NGLXDrawable
Definition: nglx.h:12
Definition: zgl.h:159
ZBuffer * zb
Definition: zgl.h:161
void * opaque
Definition: zgl.h:272
GLViewport viewport
Definition: zgl.h:203
int(* gl_resize_viewport)(struct GLContext *c, int *xsize, int *ysize)
Definition: zgl.h:274
int ysize
Definition: zgl.h:91
int xsize
Definition: zgl.h:91
GR_GC_ID gc
Definition: nglx.c:11
GLContext * gl_context
Definition: nglx.c:8
GR_DRAW_ID drawable
Definition: nglx.c:10
int ysize
Definition: nglx.c:9
int pixtype
Definition: nglx.c:12
int xsize
Definition: nglx.c:9
PIXEL * pbuf
Definition: zbuffer.h:80
void ZB_resize(ZBuffer *zb, void *frame_buffer, int xsize, int ysize)
Definition: zbuffer.c:89
ZBuffer * ZB_open(int xsize, int ysize, int mode, int nb_colors, unsigned char *color_indexes, int *color_table, void *frame_buffer)
Definition: zbuffer.c:12
#define ZB_MODE_5R6G5B
Definition: zbuffer.h:27
if(p1->y > p2->y||(p1->y==p2->y &&p1->x > p2->x))
Definition: zline.h:17