summaryrefslogtreecommitdiffstats
path: root/src/glu/mesa/mipmap.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/glu/mesa/mipmap.c')
-rw-r--r--src/glu/mesa/mipmap.c838
1 files changed, 440 insertions, 398 deletions
diff --git a/src/glu/mesa/mipmap.c b/src/glu/mesa/mipmap.c
index f1c6d9ce761..e5efc6240f5 100644
--- a/src/glu/mesa/mipmap.c
+++ b/src/glu/mesa/mipmap.c
@@ -1,4 +1,4 @@
-/* $Id: mipmap.c,v 1.6 2000/06/05 16:27:41 brianp Exp $ */
+/* $Id: mipmap.c,v 1.7 2000/07/11 14:11:04 brianp Exp $ */
/*
* Mesa 3-D graphics library
@@ -47,18 +47,21 @@
/* To work around optimizer bug in MSVC4.1 */
#if defined(__WIN32__) && !defined(OPENSTEP)
-void dummy(GLuint j, GLuint k){
+void
+dummy(GLuint j, GLuint k)
+{
}
#else
#define dummy(J, K)
#endif
-GLint GLAPIENTRY gluScaleImage( GLenum format,
- GLsizei widthin, GLsizei heightin,
- GLenum typein, const void *datain,
- GLsizei widthout, GLsizei heightout,
- GLenum typeout, void *dataout )
+GLint GLAPIENTRY
+gluScaleImage(GLenum format,
+ GLsizei widthin, GLsizei heightin,
+ GLenum typein, const void *datain,
+ GLsizei widthout, GLsizei heightout,
+ GLenum typeout, void *dataout)
{
GLint components, i, j, k;
GLfloat *tempin, *tempout;
@@ -71,84 +74,112 @@ GLint GLAPIENTRY gluScaleImage( GLenum format,
/* Determine number of components per pixel */
switch (format) {
- case GL_COLOR_INDEX:
- case GL_STENCIL_INDEX:
- case GL_DEPTH_COMPONENT:
- case GL_RED:
- case GL_GREEN:
- case GL_BLUE:
- case GL_ALPHA:
- case GL_LUMINANCE:
- components = 1;
- break;
- case GL_LUMINANCE_ALPHA:
- components = 2;
- break;
- case GL_RGB:
- case GL_BGR:
- components = 3;
- break;
- case GL_RGBA:
- case GL_BGRA:
+ case GL_COLOR_INDEX:
+ case GL_STENCIL_INDEX:
+ case GL_DEPTH_COMPONENT:
+ case GL_RED:
+ case GL_GREEN:
+ case GL_BLUE:
+ case GL_ALPHA:
+ case GL_LUMINANCE:
+ components = 1;
+ break;
+ case GL_LUMINANCE_ALPHA:
+ components = 2;
+ break;
+ case GL_RGB:
+ case GL_BGR:
+ components = 3;
+ break;
+ case GL_RGBA:
+ case GL_BGRA:
#ifdef GL_EXT_abgr
- case GL_ABGR_EXT:
+ case GL_ABGR_EXT:
#endif
- components = 4;
- break;
- default:
- return GLU_INVALID_ENUM;
+ components = 4;
+ break;
+ default:
+ return GLU_INVALID_ENUM;
}
/* Determine bytes per input datum */
switch (typein) {
- case GL_UNSIGNED_BYTE: sizein = sizeof(GLubyte); break;
- case GL_BYTE: sizein = sizeof(GLbyte); break;
- case GL_UNSIGNED_SHORT: sizein = sizeof(GLushort); break;
- case GL_SHORT: sizein = sizeof(GLshort); break;
- case GL_UNSIGNED_INT: sizein = sizeof(GLuint); break;
- case GL_INT: sizein = sizeof(GLint); break;
- case GL_FLOAT: sizein = sizeof(GLfloat); break;
- case GL_BITMAP:
- /* not implemented yet */
- default:
- return GL_INVALID_ENUM;
+ case GL_UNSIGNED_BYTE:
+ sizein = sizeof(GLubyte);
+ break;
+ case GL_BYTE:
+ sizein = sizeof(GLbyte);
+ break;
+ case GL_UNSIGNED_SHORT:
+ sizein = sizeof(GLushort);
+ break;
+ case GL_SHORT:
+ sizein = sizeof(GLshort);
+ break;
+ case GL_UNSIGNED_INT:
+ sizein = sizeof(GLuint);
+ break;
+ case GL_INT:
+ sizein = sizeof(GLint);
+ break;
+ case GL_FLOAT:
+ sizein = sizeof(GLfloat);
+ break;
+ case GL_BITMAP:
+ /* not implemented yet */
+ default:
+ return GL_INVALID_ENUM;
}
/* Determine bytes per output datum */
switch (typeout) {
- case GL_UNSIGNED_BYTE: sizeout = sizeof(GLubyte); break;
- case GL_BYTE: sizeout = sizeof(GLbyte); break;
- case GL_UNSIGNED_SHORT: sizeout = sizeof(GLushort); break;
- case GL_SHORT: sizeout = sizeof(GLshort); break;
- case GL_UNSIGNED_INT: sizeout = sizeof(GLuint); break;
- case GL_INT: sizeout = sizeof(GLint); break;
- case GL_FLOAT: sizeout = sizeof(GLfloat); break;
- case GL_BITMAP:
- /* not implemented yet */
- default:
- return GL_INVALID_ENUM;
+ case GL_UNSIGNED_BYTE:
+ sizeout = sizeof(GLubyte);
+ break;
+ case GL_BYTE:
+ sizeout = sizeof(GLbyte);
+ break;
+ case GL_UNSIGNED_SHORT:
+ sizeout = sizeof(GLushort);
+ break;
+ case GL_SHORT:
+ sizeout = sizeof(GLshort);
+ break;
+ case GL_UNSIGNED_INT:
+ sizeout = sizeof(GLuint);
+ break;
+ case GL_INT:
+ sizeout = sizeof(GLint);
+ break;
+ case GL_FLOAT:
+ sizeout = sizeof(GLfloat);
+ break;
+ case GL_BITMAP:
+ /* not implemented yet */
+ default:
+ return GL_INVALID_ENUM;
}
/* Get glPixelStore state */
- glGetIntegerv( GL_UNPACK_ROW_LENGTH, &unpackrowlength );
- glGetIntegerv( GL_UNPACK_ALIGNMENT, &unpackalignment );
- glGetIntegerv( GL_UNPACK_SKIP_ROWS, &unpackskiprows );
- glGetIntegerv( GL_UNPACK_SKIP_PIXELS, &unpackskippixels );
- glGetIntegerv( GL_PACK_ROW_LENGTH, &packrowlength );
- glGetIntegerv( GL_PACK_ALIGNMENT, &packalignment );
- glGetIntegerv( GL_PACK_SKIP_ROWS, &packskiprows );
- glGetIntegerv( GL_PACK_SKIP_PIXELS, &packskippixels );
+ glGetIntegerv(GL_UNPACK_ROW_LENGTH, &unpackrowlength);
+ glGetIntegerv(GL_UNPACK_ALIGNMENT, &unpackalignment);
+ glGetIntegerv(GL_UNPACK_SKIP_ROWS, &unpackskiprows);
+ glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &unpackskippixels);
+ glGetIntegerv(GL_PACK_ROW_LENGTH, &packrowlength);
+ glGetIntegerv(GL_PACK_ALIGNMENT, &packalignment);
+ glGetIntegerv(GL_PACK_SKIP_ROWS, &packskiprows);
+ glGetIntegerv(GL_PACK_SKIP_PIXELS, &packskippixels);
/* Allocate storage for intermediate images */
- tempin = (GLfloat *) malloc( widthin * heightin
- * components * sizeof(GLfloat) );
+ tempin = (GLfloat *) malloc(widthin * heightin
+ * components * sizeof(GLfloat));
if (!tempin) {
return GLU_OUT_OF_MEMORY;
}
- tempout = (GLfloat *) malloc( widthout * heightout
- * components * sizeof(GLfloat) );
+ tempout = (GLfloat *) malloc(widthout * heightout
+ * components * sizeof(GLfloat));
if (!tempout) {
- free( tempin );
+ free(tempin);
return GLU_OUT_OF_MEMORY;
}
@@ -157,7 +188,7 @@ GLint GLAPIENTRY gluScaleImage( GLenum format,
* Unpack the pixel data and convert to floating point
*/
- if (unpackrowlength>0) {
+ if (unpackrowlength > 0) {
rowlen = unpackrowlength;
}
else {
@@ -167,104 +198,97 @@ GLint GLAPIENTRY gluScaleImage( GLenum format,
rowstride = components * rowlen;
}
else {
- rowstride = unpackalignment/sizein
- * CEILING( components * rowlen * sizein, unpackalignment );
+ rowstride = unpackalignment / sizein
+ * CEILING(components * rowlen * sizein, unpackalignment);
}
switch (typein) {
- case GL_UNSIGNED_BYTE:
- k = 0;
- for (i=0;i<heightin;i++) {
- GLubyte *ubptr = (GLubyte *) datain
- + i * rowstride
- + unpackskiprows * rowstride
- + unpackskippixels * components;
- for (j=0;j<widthin*components;j++) {
- dummy(j, k);
- tempin[k++] = (GLfloat) *ubptr++;
- }
+ case GL_UNSIGNED_BYTE:
+ k = 0;
+ for (i = 0; i < heightin; i++) {
+ GLubyte *ubptr = (GLubyte *) datain
+ + i * rowstride
+ + unpackskiprows * rowstride + unpackskippixels * components;
+ for (j = 0; j < widthin * components; j++) {
+ dummy(j, k);
+ tempin[k++] = (GLfloat) * ubptr++;
}
- break;
- case GL_BYTE:
- k = 0;
- for (i=0;i<heightin;i++) {
- GLbyte *bptr = (GLbyte *) datain
- + i * rowstride
- + unpackskiprows * rowstride
- + unpackskippixels * components;
- for (j=0;j<widthin*components;j++) {
- dummy(j, k);
- tempin[k++] = (GLfloat) *bptr++;
- }
+ }
+ break;
+ case GL_BYTE:
+ k = 0;
+ for (i = 0; i < heightin; i++) {
+ GLbyte *bptr = (GLbyte *) datain
+ + i * rowstride
+ + unpackskiprows * rowstride + unpackskippixels * components;
+ for (j = 0; j < widthin * components; j++) {
+ dummy(j, k);
+ tempin[k++] = (GLfloat) * bptr++;
}
- break;
- case GL_UNSIGNED_SHORT:
- k = 0;
- for (i=0;i<heightin;i++) {
- GLushort *usptr = (GLushort *) datain
- + i * rowstride
- + unpackskiprows * rowstride
- + unpackskippixels * components;
- for (j=0;j<widthin*components;j++) {
- dummy(j, k);
- tempin[k++] = (GLfloat) *usptr++;
- }
+ }
+ break;
+ case GL_UNSIGNED_SHORT:
+ k = 0;
+ for (i = 0; i < heightin; i++) {
+ GLushort *usptr = (GLushort *) datain
+ + i * rowstride
+ + unpackskiprows * rowstride + unpackskippixels * components;
+ for (j = 0; j < widthin * components; j++) {
+ dummy(j, k);
+ tempin[k++] = (GLfloat) * usptr++;
}
- break;
- case GL_SHORT:
- k = 0;
- for (i=0;i<heightin;i++) {
- GLshort *sptr = (GLshort *) datain
- + i * rowstride
- + unpackskiprows * rowstride
- + unpackskippixels * components;
- for (j=0;j<widthin*components;j++) {
- dummy(j, k);
- tempin[k++] = (GLfloat) *sptr++;
- }
+ }
+ break;
+ case GL_SHORT:
+ k = 0;
+ for (i = 0; i < heightin; i++) {
+ GLshort *sptr = (GLshort *) datain
+ + i * rowstride
+ + unpackskiprows * rowstride + unpackskippixels * components;
+ for (j = 0; j < widthin * components; j++) {
+ dummy(j, k);
+ tempin[k++] = (GLfloat) * sptr++;
}
- break;
- case GL_UNSIGNED_INT:
- k = 0;
- for (i=0;i<heightin;i++) {
- GLuint *uiptr = (GLuint *) datain
- + i * rowstride
- + unpackskiprows * rowstride
- + unpackskippixels * components;
- for (j=0;j<widthin*components;j++) {
- dummy(j, k);
- tempin[k++] = (GLfloat) *uiptr++;
- }
+ }
+ break;
+ case GL_UNSIGNED_INT:
+ k = 0;
+ for (i = 0; i < heightin; i++) {
+ GLuint *uiptr = (GLuint *) datain
+ + i * rowstride
+ + unpackskiprows * rowstride + unpackskippixels * components;
+ for (j = 0; j < widthin * components; j++) {
+ dummy(j, k);
+ tempin[k++] = (GLfloat) * uiptr++;
}
- break;
- case GL_INT:
- k = 0;
- for (i=0;i<heightin;i++) {
- GLint *iptr = (GLint *) datain
- + i * rowstride
- + unpackskiprows * rowstride
- + unpackskippixels * components;
- for (j=0;j<widthin*components;j++) {
- dummy(j, k);
- tempin[k++] = (GLfloat) *iptr++;
- }
+ }
+ break;
+ case GL_INT:
+ k = 0;
+ for (i = 0; i < heightin; i++) {
+ GLint *iptr = (GLint *) datain
+ + i * rowstride
+ + unpackskiprows * rowstride + unpackskippixels * components;
+ for (j = 0; j < widthin * components; j++) {
+ dummy(j, k);
+ tempin[k++] = (GLfloat) * iptr++;
}
- break;
- case GL_FLOAT:
- k = 0;
- for (i=0;i<heightin;i++) {
- GLfloat *fptr = (GLfloat *) datain
- + i * rowstride
- + unpackskiprows * rowstride
- + unpackskippixels * components;
- for (j=0;j<widthin*components;j++) {
- dummy(j, k);
- tempin[k++] = *fptr++;
- }
+ }
+ break;
+ case GL_FLOAT:
+ k = 0;
+ for (i = 0; i < heightin; i++) {
+ GLfloat *fptr = (GLfloat *) datain
+ + i * rowstride
+ + unpackskiprows * rowstride + unpackskippixels * components;
+ for (j = 0; j < widthin * components; j++) {
+ dummy(j, k);
+ tempin[k++] = *fptr++;
}
- break;
- default:
- return GLU_INVALID_ENUM;
+ }
+ break;
+ default:
+ return GLU_INVALID_ENUM;
}
@@ -273,31 +297,31 @@ GLint GLAPIENTRY gluScaleImage( GLenum format,
*/
if (widthout > 1)
- sx = (GLfloat) (widthin-1) / (GLfloat) (widthout-1);
+ sx = (GLfloat) (widthin - 1) / (GLfloat) (widthout - 1);
else
- sx = (GLfloat) (widthin-1);
+ sx = (GLfloat) (widthin - 1);
if (heightout > 1)
- sy = (GLfloat) (heightin-1) / (GLfloat) (heightout-1);
+ sy = (GLfloat) (heightin - 1) / (GLfloat) (heightout - 1);
else
- sy = (GLfloat) (heightin-1);
+ sy = (GLfloat) (heightin - 1);
/*#define POINT_SAMPLE*/
#ifdef POINT_SAMPLE
- for (i=0;i<heightout;i++) {
+ for (i = 0; i < heightout; i++) {
GLint ii = i * sy;
- for (j=0;j<widthout;j++) {
+ for (j = 0; j < widthout; j++) {
GLint jj = j * sx;
GLfloat *src = tempin + (ii * widthin + jj) * components;
GLfloat *dst = tempout + (i * widthout + j) * components;
- for (k=0;k<components;k++) {
+ for (k = 0; k < components; k++) {
*dst++ = *src++;
}
}
}
#else
- if (sx<1.0 && sy<1.0) {
+ if (sx < 1.0 && sy < 1.0) {
/* magnify both width and height: use weighted sample of 4 pixels */
GLint i0, i1, j0, j1;
GLfloat alpha, beta;
@@ -305,18 +329,20 @@ GLint GLAPIENTRY gluScaleImage( GLenum format,
GLfloat s1, s2;
GLfloat *dst;
- for (i=0;i<heightout;i++) {
+ for (i = 0; i < heightout; i++) {
i0 = i * sy;
i1 = i0 + 1;
- if (i1 >= heightin) i1 = heightin-1;
+ if (i1 >= heightin)
+ i1 = heightin - 1;
/* i1 = (i+1) * sy - EPSILON;*/
- alpha = i*sy - i0;
- for (j=0;j<widthout;j++) {
+ alpha = i * sy - i0;
+ for (j = 0; j < widthout; j++) {
j0 = j * sx;
j1 = j0 + 1;
- if (j1 >= widthin) j1 = widthin-1;
+ if (j1 >= widthin)
+ j1 = widthin - 1;
/* j1 = (j+1) * sx - EPSILON; */
- beta = j*sx - j0;
+ beta = j * sx - j0;
/* compute weighted average of pixels in rect (i0,j0)-(i1,j1) */
src00 = tempin + (i0 * widthin + j0) * components;
@@ -326,10 +352,10 @@ GLint GLAPIENTRY gluScaleImage( GLenum format,
dst = tempout + (i * widthout + j) * components;
- for (k=0;k<components;k++) {
- s1 = *src00++ * (1.0-beta) + *src01++ * beta;
- s2 = *src10++ * (1.0-beta) + *src11++ * beta;
- *dst++ = s1 * (1.0-alpha) + s2 * alpha;
+ for (k = 0; k < components; k++) {
+ s1 = *src00++ * (1.0 - beta) + *src01++ * beta;
+ s2 = *src10++ * (1.0 - beta) + *src11++ * beta;
+ *dst++ = s1 * (1.0 - alpha) + s2 * alpha;
}
}
}
@@ -341,28 +367,30 @@ GLint GLAPIENTRY gluScaleImage( GLenum format,
GLint ii, jj;
GLfloat sum, *dst;
- for (i=0;i<heightout;i++) {
+ for (i = 0; i < heightout; i++) {
i0 = i * sy;
i1 = i0 + 1;
- if (i1 >= heightin) i1 = heightin-1;
+ if (i1 >= heightin)
+ i1 = heightin - 1;
/* i1 = (i+1) * sy - EPSILON; */
- for (j=0;j<widthout;j++) {
+ for (j = 0; j < widthout; j++) {
j0 = j * sx;
j1 = j0 + 1;
- if (j1 >= widthin) j1 = widthin-1;
+ if (j1 >= widthin)
+ j1 = widthin - 1;
/* j1 = (j+1) * sx - EPSILON; */
dst = tempout + (i * widthout + j) * components;
/* compute average of pixels in the rectangle (i0,j0)-(i1,j1) */
- for (k=0;k<components;k++) {
+ for (k = 0; k < components; k++) {
sum = 0.0;
- for (ii=i0;ii<=i1;ii++) {
- for (jj=j0;jj<=j1;jj++) {
+ for (ii = i0; ii <= i1; ii++) {
+ for (jj = j0; jj <= j1; jj++) {
sum += *(tempin + (ii * widthin + jj) * components + k);
}
}
- sum /= (j1-j0+1) * (i1-i0+1);
+ sum /= (j1 - j0 + 1) * (i1 - i0 + 1);
*dst++ = sum;
}
}
@@ -375,7 +403,7 @@ GLint GLAPIENTRY gluScaleImage( GLenum format,
* Return output image
*/
- if (packrowlength>0) {
+ if (packrowlength > 0) {
rowlen = packrowlength;
}
else {
@@ -385,110 +413,103 @@ GLint GLAPIENTRY gluScaleImage( GLenum format,
rowstride = components * rowlen;
}
else {
- rowstride = packalignment/sizeout
- * CEILING( components * rowlen * sizeout, packalignment );
+ rowstride = packalignment / sizeout
+ * CEILING(components * rowlen * sizeout, packalignment);
}
switch (typeout) {
- case GL_UNSIGNED_BYTE:
- k = 0;
- for (i=0;i<heightout;i++) {
- GLubyte *ubptr = (GLubyte *) dataout
- + i * rowstride
- + packskiprows * rowstride
- + packskippixels * components;
- for (j=0;j<widthout*components;j++) {
- dummy(j, k+i);
- *ubptr++ = (GLubyte) tempout[k++];
- }
+ case GL_UNSIGNED_BYTE:
+ k = 0;
+ for (i = 0; i < heightout; i++) {
+ GLubyte *ubptr = (GLubyte *) dataout
+ + i * rowstride
+ + packskiprows * rowstride + packskippixels * components;
+ for (j = 0; j < widthout * components; j++) {
+ dummy(j, k + i);
+ *ubptr++ = (GLubyte) tempout[k++];
}
- break;
- case GL_BYTE:
- k = 0;
- for (i=0;i<heightout;i++) {
- GLbyte *bptr = (GLbyte *) dataout
- + i * rowstride
- + packskiprows * rowstride
- + packskippixels * components;
- for (j=0;j<widthout*components;j++) {
- dummy(j, k+i);
- *bptr++ = (GLbyte) tempout[k++];
- }
+ }
+ break;
+ case GL_BYTE:
+ k = 0;
+ for (i = 0; i < heightout; i++) {
+ GLbyte *bptr = (GLbyte *) dataout
+ + i * rowstride
+ + packskiprows * rowstride + packskippixels * components;
+ for (j = 0; j < widthout * components; j++) {
+ dummy(j, k + i);
+ *bptr++ = (GLbyte) tempout[k++];
}
- break;
- case GL_UNSIGNED_SHORT:
- k = 0;
- for (i=0;i<heightout;i++) {
- GLushort *usptr = (GLushort *) dataout
- + i * rowstride
- + packskiprows * rowstride
- + packskippixels * components;
- for (j=0;j<widthout*components;j++) {
- dummy(j, k+i);
- *usptr++ = (GLushort) tempout[k++];
- }
+ }
+ break;
+ case GL_UNSIGNED_SHORT:
+ k = 0;
+ for (i = 0; i < heightout; i++) {
+ GLushort *usptr = (GLushort *) dataout
+ + i * rowstride
+ + packskiprows * rowstride + packskippixels * components;
+ for (j = 0; j < widthout * components; j++) {
+ dummy(j, k + i);
+ *usptr++ = (GLushort) tempout[k++];
}
- break;
- case GL_SHORT:
- k = 0;
- for (i=0;i<heightout;i++) {
- GLshort *sptr = (GLshort *) dataout
- + i * rowstride
- + packskiprows * rowstride
- + packskippixels * components;
- for (j=0;j<widthout*components;j++) {
- dummy(j, k+i);
- *sptr++ = (GLshort) tempout[k++];
- }
+ }
+ break;
+ case GL_SHORT:
+ k = 0;
+ for (i = 0; i < heightout; i++) {
+ GLshort *sptr = (GLshort *) dataout
+ + i * rowstride
+ + packskiprows * rowstride + packskippixels * components;
+ for (j = 0; j < widthout * components; j++) {
+ dummy(j, k + i);
+ *sptr++ = (GLshort) tempout[k++];
}
- break;
- case GL_UNSIGNED_INT:
- k = 0;
- for (i=0;i<heightout;i++) {
- GLuint *uiptr = (GLuint *) dataout
- + i * rowstride
- + packskiprows * rowstride
- + packskippixels * components;
- for (j=0;j<widthout*components;j++) {
- dummy(j, k+i);
- *uiptr++ = (GLuint) tempout[k++];
- }
+ }
+ break;
+ case GL_UNSIGNED_INT:
+ k = 0;
+ for (i = 0; i < heightout; i++) {
+ GLuint *uiptr = (GLuint *) dataout
+ + i * rowstride
+ + packskiprows * rowstride + packskippixels * components;
+ for (j = 0; j < widthout * components; j++) {
+ dummy(j, k + i);
+ *uiptr++ = (GLuint) tempout[k++];
}
- break;
- case GL_INT:
- k = 0;
- for (i=0;i<heightout;i++) {
- GLint *iptr = (GLint *) dataout
- + i * rowstride
- + packskiprows * rowstride
- + packskippixels * components;
- for (j=0;j<widthout*components;j++) {
- dummy(j, k+i);
- *iptr++ = (GLint) tempout[k++];
- }
+ }
+ break;
+ case GL_INT:
+ k = 0;
+ for (i = 0; i < heightout; i++) {
+ GLint *iptr = (GLint *) dataout
+ + i * rowstride
+ + packskiprows * rowstride + packskippixels * components;
+ for (j = 0; j < widthout * components; j++) {
+ dummy(j, k + i);
+ *iptr++ = (GLint) tempout[k++];
}
- break;
- case GL_FLOAT:
- k = 0;
- for (i=0;i<heightout;i++) {
- GLfloat *fptr = (GLfloat *) dataout
- + i * rowstride
- + packskiprows * rowstride
- + packskippixels * components;
- for (j=0;j<widthout*components;j++) {
- dummy(j, k+i);
- *fptr++ = tempout[k++];
- }
+ }
+ break;
+ case GL_FLOAT:
+ k = 0;
+ for (i = 0; i < heightout; i++) {
+ GLfloat *fptr = (GLfloat *) dataout
+ + i * rowstride
+ + packskiprows * rowstride + packskippixels * components;
+ for (j = 0; j < widthout * components; j++) {
+ dummy(j, k + i);
+ *fptr++ = tempout[k++];
}
- break;
- default:
- return GLU_INVALID_ENUM;
+ }
+ break;
+ default:
+ return GLU_INVALID_ENUM;
}
/* free temporary image storage */
- free( tempin );
- free( tempout );
+ free(tempin);
+ free(tempout);
return 0;
}
@@ -498,12 +519,14 @@ GLint GLAPIENTRY gluScaleImage( GLenum format,
/*
* Return the largest k such that 2^k <= n.
*/
-static GLint ilog2( GLint n )
+static GLint
+ilog2(GLint n)
{
GLint k;
- if (n<=0) return 0;
- for (k=0; n>>=1; k++) ;
+ if (n <= 0)
+ return 0;
+ for (k = 0; n >>= 1; k++);
return k;
}
@@ -512,19 +535,19 @@ static GLint ilog2( GLint n )
/*
* Find the value nearest to n which is also a power of two.
*/
-static GLint round2( GLint n )
+static GLint
+round2(GLint n)
{
GLint m;
- for (m=1; m<n; m*=2)
- ;
+ for (m = 1; m < n; m *= 2);
/* m>=n */
- if (m-n <= n-m/2) {
+ if (m - n <= n - m / 2) {
return m;
}
else {
- return m/2;
+ return m / 2;
}
}
@@ -533,48 +556,66 @@ static GLint round2( GLint n )
* Given an pixel format and datatype, return the number of bytes to
* store one pixel.
*/
-static GLint bytes_per_pixel( GLenum format, GLenum type )
+static GLint
+bytes_per_pixel(GLenum format, GLenum type)
{
GLint n, m;
switch (format) {
- case GL_COLOR_INDEX:
- case GL_STENCIL_INDEX:
- case GL_DEPTH_COMPONENT:
- case GL_RED:
- case GL_GREEN:
- case GL_BLUE:
- case GL_ALPHA:
- case GL_LUMINANCE:
- n = 1;
- break;
- case GL_LUMINANCE_ALPHA:
- n = 2;
- break;
- case GL_RGB:
- n = 3;
- break;
- case GL_RGBA:
- case GL_BGRA:
+ case GL_COLOR_INDEX:
+ case GL_STENCIL_INDEX:
+ case GL_DEPTH_COMPONENT:
+ case GL_RED:
+ case GL_GREEN:
+ case GL_BLUE:
+ case GL_ALPHA:
+ case GL_LUMINANCE:
+ n = 1;
+ break;
+ case GL_LUMINANCE_ALPHA:
+ n = 2;
+ break;
+ case GL_RGB:
+ n = 3;
+ break;
+ case GL_RGBA:
+ case GL_BGRA:
#ifdef GL_EXT_abgr
- case GL_ABGR_EXT:
+ case GL_ABGR_EXT:
#endif
- n = 4;
- break;
- default:
- n = 0;
+ n = 4;
+ break;
+ default:
+ n = 0;
}
switch (type) {
- case GL_UNSIGNED_BYTE: m = sizeof(GLubyte); break;
- case GL_BYTE: m = sizeof(GLbyte); break;
- case GL_BITMAP: m = 1; break;
- case GL_UNSIGNED_SHORT: m = sizeof(GLushort); break;
- case GL_SHORT: m = sizeof(GLshort); break;
- case GL_UNSIGNED_INT: m = sizeof(GLuint); break;
- case GL_INT: m = sizeof(GLint); break;
- case GL_FLOAT: m = sizeof(GLfloat); break;
- default: m = 0;
+ case GL_UNSIGNED_BYTE:
+ m = sizeof(GLubyte);
+ break;
+ case GL_BYTE:
+ m = sizeof(GLbyte);
+ break;
+ case GL_BITMAP:
+ m = 1;
+ break;
+ case GL_UNSIGNED_SHORT:
+ m = sizeof(GLushort);
+ break;
+ case GL_SHORT:
+ m = sizeof(GLshort);
+ break;
+ case GL_UNSIGNED_INT:
+ m = sizeof(GLuint);
+ break;
+ case GL_INT:
+ m = sizeof(GLint);
+ break;
+ case GL_FLOAT:
+ m = sizeof(GLfloat);
+ break;
+ default:
+ m = 0;
}
return n * m;
@@ -585,9 +626,9 @@ static GLint bytes_per_pixel( GLenum format, GLenum type )
/*
* WARNING: This function isn't finished and has never been tested!!!!
*/
-GLint GLAPIENTRY gluBuild1DMipmaps( GLenum target, GLint components,
- GLsizei width, GLenum format,
- GLenum type, const void *data )
+GLint GLAPIENTRY
+gluBuild1DMipmaps(GLenum target, GLint components,
+ GLsizei width, GLenum format, GLenum type, const void *data)
{
GLubyte *texture;
GLint levels, max_levels;
@@ -597,18 +638,18 @@ GLint GLAPIENTRY gluBuild1DMipmaps( GLenum target, GLint components,
if (width < 1)
return GLU_INVALID_VALUE;
- glGetIntegerv( GL_MAX_TEXTURE_SIZE, &max_width );
- max_levels = ilog2( max_width ) + 1;
+ glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_width);
+ max_levels = ilog2(max_width) + 1;
/* Compute how many mipmap images to make */
- levels = ilog2( width ) + 1;
- if (levels>max_levels) {
+ levels = ilog2(width) + 1;
+ if (levels > max_levels) {
levels = max_levels;
}
- new_width = 1 << (levels-1);
+ new_width = 1 << (levels - 1);
- texture = (GLubyte *) malloc( new_width * components );
+ texture = (GLubyte *) malloc(new_width * components);
if (!texture) {
return GLU_OUT_OF_MEMORY;
}
@@ -616,50 +657,51 @@ GLint GLAPIENTRY gluBuild1DMipmaps( GLenum target, GLint components,
if (width != new_width) {
/* initial rescaling */
switch (type) {
- case GL_UNSIGNED_BYTE:
- {
- GLubyte *ub_data = (GLubyte *) data;
- for (i=0;i<new_width;i++) {
- j = i * width / new_width;
- for (k=0;k<components;k++) {
- texture[i*components+k] = ub_data[j*components+k];
- }
+ case GL_UNSIGNED_BYTE:
+ {
+ GLubyte *ub_data = (GLubyte *) data;
+ for (i = 0; i < new_width; i++) {
+ j = i * width / new_width;
+ for (k = 0; k < components; k++) {
+ texture[i * components + k] = ub_data[j * components + k];
}
}
- break;
- default:
- /* Not implemented */
- return GLU_ERROR;
+ }
+ break;
+ default:
+ /* Not implemented */
+ return GLU_ERROR;
}
}
/* generate and load mipmap images */
- for (l=0;l<levels;l++) {
- glTexImage1D( GL_TEXTURE_1D, l, components, new_width, 0,
- format, GL_UNSIGNED_BYTE, texture );
+ for (l = 0; l < levels; l++) {
+ glTexImage1D(GL_TEXTURE_1D, l, components, new_width, 0,
+ format, GL_UNSIGNED_BYTE, texture);
/* Scale image down to 1/2 size */
new_width = new_width / 2;
- for (i=0;i<new_width;i++) {
- for (k=0;k<components;k++) {
+ for (i = 0; i < new_width; i++) {
+ for (k = 0; k < components; k++) {
GLint sample1, sample2;
- sample1 = (GLint) texture[i*2*components+k];
- sample2 = (GLint) texture[(i*2+1)*components+k];
- texture[i*components+k] = (GLubyte) ((sample1 + sample2) / 2);
+ sample1 = (GLint) texture[i * 2 * components + k];
+ sample2 = (GLint) texture[(i * 2 + 1) * components + k];
+ texture[i * components + k] = (GLubyte) ((sample1 + sample2) / 2);
}
}
}
- free( texture );
+ free(texture);
return 0;
}
-GLint GLAPIENTRY gluBuild2DMipmaps( GLenum target, GLint components,
- GLsizei width, GLsizei height, GLenum format,
- GLenum type, const void *data )
+GLint GLAPIENTRY
+gluBuild2DMipmaps(GLenum target, GLint components,
+ GLsizei width, GLsizei height, GLenum format,
+ GLenum type, const void *data)
{
GLint w, h, maxsize;
void *image, *newimage;
@@ -673,52 +715,52 @@ GLint GLAPIENTRY gluBuild2DMipmaps( GLenum target, GLint components,
if (width < 1 || height < 1)
return GLU_INVALID_VALUE;
- glGetIntegerv( GL_MAX_TEXTURE_SIZE, &maxsize );
+ glGetIntegerv(GL_MAX_TEXTURE_SIZE, &maxsize);
- w = round2( width );
- if (w>maxsize) {
+ w = round2(width);
+ if (w > maxsize) {
w = maxsize;
}
- h = round2( height );
- if (h>maxsize) {
+ h = round2(height);
+ if (h > maxsize) {
h = maxsize;
}
- bpp = bytes_per_pixel( format, type );
- if (bpp==0) {
+ bpp = bytes_per_pixel(format, type);
+ if (bpp == 0) {
/* probably a bad format or type enum */
return GLU_INVALID_ENUM;
}
/* Get current glPixelStore values */
- glGetIntegerv( GL_UNPACK_ROW_LENGTH, &unpackrowlength );
- glGetIntegerv( GL_UNPACK_ALIGNMENT, &unpackalignment );
- glGetIntegerv( GL_UNPACK_SKIP_ROWS, &unpackskiprows );
- glGetIntegerv( GL_UNPACK_SKIP_PIXELS, &unpackskippixels );
- glGetIntegerv( GL_PACK_ROW_LENGTH, &packrowlength );
- glGetIntegerv( GL_PACK_ALIGNMENT, &packalignment );
- glGetIntegerv( GL_PACK_SKIP_ROWS, &packskiprows );
- glGetIntegerv( GL_PACK_SKIP_PIXELS, &packskippixels );
+ glGetIntegerv(GL_UNPACK_ROW_LENGTH, &unpackrowlength);
+ glGetIntegerv(GL_UNPACK_ALIGNMENT, &unpackalignment);
+ glGetIntegerv(GL_UNPACK_SKIP_ROWS, &unpackskiprows);
+ glGetIntegerv(GL_UNPACK_SKIP_PIXELS, &unpackskippixels);
+ glGetIntegerv(GL_PACK_ROW_LENGTH, &packrowlength);
+ glGetIntegerv(GL_PACK_ALIGNMENT, &packalignment);
+ glGetIntegerv(GL_PACK_SKIP_ROWS, &packskiprows);
+ glGetIntegerv(GL_PACK_SKIP_PIXELS, &packskippixels);
/* set pixel packing */
- glPixelStorei( GL_PACK_ROW_LENGTH, 0 );
- glPixelStorei( GL_PACK_ALIGNMENT, 1 );
- glPixelStorei( GL_PACK_SKIP_ROWS, 0 );
- glPixelStorei( GL_PACK_SKIP_PIXELS, 0 );
+ glPixelStorei(GL_PACK_ROW_LENGTH, 0);
+ glPixelStorei(GL_PACK_ALIGNMENT, 1);
+ glPixelStorei(GL_PACK_SKIP_ROWS, 0);
+ glPixelStorei(GL_PACK_SKIP_PIXELS, 0);
done = GL_FALSE;
- if (w!=width || h!=height) {
+ if (w != width || h != height) {
/* must rescale image to get "top" mipmap texture image */
- image = malloc( (w+4) * h * bpp );
+ image = malloc((w + 4) * h * bpp);
if (!image) {
return GLU_OUT_OF_MEMORY;
}
- error = gluScaleImage( format, width, height, type, data,
- w, h, type, image );
+ error = gluScaleImage(format, width, height, type, data,
+ w, h, type, image);
if (error) {
- retval = error;
- done = GL_TRUE;
+ retval = error;
+ done = GL_TRUE;
}
}
else {
@@ -728,33 +770,34 @@ GLint GLAPIENTRY gluBuild2DMipmaps( GLenum target, GLint components,
level = 0;
while (!done) {
if (image != data) {
- /* set pixel unpacking */
- glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
- glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
- glPixelStorei( GL_UNPACK_SKIP_ROWS, 0 );
- glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );
+ /* set pixel unpacking */
+ glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
+ glPixelStorei(GL_UNPACK_SKIP_ROWS, 0);
+ glPixelStorei(GL_UNPACK_SKIP_PIXELS, 0);
}
- glTexImage2D( target, level, components, w, h, 0, format, type, image );
+ glTexImage2D(target, level, components, w, h, 0, format, type, image);
- if (w==1 && h==1) break;
+ if (w == 1 && h == 1)
+ break;
- neww = (w<2) ? 1 : w/2;
- newh = (h<2) ? 1 : h/2;
- newimage = malloc( (neww+4) * newh * bpp );
+ neww = (w < 2) ? 1 : w / 2;
+ newh = (h < 2) ? 1 : h / 2;
+ newimage = malloc((neww + 4) * newh * bpp);
if (!newimage) {
return GLU_OUT_OF_MEMORY;
}
- error = gluScaleImage( format, w, h, type, image,
- neww, newh, type, newimage );
+ error = gluScaleImage(format, w, h, type, image,
+ neww, newh, type, newimage);
if (error) {
- retval = error;
- done = GL_TRUE;
+ retval = error;
+ done = GL_TRUE;
}
- if (image!=data) {
- free( image );
+ if (image != data) {
+ free(image);
}
image = newimage;
@@ -763,20 +806,19 @@ GLint GLAPIENTRY gluBuild2DMipmaps( GLenum target, GLint components,
level++;
}
- if (image!=data) {
- free( image );
+ if (image != data) {
+ free(image);
}
/* Restore original glPixelStore state */
- glPixelStorei( GL_UNPACK_ROW_LENGTH, unpackrowlength );
- glPixelStorei( GL_UNPACK_ALIGNMENT, unpackalignment );
- glPixelStorei( GL_UNPACK_SKIP_ROWS, unpackskiprows );
- glPixelStorei( GL_UNPACK_SKIP_PIXELS, unpackskippixels );
- glPixelStorei( GL_PACK_ROW_LENGTH, packrowlength );
- glPixelStorei( GL_PACK_ALIGNMENT, packalignment );
- glPixelStorei( GL_PACK_SKIP_ROWS, packskiprows );
- glPixelStorei( GL_PACK_SKIP_PIXELS, packskippixels );
+ glPixelStorei(GL_UNPACK_ROW_LENGTH, unpackrowlength);
+ glPixelStorei(GL_UNPACK_ALIGNMENT, unpackalignment);
+ glPixelStorei(GL_UNPACK_SKIP_ROWS, unpackskiprows);
+ glPixelStorei(GL_UNPACK_SKIP_PIXELS, unpackskippixels);
+ glPixelStorei(GL_PACK_ROW_LENGTH, packrowlength);
+ glPixelStorei(GL_PACK_ALIGNMENT, packalignment);
+ glPixelStorei(GL_PACK_SKIP_ROWS, packskiprows);
+ glPixelStorei(GL_PACK_SKIP_PIXELS, packskippixels);
return retval;
}
-