new texture compression infrastructure
[mesa.git] / src / mesa / drivers / dos / dmesa.c
index 454b891c08b364b51679911a956efb75f3d2cebb..1d430354f63f67397f761f7a195861a8fede94cb 100644 (file)
@@ -23,7 +23,7 @@
  */\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
@@ -76,12 +76,12 @@ struct dmesa_visual {
  * 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
@@ -492,7 +492,7 @@ static void clear (GLcontext *ctx, GLbitfield mask, GLboolean all,
  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
@@ -513,10 +513,9 @@ static void clear (GLcontext *ctx, GLbitfield mask, GLboolean all,
 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
@@ -524,13 +523,11 @@ static void set_read_buffer (GLcontext *ctx, GLframebuffer *buffer,
 /*\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
@@ -540,12 +537,12 @@ static GLboolean set_draw_buffer (GLcontext *ctx, GLenum mode)
  * 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
@@ -554,7 +551,7 @@ static const GLubyte* get_string (GLcontext *ctx, GLenum name)
 {\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
@@ -636,7 +633,7 @@ void dmesa_init_pointers (GLcontext *ctx)
  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
@@ -652,16 +649,19 @@ void dmesa_init_pointers (GLcontext *ctx)
  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
@@ -730,6 +730,12 @@ DMesaVisual DMesaCreateVisual (GLint width, GLint height, GLint colDepth,
  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
@@ -756,7 +762,7 @@ DMesaVisual DMesaCreateVisual (GLint width, GLint height, GLint colDepth,
              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
@@ -789,7 +795,7 @@ DMesaVisual DMesaCreateVisual (GLint width, GLint height, GLint colDepth,
 \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
@@ -804,17 +810,17 @@ DMesaBuffer DMesaCreateBuffer (DMesaVisual visual,
 \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
@@ -825,7 +831,7 @@ DMesaBuffer DMesaCreateBuffer (DMesaVisual visual,
 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
@@ -871,23 +877,45 @@ void DMesaDestroyContext (DMesaContext c)
 \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
@@ -902,5 +930,7 @@ GLboolean DMesaMakeCurrent (DMesaContext c, DMesaBuffer b)
 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