diff options
author | Brian Paul <brian.paul@tungstengraphics.com> | 2004-01-23 01:59:54 +0000 |
---|---|---|
committer | Brian Paul <brian.paul@tungstengraphics.com> | 2004-01-23 01:59:54 +0000 |
commit | 4f295cee73bae1f687efe2dc062522b40d90b1e4 (patch) | |
tree | 82efe0da331881d5b63bf6805985e909369b58bf /src/mesa/swrast | |
parent | edd1d86c740811e59272e2ba0f7ebe0caf9cf57c (diff) |
Initial support for floating point and signed texture formats.
New "FetchTexelFuncF()" function returns texels in floating point format.
Only used for depth component images at this time.
Changed original FetchTexelFunc to return GLchan instead of GLvoid, removing
need for a bunch of ugly casts.
Diffstat (limited to 'src/mesa/swrast')
-rw-r--r-- | src/mesa/swrast/s_nvfragprog.c | 1 | ||||
-rw-r--r-- | src/mesa/swrast/s_texture.c | 70 |
2 files changed, 36 insertions, 35 deletions
diff --git a/src/mesa/swrast/s_nvfragprog.c b/src/mesa/swrast/s_nvfragprog.c index 2b358e9f4a..e3679a270e 100644 --- a/src/mesa/swrast/s_nvfragprog.c +++ b/src/mesa/swrast/s_nvfragprog.c @@ -56,6 +56,7 @@ fetch_texel( GLcontext *ctx, const GLfloat texcoord[4], GLfloat lambda, GLchan rgba[4]; SWcontext *swrast = SWRAST_CONTEXT(ctx); + /* XXX use a float-valued TextureSample routine here!!! */ swrast->TextureSample[unit](ctx, unit, ctx->Texture.Unit[unit]._Current, 1, (const GLfloat (*)[4]) texcoord, &lambda, &rgba); diff --git a/src/mesa/swrast/s_texture.c b/src/mesa/swrast/s_texture.c index 2342179a4e..2576a181c3 100644 --- a/src/mesa/swrast/s_texture.c +++ b/src/mesa/swrast/s_texture.c @@ -1,8 +1,8 @@ /* * Mesa 3-D graphics library - * Version: 5.1 + * Version: 6.1 * - * Copyright (C) 1999-2003 Brian Paul All Rights Reserved. + * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), @@ -787,7 +787,7 @@ sample_1d_nearest(GLcontext *ctx, COPY_CHAN4(rgba, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i, 0, 0, (GLvoid *) rgba); + img->FetchTexelc(img, i, 0, 0, rgba); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, rgba[0], rgba); } @@ -839,7 +839,7 @@ sample_1d_linear(GLcontext *ctx, COPY_CHAN4(t0, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i0, 0, 0, (GLvoid *) t0); + img->FetchTexelc(img, i0, 0, 0, t0); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t0[0], t0); } @@ -848,7 +848,7 @@ sample_1d_linear(GLcontext *ctx, COPY_CHAN4(t1, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i1, 0, 0, (GLvoid *) t1); + img->FetchTexelc(img, i1, 0, 0, t1); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t1[0], t1); } @@ -1116,7 +1116,7 @@ sample_2d_nearest(GLcontext *ctx, COPY_CHAN4(rgba, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i, j, 0, (GLvoid *) rgba); + img->FetchTexelc(img, i, j, 0, rgba); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, rgba[0], rgba); } @@ -1184,7 +1184,7 @@ sample_2d_linear(GLcontext *ctx, COPY_CHAN4(t00, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i0, j0, 0, (GLvoid *) t00); + img->FetchTexelc(img, i0, j0, 0, t00); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t00[0], t00); } @@ -1193,7 +1193,7 @@ sample_2d_linear(GLcontext *ctx, COPY_CHAN4(t10, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i1, j0, 0, (GLvoid *) t10); + img->FetchTexelc(img, i1, j0, 0, t10); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t10[0], t10); } @@ -1202,7 +1202,7 @@ sample_2d_linear(GLcontext *ctx, COPY_CHAN4(t01, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i0, j1, 0, (GLvoid *) t01); + img->FetchTexelc(img, i0, j1, 0, t01); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t01[0], t01); } @@ -1211,7 +1211,7 @@ sample_2d_linear(GLcontext *ctx, COPY_CHAN4(t11, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i1, j1, 0, (GLvoid *) t11); + img->FetchTexelc(img, i1, j1, 0, t11); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t11[0], t11); } @@ -1292,10 +1292,10 @@ sample_2d_linear_repeat(GLcontext *ctx, GLchan t01[4]; GLchan t11[4]; - (*img->FetchTexel)(img, i0, j0, 0, (GLvoid *) t00); - (*img->FetchTexel)(img, i1, j0, 0, (GLvoid *) t10); - (*img->FetchTexel)(img, i0, j1, 0, (GLvoid *) t01); - (*img->FetchTexel)(img, i1, j1, 0, (GLvoid *) t11); + img->FetchTexelc(img, i0, j0, 0, t00); + img->FetchTexelc(img, i1, j0, 0, t10); + img->FetchTexelc(img, i0, j1, 0, t01); + img->FetchTexelc(img, i1, j1, 0, t11); #if CHAN_TYPE == GL_FLOAT rgba[0] = w00 * t00[0] + w10 * t10[0] + w01 * t01[0] + w11 * t11[0]; @@ -1710,7 +1710,7 @@ sample_3d_nearest(GLcontext *ctx, COPY_CHAN4(rgba, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i, j, k, (GLvoid *) rgba); + img->FetchTexelc(img, i, j, k, rgba); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, rgba[0], rgba); } @@ -1793,7 +1793,7 @@ sample_3d_linear(GLcontext *ctx, COPY_CHAN4(t000, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i0, j0, k0, (GLvoid *) t000); + img->FetchTexelc(img, i0, j0, k0, t000); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t000[0], t000); } @@ -1802,7 +1802,7 @@ sample_3d_linear(GLcontext *ctx, COPY_CHAN4(t100, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i1, j0, k0, (GLvoid *) t100); + img->FetchTexelc(img, i1, j0, k0, t100); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t100[0], t100); } @@ -1811,7 +1811,7 @@ sample_3d_linear(GLcontext *ctx, COPY_CHAN4(t010, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i0, j1, k0, (GLvoid *) t010); + img->FetchTexelc(img, i0, j1, k0, t010); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t010[0], t010); } @@ -1820,7 +1820,7 @@ sample_3d_linear(GLcontext *ctx, COPY_CHAN4(t110, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i1, j1, k0, (GLvoid *) t110); + img->FetchTexelc(img, i1, j1, k0, t110); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t110[0], t110); } @@ -1830,7 +1830,7 @@ sample_3d_linear(GLcontext *ctx, COPY_CHAN4(t001, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i0, j0, k1, (GLvoid *) t001); + img->FetchTexelc(img, i0, j0, k1, t001); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t001[0], t001); } @@ -1839,7 +1839,7 @@ sample_3d_linear(GLcontext *ctx, COPY_CHAN4(t101, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i1, j0, k1, (GLvoid *) t101); + img->FetchTexelc(img, i1, j0, k1, t101); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t101[0], t101); } @@ -1848,7 +1848,7 @@ sample_3d_linear(GLcontext *ctx, COPY_CHAN4(t011, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i0, j1, k1, (GLvoid *) t011); + img->FetchTexelc(img, i0, j1, k1, t011); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t011[0], t011); } @@ -1857,7 +1857,7 @@ sample_3d_linear(GLcontext *ctx, COPY_CHAN4(t111, tObj->_BorderChan); } else { - (*img->FetchTexel)(img, i1, j1, k1, (GLvoid *) t111); + img->FetchTexelc(img, i1, j1, k1, t111); if (img->Format == GL_COLOR_INDEX) { palette_sample(ctx, tObj, t111[0], t111); } @@ -2449,7 +2449,7 @@ sample_nearest_rect(GLcontext *ctx, GLuint texUnit, col = CLAMP(col, 0, width_minus_1); row = CLAMP(row, 0, height_minus_1); - (*img->FetchTexel)(img, col, row, 0, (GLvoid *) rgba[i]); + img->FetchTexelc(img, col, row, 0, rgba[i]); } } @@ -2516,10 +2516,10 @@ sample_linear_rect(GLcontext *ctx, GLuint texUnit, row1 = CLAMP(row1, 0, height_minus_1); /* get four texel samples */ - (*img->FetchTexel)(img, col0, row0, 0, (GLvoid *) t00); - (*img->FetchTexel)(img, col1, row0, 0, (GLvoid *) t10); - (*img->FetchTexel)(img, col0, row1, 0, (GLvoid *) t01); - (*img->FetchTexel)(img, col1, row1, 0, (GLvoid *) t11); + img->FetchTexelc(img, col0, row0, 0, t00); + img->FetchTexelc(img, col1, row0, 0, t10); + img->FetchTexelc(img, col0, row1, 0, t01); + img->FetchTexelc(img, col1, row1, 0, t11); /* compute sample weights */ a = FRAC(fcol); @@ -2635,7 +2635,7 @@ sample_depth_texture( GLcontext *ctx, GLuint unit, /* XXX fix for texture rectangle! */ COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapS, texcoords[i][0], width, col); COMPUTE_NEAREST_TEXEL_LOCATION(tObj->WrapT, texcoords[i][1], height, row); - depthSample = *((const GLfloat *) texImage->Data + row * width + col); + texImage->FetchTexelf(texImage, col, row, 0, &depthSample); switch (function) { case GL_LEQUAL: @@ -2726,25 +2726,25 @@ sample_depth_texture( GLcontext *ctx, GLuint unit, depth00 = 1.0; } else { - depth00 = *((const GLfloat *) texImage->Data + j0 * width + i0); + texImage->FetchTexelf(texImage, i0, j0, 0, &depth00); } if (useBorderTexel & (I1BIT | J0BIT)) { depth10 = 1.0; } else { - depth10 = *((const GLfloat *) texImage->Data + j0 * width + i1); + texImage->FetchTexelf(texImage, i1, j0, 0, &depth10); } if (useBorderTexel & (I0BIT | J1BIT)) { depth01 = 1.0; } else { - depth01 = *((const GLfloat *) texImage->Data + j1 * width + i0); + texImage->FetchTexelf(texImage, i0, j1, 0, &depth01); } if (useBorderTexel & (I1BIT | J1BIT)) { depth11 = 1.0; } else { - depth11 = *((const GLfloat *) texImage->Data + j1 * width + i1); + texImage->FetchTexelf(texImage, i1, j1, 0, &depth11); } if (0) { @@ -2943,8 +2943,8 @@ sample_depth_texture2(const GLcontext *ctx, count = 0; for (jj = jmin; jj <= jmax; jj++) { for (ii = imin; ii <= imax; ii++) { - GLfloat depthSample = *((const GLfloat *) texImage->Data - + jj * width + ii); + GLfloat depthSample; + texImage->FetchTexelf(texImage, ii, jj, 0, &depthSample); if ((depthSample <= r[i] && lequal) || (depthSample >= r[i] && gequal)) { count++; |