*/\r
\r
/*\r
- * DOS/DJGPP device driver v0.3 for Mesa 4.0\r
+ * DOS/DJGPP device driver v1.1 for Mesa 4.0\r
*\r
* Copyright (C) 2002 - Borca Daniel\r
* Email : dborca@yahoo.com\r
* Add system-specific fields to it.\r
*/\r
struct dmesa_buffer {\r
- GLframebuffer *gl_buffer; /* The depth, stencil, accum, etc buffers */\r
+ GLframebuffer gl_buffer; /* The depth, stencil, accum, etc buffers */\r
void *the_window; /* your window handle, etc */\r
\r
int xpos, ypos; /* position */\r
int width, height; /* size in pixels */\r
- int bwidth, len; /* bytes in a line, then total */\r
+ int bypp, stride, bytes; /* bytes per pixel, in a line, then total */\r
};\r
\r
/*\r
if (*colorMask==0xffffffff) {\r
if (mask & DD_BACK_LEFT_BIT) {\r
if (all) {\r
- vl_clear(b->the_window, b->len, c->ClearColor);\r
+ vl_clear(b->the_window, b->bytes, c->ClearColor);\r
} else {\r
vl_rect(b->the_window, x, y, width, height, c->ClearColor);\r
}\r
static void set_read_buffer (GLcontext *ctx, GLframebuffer *buffer,\r
GLenum mode)\r
{\r
-/*\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
- dmesa_update_state(ctx);\r
-*/\r
+ /*\r
+ XXX this has to be fixed\r
+ */\r
}\r
\r
\r
/*\r
* Set the destination/draw buffer.\r
*/\r
-static GLboolean set_draw_buffer (GLcontext *ctx, GLenum mode)\r
+static void set_draw_buffer (GLcontext *ctx, GLenum mode)\r
{\r
- if (mode==GL_BACK_LEFT) {\r
- return GL_TRUE;\r
- } else {\r
- return GL_FALSE;\r
- }\r
+ /*\r
+ XXX this has to be fixed\r
+ */\r
}\r
\r
\r
* If anything special has to been done when the buffer/window is\r
* resized, do it now.\r
*/\r
-static void get_buffer_size (GLcontext *ctx, GLuint *width, GLuint *height)\r
+static void get_buffer_size (GLframebuffer *buffer, GLuint *width, GLuint *height)\r
{\r
- DMesaContext c = (DMesaContext)ctx->DriverCtx;\r
+ DMesaBuffer b = (DMesaBuffer)buffer;\r
\r
- *width = c->Buffer->width;\r
- *height = c->Buffer->height;\r
+ *width = b->width;\r
+ *height = b->height;\r
}\r
\r
\r
{\r
switch (name) {\r
case GL_RENDERER:\r
- return (const GLubyte *)"DOS Mesa";\r
+ return (const GLubyte *)"Mesa DJGPP\0port (c) Borca Daniel 3-sep-2002";\r
default:\r
return NULL;\r
}\r
ctx->Driver.Accum = _swrast_Accum;\r
ctx->Driver.Bitmap = _swrast_Bitmap;\r
ctx->Driver.Clear = clear;\r
- ctx->Driver.ResizeBuffersMESA = _swrast_alloc_buffers;\r
+ ctx->Driver.ResizeBuffers = _swrast_alloc_buffers;\r
ctx->Driver.CopyPixels = _swrast_CopyPixels;\r
ctx->Driver.DrawPixels = _swrast_DrawPixels;\r
ctx->Driver.ReadPixels = _swrast_ReadPixels;\r
ctx->Driver.TexSubImage3D = _mesa_store_texsubimage3d;\r
ctx->Driver.TestProxyTexImage = _mesa_test_proxy_teximage;\r
\r
+ ctx->Driver.CompressedTexImage1D = _mesa_store_compressed_teximage1d;\r
+ ctx->Driver.CompressedTexImage2D = _mesa_store_compressed_teximage2d;\r
+ ctx->Driver.CompressedTexImage3D = _mesa_store_compressed_teximage3d;\r
+ ctx->Driver.CompressedTexSubImage1D = _mesa_store_compressed_texsubimage1d;\r
+ ctx->Driver.CompressedTexSubImage2D = _mesa_store_compressed_texsubimage2d;\r
+ ctx->Driver.CompressedTexSubImage3D = _mesa_store_compressed_texsubimage3d;\r
+\r
ctx->Driver.CopyTexImage1D = _swrast_copy_teximage1d;\r
ctx->Driver.CopyTexImage2D = _swrast_copy_teximage2d;\r
ctx->Driver.CopyTexSubImage1D = _swrast_copy_texsubimage1d;\r
ctx->Driver.CopyTexSubImage2D = _swrast_copy_texsubimage2d;\r
ctx->Driver.CopyTexSubImage3D = _swrast_copy_texsubimage3d;\r
\r
- ctx->Driver.BaseCompressedTexFormat = _mesa_base_compressed_texformat;\r
- ctx->Driver.CompressedTextureSize = _mesa_compressed_texture_size;\r
- ctx->Driver.GetCompressedTexImage = _mesa_get_compressed_teximage;\r
-\r
/* Swrast hooks for imaging extensions:\r
*/\r
ctx->Driver.CopyColorTable = _swrast_CopyColorTable;\r
DMesaVisual v;\r
GLint redBits, greenBits, blueBits, alphaBits;\r
\r
+ int refresh;\r
+ char *var = getenv("DMESA_REFRESH");\r
+ if ((var == NULL) || ((refresh=atoi(var)) == 0)) {\r
+ refresh = 60;\r
+ }\r
+\r
if (!dbFlag) {\r
return NULL;\r
}\r
return NULL;\r
}\r
\r
- if (vl_video_init(width, height, colDepth)!=0) {\r
+ if (vl_video_init(width, height, colDepth, refresh) != 0) {\r
return NULL;\r
}\r
\r
\r
void DMesaDestroyVisual (DMesaVisual v)\r
{\r
- vl_video_exit(!0);\r
+ vl_video_exit();\r
_mesa_destroy_visual(v->gl_visual);\r
free(v);\r
}\r
\r
if ((b=(DMesaBuffer)calloc(1, sizeof(struct dmesa_buffer)))!=NULL) {\r
\r
- b->gl_buffer = _mesa_create_framebuffer(visual->gl_visual,\r
- visual->gl_visual->depthBits > 0,\r
- visual->gl_visual->stencilBits > 0,\r
- visual->gl_visual->accumRedBits > 0,\r
- visual->gl_visual->alphaBits > 0);\r
+ _mesa_initialize_framebuffer(&b->gl_buffer,\r
+ visual->gl_visual,\r
+ visual->gl_visual->depthBits > 0,\r
+ visual->gl_visual->stencilBits > 0,\r
+ visual->gl_visual->accumRedBits > 0,\r
+ visual->gl_visual->alphaBits > 0);\r
b->xpos = xpos;\r
b->ypos = ypos;\r
b->width = width;\r
- b->bwidth = width * ((visual->depth+7)/8);\r
b->height = height;\r
- b->len = b->bwidth * b->height;\r
+ b->bypp = (visual->depth+7)/8;\r
}\r
\r
return b;\r
void DMesaDestroyBuffer (DMesaBuffer b)\r
{\r
free(b->the_window);\r
- _mesa_destroy_framebuffer(b->gl_buffer);\r
+ _mesa_free_framebuffer_data(&b->gl_buffer);\r
free(b);\r
}\r
\r
\r
\r
\r
+GLboolean DMesaViewport (DMesaBuffer b,\r
+ GLint xpos, GLint ypos,\r
+ GLint width, GLint height)\r
+{\r
+ void *new_window;\r
+\r
+ if ((new_window=vl_sync_buffer(b->the_window, xpos, ypos, width, height))==NULL) {\r
+ return GL_FALSE;\r
+ } else {\r
+ b->the_window = new_window;\r
+ b->xpos = xpos;\r
+ b->ypos = ypos;\r
+ b->width = width;\r
+ b->height = height;\r
+ b->stride = width * b->bypp;\r
+ b->bytes = b->stride * height;\r
+ return GL_TRUE;\r
+ }\r
+}\r
+\r
+\r
+\r
/*\r
* Make the specified context and buffer the current one.\r
*/\r
GLboolean DMesaMakeCurrent (DMesaContext c, DMesaBuffer b)\r
{\r
if (c&&b) {\r
- if ((b->the_window=vl_sync_buffer(b->the_window, b->xpos, b->ypos, b->width, b->height))==NULL) {\r
+ if (!DMesaViewport(b, b->xpos, b->ypos, b->width, b->height)) {\r
return GL_FALSE;\r
}\r
\r
c->Buffer = b;\r
\r
dmesa_update_state(c->gl_ctx, 0);\r
- _mesa_make_current(c->gl_ctx, b->gl_buffer);\r
+ _mesa_make_current(c->gl_ctx, &b->gl_buffer);\r
if (c->gl_ctx->Viewport.Width==0) {\r
/* initialize viewport to window size */\r
- _mesa_Viewport(0, 0, c->Buffer->width, c->Buffer->height);\r
+ _mesa_Viewport(0, 0, b->width, b->height);\r
}\r
} else {\r
/* Detach */\r
void DMesaSwapBuffers (DMesaBuffer b)\r
{\r
/* copy/swap back buffer to front if applicable */\r
- vl_flip(b->the_window, b->bwidth, b->height);\r
+ GET_CURRENT_CONTEXT(ctx);\r
+ _mesa_swapbuffers(ctx);\r
+ vl_flip(b->the_window, b->stride, b->height);\r
}\r