added new_texture_image()
authorBrian Paul <brian.paul@tungstengraphics.com>
Mon, 20 Mar 2000 23:40:12 +0000 (23:40 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Mon, 20 Mar 2000 23:40:12 +0000 (23:40 +0000)
src/mesa/main/teximage.c

index 63dfd053dff73d3a55d048378ef33d79e956e6eb..5a60fa057fdff81c95309231566944f49cf6c21f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: teximage.c,v 1.20 2000/03/20 14:37:54 brianp Exp $ */
+/* $Id: teximage.c,v 1.21 2000/03/20 23:40:12 brianp Exp $ */
 
 /*
  * Mesa 3-D graphics library
@@ -241,26 +241,6 @@ components_in_intformat( GLint format )
 
 
 
-struct gl_texture_image *
-gl_alloc_texture_image( void )
-{
-   return CALLOC_STRUCT(gl_texture_image);
-}
-
-
-
-void
-gl_free_texture_image( struct gl_texture_image *teximage )
-{
-   if (teximage->Data) {
-      FREE( teximage->Data );
-      teximage->Data = NULL;
-   }
-   FREE( teximage );
-}
-
-
-
 /*
  * Examine the texImage->Format field and set the Red, Green, Blue, etc
  * texel component sizes to default values.
@@ -370,6 +350,67 @@ set_teximage_component_sizes( struct gl_texture_image *texImage )
 }
 
 
+
+/*
+ * Return new gl_texture_image struct with all fields initialized to zero.
+ */
+struct gl_texture_image *
+gl_alloc_texture_image( void )
+{
+   return CALLOC_STRUCT(gl_texture_image);
+}
+
+
+
+/*
+ * Return a new gl_texture_image struct with most field initialized.
+ */
+static struct gl_texture_image *
+new_texture_image( GLsizei width, GLsizei height, GLsizei depth,
+                   GLint border, GLenum internalFormat )
+{
+   struct gl_texture_image *img = CALLOC_STRUCT(gl_texture_image);
+   if (!img)
+      return NULL;
+
+   img->Format = (GLenum) decode_internal_format(internalFormat);
+   set_teximage_component_sizes( img );
+   img->IntFormat = (GLenum) internalFormat;
+   img->Border = border;
+   img->Width = width;
+   img->Height = height;
+   img->Depth = depth;
+   img->WidthLog2 = logbase2(width - 2 * border);
+   if (height == 1)  /* 1-D texture */
+      img->HeightLog2 = 0;
+   else
+      img->HeightLog2 = logbase2(height - 2 * border);
+   if (depth == 1)   /* 2-D texture */
+      img->DepthLog2 = 0;
+   else
+      img->DepthLog2 = logbase2(depth - 2 * border);
+   img->Width2 = 1 << img->WidthLog2;
+   img->Height2 = 1 << img->HeightLog2;
+   img->Depth2 = 1 << img->DepthLog2;
+   img->MaxLog2 = MAX2(img->WidthLog2, img->HeightLog2);
+
+   return img;
+}
+
+
+
+void
+gl_free_texture_image( struct gl_texture_image *teximage )
+{
+   if (teximage->Data) {
+      FREE( teximage->Data );
+      teximage->Data = NULL;
+   }
+   FREE( teximage );
+}
+
+
+
 /* Need this to prevent an out-of-bounds memory access when using
  * X86 optimized code.
  */
@@ -408,31 +449,10 @@ make_texture_image( GLcontext *ctx, GLint internalFormat,
    /*
     * Allocate and initialize the texture_image struct
     */
-   texImage = gl_alloc_texture_image();
+   texImage = new_texture_image(width, height, depth, border, internalFormat);
    if (!texImage)
       return NULL;
 
-   texImage->Format = (GLenum) decode_internal_format(internalFormat);
-   set_teximage_component_sizes( texImage );
-   texImage->IntFormat = (GLenum) internalFormat;
-   texImage->Border = border;
-   texImage->Width = width;
-   texImage->Height = height;
-   texImage->Depth = depth;
-   texImage->WidthLog2 = logbase2(width - 2 * border);
-   if (height == 1)  /* 1-D texture */
-      texImage->HeightLog2 = 0;
-   else
-      texImage->HeightLog2 = logbase2(height - 2 * border);
-   if (depth == 1)   /* 2-D texture */
-      texImage->DepthLog2 = 0;
-   else
-      texImage->DepthLog2 = logbase2(depth - 2 * border);
-   texImage->Width2 = 1 << texImage->WidthLog2;
-   texImage->Height2 = 1 << texImage->HeightLog2;
-   texImage->Depth2 = 1 << texImage->DepthLog2;
-   texImage->MaxLog2 = MAX2(texImage->WidthLog2, texImage->HeightLog2);
-
    components = components_in_intformat(internalFormat);
    numPixels = texImage->Width * texImage->Height * texImage->Depth;
 
@@ -564,34 +584,11 @@ make_null_texture( GLcontext *ctx, GLenum internalFormat,
    components = components_in_intformat(internalFormat);
    numPixels = width * height * depth;
 
-   texImage = gl_alloc_texture_image();
-   if (!texImage)
-      return NULL;
-
-   texImage->Format = (GLenum) decode_internal_format(internalFormat);
-   set_teximage_component_sizes( texImage );
-   texImage->IntFormat = internalFormat;
-   texImage->Border = border;
-   texImage->Width = width;
-   texImage->Height = height;
-   texImage->Depth = depth;
-   texImage->WidthLog2 = logbase2(width - 2*border);
-   if (height==1)  /* 1-D texture */
-      texImage->HeightLog2 = 0;
-   else
-      texImage->HeightLog2 = logbase2(height - 2*border);
-   if (depth==1)   /* 2-D texture */
-      texImage->DepthLog2 = 0;
-   else
-      texImage->DepthLog2 = logbase2(depth - 2*border);
-   texImage->Width2 = 1 << texImage->WidthLog2;
-   texImage->Height2 = 1 << texImage->HeightLog2;
-   texImage->Depth2 = 1 << texImage->DepthLog2;
-   texImage->MaxLog2 = MAX2( texImage->WidthLog2, texImage->HeightLog2 );
-
-   /* XXX should we really allocate memory for the image or let it be NULL? */
-   /*texImage->Data = NULL;*/
+   texImage = new_texture_image(width, height, depth, border, internalFormat);
 
+   /* It's easier later if we really do have a texture image, rather than
+    * a NULL image pointer.
+    */
    texImage->Data = (GLubyte *) MALLOC( numPixels * components + EXTRA_BYTE );
 
    /*