mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-24 06:00:22 +01:00
mesa: refactor: move _mesa_update_minmax/histogram() into image.c
This commit is contained in:
parent
bce428c4a6
commit
eded7f010d
3 changed files with 64 additions and 74 deletions
|
|
@ -31,71 +31,6 @@
|
|||
#include "histogram.h"
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* Internal functions
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Update the min/max values from an array of fragment colors.
|
||||
*/
|
||||
void
|
||||
_mesa_update_minmax(GLcontext *ctx, GLuint n, const GLfloat rgba[][4])
|
||||
{
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
/* update mins */
|
||||
if (rgba[i][RCOMP] < ctx->MinMax.Min[RCOMP])
|
||||
ctx->MinMax.Min[RCOMP] = rgba[i][RCOMP];
|
||||
if (rgba[i][GCOMP] < ctx->MinMax.Min[GCOMP])
|
||||
ctx->MinMax.Min[GCOMP] = rgba[i][GCOMP];
|
||||
if (rgba[i][BCOMP] < ctx->MinMax.Min[BCOMP])
|
||||
ctx->MinMax.Min[BCOMP] = rgba[i][BCOMP];
|
||||
if (rgba[i][ACOMP] < ctx->MinMax.Min[ACOMP])
|
||||
ctx->MinMax.Min[ACOMP] = rgba[i][ACOMP];
|
||||
|
||||
/* update maxs */
|
||||
if (rgba[i][RCOMP] > ctx->MinMax.Max[RCOMP])
|
||||
ctx->MinMax.Max[RCOMP] = rgba[i][RCOMP];
|
||||
if (rgba[i][GCOMP] > ctx->MinMax.Max[GCOMP])
|
||||
ctx->MinMax.Max[GCOMP] = rgba[i][GCOMP];
|
||||
if (rgba[i][BCOMP] > ctx->MinMax.Max[BCOMP])
|
||||
ctx->MinMax.Max[BCOMP] = rgba[i][BCOMP];
|
||||
if (rgba[i][ACOMP] > ctx->MinMax.Max[ACOMP])
|
||||
ctx->MinMax.Max[ACOMP] = rgba[i][ACOMP];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Update the histogram values from an array of fragment colors.
|
||||
*/
|
||||
void
|
||||
_mesa_update_histogram(GLcontext *ctx, GLuint n, const GLfloat rgba[][4])
|
||||
{
|
||||
const GLint max = ctx->Histogram.Width - 1;
|
||||
GLfloat w = (GLfloat) max;
|
||||
GLuint i;
|
||||
|
||||
if (ctx->Histogram.Width == 0)
|
||||
return;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
GLint ri = IROUND(rgba[i][RCOMP] * w);
|
||||
GLint gi = IROUND(rgba[i][GCOMP] * w);
|
||||
GLint bi = IROUND(rgba[i][BCOMP] * w);
|
||||
GLint ai = IROUND(rgba[i][ACOMP] * w);
|
||||
ri = CLAMP(ri, 0, max);
|
||||
gi = CLAMP(gi, 0, max);
|
||||
bi = CLAMP(bi, 0, max);
|
||||
ai = CLAMP(ai, 0, max);
|
||||
ctx->Histogram.Count[ri][RCOMP]++;
|
||||
ctx->Histogram.Count[gi][GCOMP]++;
|
||||
ctx->Histogram.Count[bi][BCOMP]++;
|
||||
ctx->Histogram.Count[ai][ACOMP]++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* XXX the packed pixel formats haven't been tested.
|
||||
|
|
|
|||
|
|
@ -71,12 +71,6 @@ _mesa_ResetHistogram(GLenum target);
|
|||
extern void GLAPIENTRY
|
||||
_mesa_ResetMinmax(GLenum target);
|
||||
|
||||
extern void
|
||||
_mesa_update_minmax(GLcontext *ctx, GLuint n, const GLfloat rgba[][4]);
|
||||
|
||||
extern void
|
||||
_mesa_update_histogram(GLcontext *ctx, GLuint n, const GLfloat rgba[][4]);
|
||||
|
||||
extern void _mesa_init_histogram( GLcontext * ctx );
|
||||
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -34,7 +34,6 @@
|
|||
#include "context.h"
|
||||
#include "image.h"
|
||||
#include "imports.h"
|
||||
#include "histogram.h"
|
||||
#include "macros.h"
|
||||
#include "pixel.h"
|
||||
|
||||
|
|
@ -1431,6 +1430,68 @@ _mesa_scale_and_bias_depth_uint(const GLcontext *ctx, GLuint n,
|
|||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Update the min/max values from an array of fragment colors.
|
||||
*/
|
||||
static void
|
||||
update_minmax(GLcontext *ctx, GLuint n, const GLfloat rgba[][4])
|
||||
{
|
||||
GLuint i;
|
||||
for (i = 0; i < n; i++) {
|
||||
/* update mins */
|
||||
if (rgba[i][RCOMP] < ctx->MinMax.Min[RCOMP])
|
||||
ctx->MinMax.Min[RCOMP] = rgba[i][RCOMP];
|
||||
if (rgba[i][GCOMP] < ctx->MinMax.Min[GCOMP])
|
||||
ctx->MinMax.Min[GCOMP] = rgba[i][GCOMP];
|
||||
if (rgba[i][BCOMP] < ctx->MinMax.Min[BCOMP])
|
||||
ctx->MinMax.Min[BCOMP] = rgba[i][BCOMP];
|
||||
if (rgba[i][ACOMP] < ctx->MinMax.Min[ACOMP])
|
||||
ctx->MinMax.Min[ACOMP] = rgba[i][ACOMP];
|
||||
|
||||
/* update maxs */
|
||||
if (rgba[i][RCOMP] > ctx->MinMax.Max[RCOMP])
|
||||
ctx->MinMax.Max[RCOMP] = rgba[i][RCOMP];
|
||||
if (rgba[i][GCOMP] > ctx->MinMax.Max[GCOMP])
|
||||
ctx->MinMax.Max[GCOMP] = rgba[i][GCOMP];
|
||||
if (rgba[i][BCOMP] > ctx->MinMax.Max[BCOMP])
|
||||
ctx->MinMax.Max[BCOMP] = rgba[i][BCOMP];
|
||||
if (rgba[i][ACOMP] > ctx->MinMax.Max[ACOMP])
|
||||
ctx->MinMax.Max[ACOMP] = rgba[i][ACOMP];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Update the histogram values from an array of fragment colors.
|
||||
*/
|
||||
static void
|
||||
update_histogram(GLcontext *ctx, GLuint n, const GLfloat rgba[][4])
|
||||
{
|
||||
const GLint max = ctx->Histogram.Width - 1;
|
||||
GLfloat w = (GLfloat) max;
|
||||
GLuint i;
|
||||
|
||||
if (ctx->Histogram.Width == 0)
|
||||
return;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
GLint ri = IROUND(rgba[i][RCOMP] * w);
|
||||
GLint gi = IROUND(rgba[i][GCOMP] * w);
|
||||
GLint bi = IROUND(rgba[i][BCOMP] * w);
|
||||
GLint ai = IROUND(rgba[i][ACOMP] * w);
|
||||
ri = CLAMP(ri, 0, max);
|
||||
gi = CLAMP(gi, 0, max);
|
||||
bi = CLAMP(bi, 0, max);
|
||||
ai = CLAMP(ai, 0, max);
|
||||
ctx->Histogram.Count[ri][RCOMP]++;
|
||||
ctx->Histogram.Count[gi][GCOMP]++;
|
||||
ctx->Histogram.Count[bi][BCOMP]++;
|
||||
ctx->Histogram.Count[ai][ACOMP]++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Apply various pixel transfer operations to an array of RGBA pixels
|
||||
* as indicated by the transferOps bitmask
|
||||
|
|
@ -1486,11 +1547,11 @@ _mesa_apply_rgba_transfer_ops(GLcontext *ctx, GLbitfield transferOps,
|
|||
}
|
||||
/* update histogram count */
|
||||
if (transferOps & IMAGE_HISTOGRAM_BIT) {
|
||||
_mesa_update_histogram(ctx, n, (CONST GLfloat (*)[4]) rgba);
|
||||
update_histogram(ctx, n, (CONST GLfloat (*)[4]) rgba);
|
||||
}
|
||||
/* update min/max values */
|
||||
if (transferOps & IMAGE_MIN_MAX_BIT) {
|
||||
_mesa_update_minmax(ctx, n, (CONST GLfloat (*)[4]) rgba);
|
||||
update_minmax(ctx, n, (CONST GLfloat (*)[4]) rgba);
|
||||
}
|
||||
/* clamping to [0,1] */
|
||||
if (transferOps & IMAGE_CLAMP_BIT) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue