histogram.c revision f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97
18a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul/* 28a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * Mesa 3-D graphics library 3f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul * Version: 6.1 48a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * 5f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul * Copyright (C) 1999-2004 Brian Paul All Rights Reserved. 68a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * 78a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * Permission is hereby granted, free of charge, to any person obtaining a 88a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * copy of this software and associated documentation files (the "Software"), 98a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * to deal in the Software without restriction, including without limitation 108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * the rights to use, copy, modify, merge, publish, distribute, sublicense, 118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * and/or sell copies of the Software, and to permit persons to whom the 128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * Software is furnished to do so, subject to the following conditions: 138a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * 148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * The above copyright notice and this permission notice shall be included 158a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * in all copies or substantial portions of the Software. 168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * 178a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 208a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 228a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul */ 248a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#include "glheader.h" 278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#include "colormac.h" 288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#include "context.h" 298a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#include "image.h" 308a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#include "histogram.h" 318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 33a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul/********************************************************************** 34a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul * Internal functions 35a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul */ 36a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul 37a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul 38a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul/* 39a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul * Update the min/max values from an array of fragment colors. 40a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul */ 41a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paulvoid 42a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul_mesa_update_minmax(GLcontext *ctx, GLuint n, const GLfloat rgba[][4]) 43a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul{ 44a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul GLuint i; 45a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul for (i = 0; i < n; i++) { 46a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul /* update mins */ 47a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul if (rgba[i][RCOMP] < ctx->MinMax.Min[RCOMP]) 48a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ctx->MinMax.Min[RCOMP] = rgba[i][RCOMP]; 49a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul if (rgba[i][GCOMP] < ctx->MinMax.Min[GCOMP]) 50a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ctx->MinMax.Min[GCOMP] = rgba[i][GCOMP]; 51a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul if (rgba[i][BCOMP] < ctx->MinMax.Min[BCOMP]) 52a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ctx->MinMax.Min[BCOMP] = rgba[i][BCOMP]; 53a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul if (rgba[i][ACOMP] < ctx->MinMax.Min[ACOMP]) 54a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ctx->MinMax.Min[ACOMP] = rgba[i][ACOMP]; 55a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul 56a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul /* update maxs */ 57a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul if (rgba[i][RCOMP] > ctx->MinMax.Max[RCOMP]) 58a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ctx->MinMax.Max[RCOMP] = rgba[i][RCOMP]; 59a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul if (rgba[i][GCOMP] > ctx->MinMax.Max[GCOMP]) 60a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ctx->MinMax.Max[GCOMP] = rgba[i][GCOMP]; 61a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul if (rgba[i][BCOMP] > ctx->MinMax.Max[BCOMP]) 62a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ctx->MinMax.Max[BCOMP] = rgba[i][BCOMP]; 63a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul if (rgba[i][ACOMP] > ctx->MinMax.Max[ACOMP]) 64a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ctx->MinMax.Max[ACOMP] = rgba[i][ACOMP]; 65a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul } 66a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul} 67a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul 68a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul 69a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul/* 70a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul * Update the histogram values from an array of fragment colors. 71a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul */ 72a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paulvoid 73a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul_mesa_update_histogram(GLcontext *ctx, GLuint n, const GLfloat rgba[][4]) 74a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul{ 75a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul const GLint max = ctx->Histogram.Width - 1; 76a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul GLfloat w = (GLfloat) max; 77a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul GLuint i; 78a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul 79a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul if (ctx->Histogram.Width == 0) 80a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul return; 81a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul 82a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul for (i = 0; i < n; i++) { 83a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul GLint ri = IROUND(rgba[i][RCOMP] * w); 84a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul GLint gi = IROUND(rgba[i][GCOMP] * w); 85a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul GLint bi = IROUND(rgba[i][BCOMP] * w); 86a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul GLint ai = IROUND(rgba[i][ACOMP] * w); 87a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ri = CLAMP(ri, 0, max); 88a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul gi = CLAMP(gi, 0, max); 89a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul bi = CLAMP(bi, 0, max); 90a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ai = CLAMP(ai, 0, max); 91a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ctx->Histogram.Count[ri][RCOMP]++; 92a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ctx->Histogram.Count[gi][GCOMP]++; 93a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ctx->Histogram.Count[bi][BCOMP]++; 94a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul ctx->Histogram.Count[ai][ACOMP]++; 95a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul } 96a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul} 97a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul 98a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul 9990f042ae8dbc00ecedab5cc68dbc6abae4228af5Brian Paul/* 100a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul * XXX the packed pixel formats haven't been tested. 10190f042ae8dbc00ecedab5cc68dbc6abae4228af5Brian Paul */ 1028a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulstatic void 1038a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulpack_histogram( GLcontext *ctx, 1048a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint n, CONST GLuint rgba[][4], 1058a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLenum format, GLenum type, GLvoid *destination, 1068a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul const struct gl_pixelstore_attrib *packing ) 1078a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 1088a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul const GLint comps = _mesa_components_in_format(format); 1098a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint luminance[MAX_WIDTH]; 1108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 1118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA) { 1128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint i; 1138a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i = 0; i < n; i++) { 1148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul luminance[i] = rgba[i][RCOMP] + rgba[i][GCOMP] + rgba[i][BCOMP]; 1158a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1178a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 1188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#define PACK_MACRO(TYPE) \ 1198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { \ 1208a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint i; \ 1218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul switch (format) { \ 1228a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RED: \ 1238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) \ 1248a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i] = (TYPE) rgba[i][RCOMP]; \ 1258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_GREEN: \ 1278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) \ 1288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i] = (TYPE) rgba[i][GCOMP]; \ 1298a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1308a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_BLUE: \ 1318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) \ 1328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i] = (TYPE) rgba[i][BCOMP]; \ 1338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1348a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ALPHA: \ 1358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) \ 1368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i] = (TYPE) rgba[i][ACOMP]; \ 1378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE: \ 1398a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) \ 1408a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i] = (TYPE) luminance[i]; \ 1418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1428a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE_ALPHA: \ 1438a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) { \ 1448a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*2+0] = (TYPE) luminance[i]; \ 1458a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*2+1] = (TYPE) rgba[i][ACOMP]; \ 1468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 1478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB: \ 1498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) { \ 1508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*3+0] = (TYPE) rgba[i][RCOMP]; \ 1518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*3+1] = (TYPE) rgba[i][GCOMP]; \ 1528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*3+2] = (TYPE) rgba[i][BCOMP]; \ 1538a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 1548a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1558a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA: \ 1568a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) { \ 1578a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+0] = (TYPE) rgba[i][RCOMP]; \ 1588a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+1] = (TYPE) rgba[i][GCOMP]; \ 1598a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+2] = (TYPE) rgba[i][BCOMP]; \ 1608a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+3] = (TYPE) rgba[i][ACOMP]; \ 1618a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 1628a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1638a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_BGR: \ 1648a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) { \ 1658a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*3+0] = (TYPE) rgba[i][BCOMP]; \ 1668a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*3+1] = (TYPE) rgba[i][GCOMP]; \ 1678a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*3+2] = (TYPE) rgba[i][RCOMP]; \ 1688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 1698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1708a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_BGRA: \ 1718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) { \ 1728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+0] = (TYPE) rgba[i][BCOMP]; \ 1738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+1] = (TYPE) rgba[i][GCOMP]; \ 1748a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+2] = (TYPE) rgba[i][RCOMP]; \ 1758a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+3] = (TYPE) rgba[i][ACOMP]; \ 1768a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 1778a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1788a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ABGR_EXT: \ 1798a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i=0;i<n;i++) { \ 1808a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+0] = (TYPE) rgba[i][ACOMP]; \ 1818a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+1] = (TYPE) rgba[i][BCOMP]; \ 1828a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+2] = (TYPE) rgba[i][GCOMP]; \ 1838a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul dst[i*4+3] = (TYPE) rgba[i][RCOMP]; \ 1848a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 1858a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; \ 1868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul default: \ 18708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_problem(ctx, "bad format in pack_histogram"); \ 1888a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } \ 1898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1908a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 1918a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul switch (type) { 1928a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_UNSIGNED_BYTE: 1938a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 1948a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLubyte *dst = (GLubyte *) destination; 1958a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLubyte); 1968a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 1978a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 1988a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_BYTE: 1998a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 2008a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLbyte *dst = (GLbyte *) destination; 2018a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLbyte); 2028a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2038a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 2048a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_UNSIGNED_SHORT: 2058a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 2068a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLushort *dst = (GLushort *) destination; 2078a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLushort); 2088a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (packing->SwapBytes) { 2098a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul _mesa_swap2(dst, n * comps); 2108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 2138a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_SHORT: 2148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 2158a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLshort *dst = (GLshort *) destination; 2168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLshort); 2178a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (packing->SwapBytes) { 2188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul _mesa_swap2((GLushort *) dst, n * comps); 2198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2208a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 2228a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_UNSIGNED_INT: 2238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 2248a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint *dst = (GLuint *) destination; 2258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLuint); 2268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (packing->SwapBytes) { 2278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul _mesa_swap4(dst, n * comps); 2288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2298a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2308a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 2318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_INT: 2328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 2338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLint *dst = (GLint *) destination; 2348a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLint); 2358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (packing->SwapBytes) { 2368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul _mesa_swap4((GLuint *) dst, n * comps); 2378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2398a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 2408a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_FLOAT: 2418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 2428a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLfloat *dst = (GLfloat *) destination; 2438a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul PACK_MACRO(GLfloat); 2448a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (packing->SwapBytes) { 2458a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul _mesa_swap4((GLuint *) dst, n * comps); 2468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 249f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul case GL_HALF_FLOAT_ARB: 250f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul { 251f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul /* temporarily store as GLuints */ 252f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul GLuint temp[4*HISTOGRAM_TABLE_SIZE]; 253f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul GLhalfARB *dst = (GLhalfARB *) destination; 254f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul GLuint i; 255f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul /* get GLuint values */ 256f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul PACK_MACRO(GLuint); 257f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul /* convert to GLhalf */ 258f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul for (i = 0; i < n * comps; i++) { 259f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul dst[i] = _mesa_float_to_half((GLfloat) temp[i]); 260f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul } 261f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul if (packing->SwapBytes) { 262f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul _mesa_swap2((GLushort *) dst, n * comps); 263f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul } 264f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul } 265f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul break; 266a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_BYTE_3_3_2: 267a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGB) { 268a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLubyte *dst = (GLubyte *) destination; 269a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 270a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 271a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x7) << 5) 272a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x7) << 2) 273a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x3) ); 274a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 275a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 276a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 2778a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLubyte *dst = (GLubyte *) destination; 278a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 279a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_BGR); 280a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 281a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0x7) << 5) 282a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x7) << 2) 283a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x3) ); 284a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 2858a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 2868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 287a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_BYTE_2_3_3_REV: 288a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGB) { 289a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLubyte *dst = (GLubyte *) destination; 290a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 291a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 292a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x3) << 6) 293a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x7) << 3) 294a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x7) ); 295a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 296a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 297a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 298a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLubyte *dst = (GLubyte *) destination; 299a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 300a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_BGR); 301a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 302a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0x3) << 6) 303a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x7) << 3) 304a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x7) ); 305a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 3068a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 3078a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 308a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_SHORT_5_6_5: 309a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGB) { 3108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLushort *dst = (GLushort *) destination; 311a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 312a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 313a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11) 314a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3f) << 5) 315a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1f) ); 316a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 317a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 318a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 319a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 320a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 321a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_BGR); 322a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 323a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0x1f) << 11) 324a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3f) << 5) 325a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x1f) ); 3268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 3278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 3288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 329a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_SHORT_5_6_5_REV: 330a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGB) { 331a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 332a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 333a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 334a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0x1f) << 11) 335a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3f) << 5) 336a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x1f) ); 337a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 338a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 339a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 340a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 341a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 342a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_BGR); 343a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 344a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11) 345a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3f) << 5) 346a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1f) ); 3478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 3488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 3498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 350a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_SHORT_4_4_4_4: 351a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 352a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 353a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 354a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 355a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0xf) << 12) 356a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xf) << 8) 357a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xf) << 4) 358a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0xf) ); 359a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 360a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 361a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 362a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 363a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 364a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 365a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0xf) << 12) 366a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xf) << 8) 367a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xf) << 4) 368a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0xf) ); 369a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 370a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 371a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 372a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 373a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 374a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 375a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 376a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0xf) << 12) 377a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xf) << 8) 378a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xf) << 4) 379a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xf) ); 380a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 381a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 382a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul break; 383a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_SHORT_4_4_4_4_REV: 384a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 385a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 386a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 387a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 388a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0xf) << 12) 389a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xf) << 8) 390a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xf) << 4) 391a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xf) ); 392a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 393a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 394a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 395a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 396a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 397a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 398a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0xf) << 12) 399a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xf) << 8) 400a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xf) << 4) 401a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xf) ); 402a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 403a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 404a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 405a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 406a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 407a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 408a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 409a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0xf) << 12) 410a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xf) << 8) 411a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xf) << 4) 412a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0xf) ); 413a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 414a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 415a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul break; 416a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_SHORT_5_5_5_1: 417a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 418a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 419a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 420a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 421a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11) 422a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x1f) << 6) 423a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1f) << 1) 424a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0x1) ); 425a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 426a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 427a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 428a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 429a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 430a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 431a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0x1f) << 11) 432a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x1f) << 6) 433a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x1f) << 1) 434a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0x1) ); 435a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 436a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 437a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 438a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 439a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 440a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 441a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 442a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0x1f) << 11) 443a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1f) << 6) 444a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x1f) << 1) 445a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x1) ); 446a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 447a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 448a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul break; 449a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_SHORT_1_5_5_5_REV: 450a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 451a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 452a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 453a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 454a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0x1f) << 11) 455a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1f) << 6) 456a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x1f) << 1) 457a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x1) ); 458a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 459a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 460a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 461a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 462a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 463a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 464a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0x1f) << 11) 465a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x1f) << 6) 466a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x1f) << 1) 467a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1) ); 468a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 469a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 470a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 471a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLushort *dst = (GLushort *) destination; 472a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 473a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 474a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 475a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11) 476a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x1f) << 6) 477a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x1f) << 1) 478a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0x1) ); 479a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 480a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 481a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul break; 482a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_INT_8_8_8_8: 483a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 4848a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint *dst = (GLuint *) destination; 485a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 486a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 487a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0xff) << 24) 488a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xff) << 16) 489a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xff) << 8) 490a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0xff) ); 491a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 492a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 493a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 494a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 495a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 496a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 497a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0xff) << 24) 498a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xff) << 16) 499a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xff) << 8) 500a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0xff) ); 501a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 502a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 503a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 504a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 505a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 506a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 507a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 508a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0xff) << 24) 509a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xff) << 16) 510a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xff) << 8) 511a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xff) ); 5128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 5138a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 5148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 515a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_INT_8_8_8_8_REV: 516a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 517a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 518a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 519a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 520a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0xff) << 24) 521a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xff) << 16) 522a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xff) << 8) 523a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xff) ); 524a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 525a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 526a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 527a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 528a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 529a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 530a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0xff) << 24) 531a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0xff) << 16) 532a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xff) << 8) 533a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xff) ); 534a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 535a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 536a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 537a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 538a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 539a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 540a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 541a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0xff) << 24) 542a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0xff) << 16) 543a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0xff) << 8) 544a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0xff) ); 5458a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 5468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 5478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 548a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_INT_10_10_10_2: 549a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 550a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 551a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 552a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 553a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x3ff) << 22) 554a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3ff) << 12) 555a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x3ff) << 2) 556a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0x3) ); 557a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 558a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 559a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 560a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 561a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 562a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 563a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][BCOMP] & 0x3ff) << 22) 564a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3ff) << 12) 565a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x3ff) << 2) 566a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0x3) ); 567a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 568a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 569a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 570a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 571a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 572a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 573a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 574a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0x3ff) << 22) 575a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x3ff) << 12) 576a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3ff) << 2) 577a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x3) ); 578a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 579a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 580a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul break; 581a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul case GL_UNSIGNED_INT_2_10_10_10_REV: 582a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul if (format == GL_RGBA) { 583a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 584a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 585a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 586a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0x3ff) << 22) 587a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x3ff) << 12) 588a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3ff) << 2) 589a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x3) ); 590a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 591a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 592a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else if (format == GL_BGRA) { 593a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 594a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 595a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 596a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][ACOMP] & 0x3ff) << 22) 597a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][RCOMP] & 0x3ff) << 12) 598a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3ff) << 2) 599a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x3) ); 600a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 601a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul } 602a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul else { 603a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint *dst = (GLuint *) destination; 604a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul GLuint i; 605a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul ASSERT(format == GL_ABGR_EXT); 606a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul for (i = 0; i < n; i++) { 607a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul dst[i] = ((rgba[i][RCOMP] & 0x3ff) << 22) 608a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][GCOMP] & 0x3ff) << 12) 609a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][BCOMP] & 0x3ff) << 2) 610a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul | ((rgba[i][ACOMP] & 0x3) ); 6118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6138a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 6148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul default: 61508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_problem(ctx, "Bad type in pack_histogram"); 6168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6178a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul#undef PACK_MACRO 6198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 6208a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6228a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul/* 6238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * Given an internalFormat token passed to glHistogram or glMinMax, 6248a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * return the corresponding base format. 6258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul * Return -1 if invalid token. 6268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul */ 6278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulstatic GLint 6288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paulbase_histogram_format( GLenum format ) 6298a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 6308a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul switch (format) { 6318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ALPHA: 6328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ALPHA4: 6338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ALPHA8: 6348a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ALPHA12: 6358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_ALPHA16: 6368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return GL_ALPHA; 6378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE: 6388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE4: 6398a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE8: 6408a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE12: 6418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE16: 6428a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return GL_LUMINANCE; 6438a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE_ALPHA: 6448a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE4_ALPHA4: 6458a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE6_ALPHA2: 6468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE8_ALPHA8: 6478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE12_ALPHA4: 6488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE12_ALPHA12: 6498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_LUMINANCE16_ALPHA16: 6508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return GL_LUMINANCE_ALPHA; 6518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB: 6528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_R3_G3_B2: 6538a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB4: 6548a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB5: 6558a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB8: 6568a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB10: 6578a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB12: 6588a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB16: 6598a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return GL_RGB; 6608a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA: 6618a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA2: 6628a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA4: 6638a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB5_A1: 6648a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA8: 6658a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGB10_A2: 6668a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA12: 6678a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_RGBA16: 6688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return GL_RGBA; 6698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul default: 6708a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return -1; /* error */ 6718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 6738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6748a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 675a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul 676a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul/********************************************************************** 677a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul * API functions 678a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul */ 679a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul 680a46bd6f96a78525dc98bcb2176494e6d6dce5dceBrian Paul 681c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 6828a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_GetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) 6838a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 6848a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 685cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 6868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6876a9851d72d6cf9f5a6b0e3bd5bbb05706e071387Brian Paul if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) { 68808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmax"); 6898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 6908a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6918a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 6928a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_MINMAX) { 69308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinmax(target)"); 6948a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 6958a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 6968a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 697f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul if (format != GL_RED && 698f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_GREEN && 699f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_BLUE && 700f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_ALPHA && 701f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_RGB && 702f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_BGR && 703f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_RGBA && 704f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_BGRA && 705f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_ABGR_EXT && 706f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_LUMINANCE && 707f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_LUMINANCE_ALPHA) { 708f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogram(format)"); 7098a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 711f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul if (!_mesa_is_legal_format_and_type(ctx, format, type)) { 712f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmax(format or type)"); 713cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell return; 714cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell } 715cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell 7168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!values) 7178a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 7188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul { 7208a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLfloat minmax[2][4]; 7218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[0][RCOMP] = CLAMP(ctx->MinMax.Min[RCOMP], 0.0F, 1.0F); 7228a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[0][GCOMP] = CLAMP(ctx->MinMax.Min[GCOMP], 0.0F, 1.0F); 7238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[0][BCOMP] = CLAMP(ctx->MinMax.Min[BCOMP], 0.0F, 1.0F); 7248a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[0][ACOMP] = CLAMP(ctx->MinMax.Min[ACOMP], 0.0F, 1.0F); 7258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[1][RCOMP] = CLAMP(ctx->MinMax.Max[RCOMP], 0.0F, 1.0F); 7268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[1][GCOMP] = CLAMP(ctx->MinMax.Max[GCOMP], 0.0F, 1.0F); 7278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[1][BCOMP] = CLAMP(ctx->MinMax.Max[BCOMP], 0.0F, 1.0F); 7288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul minmax[1][ACOMP] = CLAMP(ctx->MinMax.Max[ACOMP], 0.0F, 1.0F); 7298cfd08b6134e2036ddceb1facfa82e15026068a2Brian Paul _mesa_pack_rgba_span_float(ctx, 2, (CONST GLfloat (*)[4]) minmax, 730a2003c2895b2231ff47ae5fa870887f1ef66ad29Brian Paul format, type, values, &ctx->Pack, 0); 7318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (reset) { 7348a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul _mesa_ResetMinmax(GL_MINMAX); 7358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 7378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 739c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 7408a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_GetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values) 7418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 7428a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 743cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 7448a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7456a9851d72d6cf9f5a6b0e3bd5bbb05706e071387Brian Paul if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) { 74608836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogram"); 7478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 7488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_HISTOGRAM) { 75108836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogram(target)"); 7528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 7538a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7548a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 755f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul if (format != GL_RED && 756f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_GREEN && 757f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_BLUE && 758f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_ALPHA && 759f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_RGB && 760f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_BGR && 761f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_RGBA && 762f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_BGRA && 763f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_ABGR_EXT && 764f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_LUMINANCE && 765f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul format != GL_LUMINANCE_ALPHA) { 766f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogram(format)"); 7678a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 769f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul if (!_mesa_is_legal_format_and_type(ctx, format, type)) { 770f959f6e1dc27c71fc0ccc56e09b29101b3bf3b97Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogram(format or type)"); 771cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell return; 772cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell } 773cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell 7748a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (!values) 7758a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 7768a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7778a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul pack_histogram(ctx, ctx->Histogram.Width, 7788a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul (CONST GLuint (*)[4]) ctx->Histogram.Count, 7798a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul format, type, values, &ctx->Pack); 7808a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7818a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (reset) { 7828a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint i; 7838a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) { 7848a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][0] = 0; 7858a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][1] = 0; 7868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][2] = 0; 7878a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][3] = 0; 7888a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 7908a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 7918a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7928a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 793c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 7948a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_GetHistogramParameterfv(GLenum target, GLenum pname, GLfloat *params) 7958a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 7968a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 797cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END(ctx); 7988a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 7996a9851d72d6cf9f5a6b0e3bd5bbb05706e071387Brian Paul if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) { 80008836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogramParameterfv"); 8018a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8028a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8038a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8048a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_HISTOGRAM && target != GL_PROXY_HISTOGRAM) { 80508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameterfv(target)"); 8068a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8078a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8088a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8098a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul switch (pname) { 8108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_WIDTH: 8118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.Width; 8128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8138a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_FORMAT: 8148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.Format; 8158a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_RED_SIZE: 8178a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.RedSize; 8188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_GREEN_SIZE: 8208a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.GreenSize; 8218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8228a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_BLUE_SIZE: 8238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.BlueSize; 8248a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_ALPHA_SIZE: 8268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.AlphaSize; 8278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_LUMINANCE_SIZE: 8298a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.LuminanceSize; 8308a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_SINK: 8328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->Histogram.Sink; 8338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8348a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul default: 83508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameterfv(pname)"); 8368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 8388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8398a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 840c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 8418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_GetHistogramParameteriv(GLenum target, GLenum pname, GLint *params) 8428a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 8438a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 844cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END(ctx); 8458a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8466a9851d72d6cf9f5a6b0e3bd5bbb05706e071387Brian Paul if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) { 84708836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogramParameteriv"); 8488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_HISTOGRAM && target != GL_PROXY_HISTOGRAM) { 85208836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameteriv(target)"); 8538a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8548a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8558a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8568a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul switch (pname) { 8578a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_WIDTH: 8588a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.Width; 8598a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8608a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_FORMAT: 8618a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.Format; 8628a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8638a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_RED_SIZE: 8648a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.RedSize; 8658a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8668a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_GREEN_SIZE: 8678a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.GreenSize; 8688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_BLUE_SIZE: 8708a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.BlueSize; 8718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_ALPHA_SIZE: 8738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.AlphaSize; 8748a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8758a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_LUMINANCE_SIZE: 8768a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.LuminanceSize; 8778a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8788a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul case GL_HISTOGRAM_SINK: 8798a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->Histogram.Sink; 8808a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul break; 8818a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul default: 88208836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameteriv(pname)"); 8838a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8848a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 8858a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 887c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 8888a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_GetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat *params) 8898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 8908a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 891cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END(ctx); 8928a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 8936a9851d72d6cf9f5a6b0e3bd5bbb05706e071387Brian Paul if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) { 89408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmaxParameterfv"); 8958a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 8968a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 8978a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_MINMAX) { 89808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinmaxParameterfv(target)"); 8998a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9008a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9018a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (pname == GL_MINMAX_FORMAT) { 9028a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->MinMax.Format; 9038a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9048a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else if (pname == GL_MINMAX_SINK) { 9058a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLfloat) ctx->MinMax.Sink; 9068a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9078a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else { 90808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinMaxParameterfv(pname)"); 9098a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 9118a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9128a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 913c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 9148a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_GetMinmaxParameteriv(GLenum target, GLenum pname, GLint *params) 9158a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 9168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 917cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END(ctx); 9188a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9196a9851d72d6cf9f5a6b0e3bd5bbb05706e071387Brian Paul if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) { 92008836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmaxParameteriv"); 9218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9228a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_MINMAX) { 92408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinmaxParameteriv(target)"); 9258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9268a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (pname == GL_MINMAX_FORMAT) { 9288a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->MinMax.Format; 9298a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9308a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else if (pname == GL_MINMAX_SINK) { 9318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul *params = (GLint) ctx->MinMax.Sink; 9328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else { 93408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinMaxParameteriv(pname)"); 9358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 9378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 939c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 9408a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_Histogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink) 9418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 9428a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint i; 9438a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLboolean error = GL_FALSE; 9448a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 945cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* sideeffects */ 9468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9476a9851d72d6cf9f5a6b0e3bd5bbb05706e071387Brian Paul if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) { 94808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glHistogram"); 9498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9508a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_HISTOGRAM && target != GL_PROXY_HISTOGRAM) { 95308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glHistogram(target)"); 9548a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9558a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9568a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9578a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (width < 0 || width > HISTOGRAM_TABLE_SIZE) { 9588a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target == GL_PROXY_HISTOGRAM) { 9598a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul error = GL_TRUE; 9608a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9618a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else { 9628a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (width < 0) 96308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glHistogram(width)"); 9648a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else 96508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_TABLE_TOO_LARGE, "glHistogram(width)"); 9668a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9678a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9708a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (width != 0 && _mesa_bitcount(width) != 1) { 9718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target == GL_PROXY_HISTOGRAM) { 9728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul error = GL_TRUE; 9738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9748a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else { 97508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_VALUE, "glHistogram(width)"); 9768a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9778a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9788a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9798a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9808a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (base_histogram_format(internalFormat) < 0) { 9818a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target == GL_PROXY_HISTOGRAM) { 9828a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul error = GL_TRUE; 9838a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9848a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else { 98508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glHistogram(internalFormat)"); 9868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 9878a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9888a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9908a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul /* reset histograms */ 9918a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) { 9928a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][0] = 0; 9938a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][1] = 0; 9948a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][2] = 0; 9958a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][3] = 0; 9968a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 9978a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 9988a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (error) { 9998a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Width = 0; 10008a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Format = 0; 10018a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.RedSize = 0; 10028a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.GreenSize = 0; 10038a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.BlueSize = 0; 10048a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.AlphaSize = 0; 10058a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.LuminanceSize = 0; 10068a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 10078a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul else { 10088a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Width = width; 10098a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Format = internalFormat; 10108a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Sink = sink; 1011e75d2424e53d6023f4414e40694cd467e5392b96Brian Paul ctx->Histogram.RedSize = 8 * sizeof(GLuint); 1012e75d2424e53d6023f4414e40694cd467e5392b96Brian Paul ctx->Histogram.GreenSize = 8 * sizeof(GLuint); 1013e75d2424e53d6023f4414e40694cd467e5392b96Brian Paul ctx->Histogram.BlueSize = 8 * sizeof(GLuint); 1014e75d2424e53d6023f4414e40694cd467e5392b96Brian Paul ctx->Histogram.AlphaSize = 8 * sizeof(GLuint); 1015e75d2424e53d6023f4414e40694cd467e5392b96Brian Paul ctx->Histogram.LuminanceSize = 8 * sizeof(GLuint); 10168a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 101722144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes 1018b5012e1ee1b0172dda3921bcf12e3605b1be589bBrian Paul ctx->NewState |= _NEW_PIXEL; 10198a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 10208a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10218a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 1022c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 10238a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_Minmax(GLenum target, GLenum internalFormat, GLboolean sink) 10248a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 10258a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 1026cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END(ctx); 10278a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10286a9851d72d6cf9f5a6b0e3bd5bbb05706e071387Brian Paul if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) { 102908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glMinmax"); 10308a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 10318a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 10328a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10338a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_MINMAX) { 103408836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glMinMax(target)"); 10358a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 10368a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 10378a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10388a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (base_histogram_format(internalFormat) < 0) { 103908836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glMinMax(internalFormat)"); 10408a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 10418a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 104222144ab7552f0799bcfca506bf4ffa7f70a06649Gareth Hughes 1043cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell if (ctx->MinMax.Sink == sink) 1044cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell return; 1045cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell FLUSH_VERTICES(ctx, _NEW_PIXEL); 10468a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->MinMax.Sink = sink; 10478a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 10488a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10498a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 1050c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 10518a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_ResetHistogram(GLenum target) 10528a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 10538a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GLuint i; 10548a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 1055cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* sideeffects */ 10568a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10576a9851d72d6cf9f5a6b0e3bd5bbb05706e071387Brian Paul if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) { 105808836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glResetHistogram"); 10598a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 10608a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 10618a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10628a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_HISTOGRAM) { 106308836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glResetHistogram(target)"); 10648a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 10658a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 10668a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10678a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) { 10688a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][0] = 0; 10698a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][1] = 0; 10708a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][2] = 0; 10718a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->Histogram.Count[i][3] = 0; 10728a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 10738a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 1074b5012e1ee1b0172dda3921bcf12e3605b1be589bBrian Paul ctx->NewState |= _NEW_PIXEL; 10758a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 10768a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10778a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 1078c40d1dd62dd9bcbb97128e37a75d991a8d3b2d8cKendall Bennettvoid GLAPIENTRY 10798a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul_mesa_ResetMinmax(GLenum target) 10808a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul{ 10818a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul GET_CURRENT_CONTEXT(ctx); 1082cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); 10838a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10846a9851d72d6cf9f5a6b0e3bd5bbb05706e071387Brian Paul if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) { 108508836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_OPERATION, "glResetMinmax"); 10868a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 10878a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 10888a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10898a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul if (target != GL_MINMAX) { 109008836341788a9f9d638d9dc8328510ccd18ddeb5Brian Paul _mesa_error(ctx, GL_INVALID_ENUM, "glResetMinMax(target)"); 10918a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul return; 10928a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul } 10938a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul 10948a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->MinMax.Min[RCOMP] = 1000; ctx->MinMax.Max[RCOMP] = -1000; 10958a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->MinMax.Min[GCOMP] = 1000; ctx->MinMax.Max[GCOMP] = -1000; 10968a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->MinMax.Min[BCOMP] = 1000; ctx->MinMax.Max[BCOMP] = -1000; 10978a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul ctx->MinMax.Min[ACOMP] = 1000; ctx->MinMax.Max[ACOMP] = -1000; 1098b5012e1ee1b0172dda3921bcf12e3605b1be589bBrian Paul ctx->NewState |= _NEW_PIXEL; 10998a9507442a9811e2c4a4bac6a993e8a900c50d4dBrian Paul} 11006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 11016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 11026dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 11036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/ 11046dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/***** Initialization *****/ 11056dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell/**********************************************************************/ 11066dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 11076dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwellvoid _mesa_init_histogram( GLcontext * ctx ) 11086dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell{ 11096dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell int i; 11106dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 11116dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /* Histogram group */ 11126dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Histogram.Width = 0; 11136dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Histogram.Format = GL_RGBA; 11146dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Histogram.Sink = GL_FALSE; 11156dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Histogram.RedSize = 0; 11166dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Histogram.GreenSize = 0; 11176dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Histogram.BlueSize = 0; 11186dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Histogram.AlphaSize = 0; 11196dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Histogram.LuminanceSize = 0; 11206dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) { 11216dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Histogram.Count[i][0] = 0; 11226dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Histogram.Count[i][1] = 0; 11236dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Histogram.Count[i][2] = 0; 11246dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->Histogram.Count[i][3] = 0; 11256dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell } 11266dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 11276dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell /* Min/Max group */ 11286dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->MinMax.Format = GL_RGBA; 11296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->MinMax.Sink = GL_FALSE; 11306dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->MinMax.Min[RCOMP] = 1000; ctx->MinMax.Max[RCOMP] = -1000; 11316dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->MinMax.Min[GCOMP] = 1000; ctx->MinMax.Max[GCOMP] = -1000; 11326dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->MinMax.Min[BCOMP] = 1000; ctx->MinMax.Max[BCOMP] = -1000; 11336dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell ctx->MinMax.Min[ACOMP] = 1000; ctx->MinMax.Max[ACOMP] = -1000; 11346dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell} 1135