ReactOS Fundraising Campaign 2012
 
€ 4,410 / € 30,000

Information | Donate

Home | Info | Community | Development | myReactOS | Contact Us

  1. Home
  2. Community
  3. Development
  4. myReactOS
  5. Fundraiser 2012

  1. Main Page
  2. Alphabetical List
  3. Data Structures
  4. Directories
  5. File List
  6. Data Fields
  7. Globals
  8. Related Pages

ReactOS Development > Doxygen

histogram.c
Go to the documentation of this file.
00001 /*
00002  * Mesa 3-D graphics library
00003  * Version:  6.3
00004  *
00005  * Copyright (C) 1999-2004  Brian Paul   All Rights Reserved.
00006  *
00007  * Permission is hereby granted, free of charge, to any person obtaining a
00008  * copy of this software and associated documentation files (the "Software"),
00009  * to deal in the Software without restriction, including without limitation
00010  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
00011  * and/or sell copies of the Software, and to permit persons to whom the
00012  * Software is furnished to do so, subject to the following conditions:
00013  *
00014  * The above copyright notice and this permission notice shall be included
00015  * in all copies or substantial portions of the Software.
00016  *
00017  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00018  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00019  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
00020  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
00021  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
00022  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
00023  */
00024 
00025 
00026 #include "glheader.h"
00027 #include "bufferobj.h"
00028 #include "colormac.h"
00029 #include "context.h"
00030 #include "image.h"
00031 #include "histogram.h"
00032 
00033 
00034 
00035 /*
00036  * XXX the packed pixel formats haven't been tested.
00037  */
00038 static void
00039 pack_histogram( GLcontext *ctx,
00040                 GLuint n, CONST GLuint rgba[][4],
00041                 GLenum format, GLenum type, GLvoid *destination,
00042                 const struct gl_pixelstore_attrib *packing )
00043 {
00044    const GLint comps = _mesa_components_in_format(format);
00045    GLuint luminance[MAX_WIDTH];
00046 
00047    if (format == GL_LUMINANCE || format == GL_LUMINANCE_ALPHA) {
00048       GLuint i;
00049       for (i = 0; i < n; i++) {
00050          luminance[i] = rgba[i][RCOMP] + rgba[i][GCOMP] + rgba[i][BCOMP];
00051       }
00052    }
00053 
00054 #define PACK_MACRO(TYPE)                    \
00055    {                                \
00056       GLuint i;                         \
00057       switch (format) {                     \
00058          case GL_RED:                       \
00059             for (i=0;i<n;i++)                   \
00060                dst[i] = (TYPE) rgba[i][RCOMP];          \
00061             break;                      \
00062          case GL_GREEN:                     \
00063             for (i=0;i<n;i++)                   \
00064                dst[i] = (TYPE) rgba[i][GCOMP];          \
00065             break;                      \
00066          case GL_BLUE:                      \
00067             for (i=0;i<n;i++)                   \
00068                dst[i] = (TYPE) rgba[i][BCOMP];          \
00069             break;                      \
00070          case GL_ALPHA:                     \
00071             for (i=0;i<n;i++)                   \
00072                dst[i] = (TYPE) rgba[i][ACOMP];          \
00073             break;                      \
00074          case GL_LUMINANCE:                 \
00075             for (i=0;i<n;i++)                   \
00076                dst[i] = (TYPE) luminance[i];            \
00077             break;                      \
00078          case GL_LUMINANCE_ALPHA:               \
00079             for (i=0;i<n;i++) {                 \
00080                dst[i*2+0] = (TYPE) luminance[i];        \
00081                dst[i*2+1] = (TYPE) rgba[i][ACOMP];      \
00082             }                           \
00083             break;                      \
00084          case GL_RGB:                       \
00085             for (i=0;i<n;i++) {                 \
00086                dst[i*3+0] = (TYPE) rgba[i][RCOMP];      \
00087                dst[i*3+1] = (TYPE) rgba[i][GCOMP];      \
00088                dst[i*3+2] = (TYPE) rgba[i][BCOMP];      \
00089             }                           \
00090             break;                      \
00091          case GL_RGBA:                      \
00092             for (i=0;i<n;i++) {                 \
00093                dst[i*4+0] = (TYPE) rgba[i][RCOMP];      \
00094                dst[i*4+1] = (TYPE) rgba[i][GCOMP];      \
00095                dst[i*4+2] = (TYPE) rgba[i][BCOMP];      \
00096                dst[i*4+3] = (TYPE) rgba[i][ACOMP];      \
00097             }                           \
00098             break;                      \
00099          case GL_BGR:                       \
00100             for (i=0;i<n;i++) {                 \
00101                dst[i*3+0] = (TYPE) rgba[i][BCOMP];      \
00102                dst[i*3+1] = (TYPE) rgba[i][GCOMP];      \
00103                dst[i*3+2] = (TYPE) rgba[i][RCOMP];      \
00104             }                           \
00105             break;                      \
00106          case GL_BGRA:                      \
00107             for (i=0;i<n;i++) {                 \
00108                dst[i*4+0] = (TYPE) rgba[i][BCOMP];      \
00109                dst[i*4+1] = (TYPE) rgba[i][GCOMP];      \
00110                dst[i*4+2] = (TYPE) rgba[i][RCOMP];      \
00111                dst[i*4+3] = (TYPE) rgba[i][ACOMP];      \
00112             }                           \
00113             break;                      \
00114          case GL_ABGR_EXT:                  \
00115             for (i=0;i<n;i++) {                 \
00116                dst[i*4+0] = (TYPE) rgba[i][ACOMP];      \
00117                dst[i*4+1] = (TYPE) rgba[i][BCOMP];      \
00118                dst[i*4+2] = (TYPE) rgba[i][GCOMP];      \
00119                dst[i*4+3] = (TYPE) rgba[i][RCOMP];      \
00120             }                           \
00121             break;                      \
00122          default:                       \
00123             _mesa_problem(ctx, "bad format in pack_histogram"); \
00124       }                             \
00125    }
00126 
00127    switch (type) {
00128       case GL_UNSIGNED_BYTE:
00129          {
00130             GLubyte *dst = (GLubyte *) destination;
00131             PACK_MACRO(GLubyte);
00132          }
00133          break;
00134       case GL_BYTE:
00135          {
00136             GLbyte *dst = (GLbyte *) destination;
00137             PACK_MACRO(GLbyte);
00138          }
00139          break;
00140       case GL_UNSIGNED_SHORT:
00141          {
00142             GLushort *dst = (GLushort *) destination;
00143             PACK_MACRO(GLushort);
00144             if (packing->SwapBytes) {
00145                _mesa_swap2(dst, n * comps);
00146             }
00147          }
00148          break;
00149       case GL_SHORT:
00150          {
00151             GLshort *dst = (GLshort *) destination;
00152             PACK_MACRO(GLshort);
00153             if (packing->SwapBytes) {
00154                _mesa_swap2((GLushort *) dst, n * comps);
00155             }
00156          }
00157          break;
00158       case GL_UNSIGNED_INT:
00159          {
00160             GLuint *dst = (GLuint *) destination;
00161             PACK_MACRO(GLuint);
00162             if (packing->SwapBytes) {
00163                _mesa_swap4(dst, n * comps);
00164             }
00165          }
00166          break;
00167       case GL_INT:
00168          {
00169             GLint *dst = (GLint *) destination;
00170             PACK_MACRO(GLint);
00171             if (packing->SwapBytes) {
00172                _mesa_swap4((GLuint *) dst, n * comps);
00173             }
00174          }
00175          break;
00176       case GL_FLOAT:
00177          {
00178             GLfloat *dst = (GLfloat *) destination;
00179             PACK_MACRO(GLfloat);
00180             if (packing->SwapBytes) {
00181                _mesa_swap4((GLuint *) dst, n * comps);
00182             }
00183          }
00184          break;
00185       case GL_HALF_FLOAT_ARB:
00186          {
00187             /* temporarily store as GLuints */
00188             GLuint temp[4*HISTOGRAM_TABLE_SIZE];
00189             GLhalfARB *dst = (GLhalfARB *) destination;
00190             GLuint i;
00191             /* get GLuint values */
00192             PACK_MACRO(GLuint);
00193             /* convert to GLhalf */
00194             for (i = 0; i < n * comps; i++) {
00195                dst[i] = _mesa_float_to_half((GLfloat) temp[i]);
00196             }
00197             if (packing->SwapBytes) {
00198                _mesa_swap2((GLushort *) dst, n * comps);
00199             }
00200          }
00201          break;
00202       case GL_UNSIGNED_BYTE_3_3_2:
00203          if (format == GL_RGB) {
00204             GLubyte *dst = (GLubyte *) destination;
00205             GLuint i;
00206             for (i = 0; i < n; i++) {
00207                dst[i] = ((rgba[i][RCOMP] & 0x7) << 5)
00208                       | ((rgba[i][GCOMP] & 0x7) << 2)
00209                       | ((rgba[i][BCOMP] & 0x3)     );
00210             }
00211          }
00212          else {
00213             GLubyte *dst = (GLubyte *) destination;
00214             GLuint i;
00215             ASSERT(format == GL_BGR);
00216             for (i = 0; i < n; i++) {
00217                dst[i] = ((rgba[i][BCOMP] & 0x7) << 5)
00218                       | ((rgba[i][GCOMP] & 0x7) << 2)
00219                       | ((rgba[i][RCOMP] & 0x3)     );
00220             }
00221          }
00222          break;
00223       case GL_UNSIGNED_BYTE_2_3_3_REV:
00224          if (format == GL_RGB) {
00225             GLubyte *dst = (GLubyte *) destination;
00226             GLuint i;
00227             for (i = 0; i < n; i++) {
00228                dst[i] = ((rgba[i][RCOMP] & 0x3) << 6)
00229                       | ((rgba[i][GCOMP] & 0x7) << 3)
00230                       | ((rgba[i][BCOMP] & 0x7)     );
00231             }
00232          }
00233          else {
00234             GLubyte *dst = (GLubyte *) destination;
00235             GLuint i;
00236             ASSERT(format == GL_BGR);
00237             for (i = 0; i < n; i++) {
00238                dst[i] = ((rgba[i][BCOMP] & 0x3) << 6)
00239                       | ((rgba[i][GCOMP] & 0x7) << 3)
00240                       | ((rgba[i][RCOMP] & 0x7)     );
00241             }
00242          }
00243          break;
00244       case GL_UNSIGNED_SHORT_5_6_5:
00245          if (format == GL_RGB) {
00246             GLushort *dst = (GLushort *) destination;
00247             GLuint i;
00248             for (i = 0; i < n; i++) {
00249                dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11)
00250                       | ((rgba[i][GCOMP] & 0x3f) <<  5)
00251                       | ((rgba[i][BCOMP] & 0x1f)      );
00252             }
00253          }
00254          else {
00255             GLushort *dst = (GLushort *) destination;
00256             GLuint i;
00257             ASSERT(format == GL_BGR);
00258             for (i = 0; i < n; i++) {
00259                dst[i] = ((rgba[i][BCOMP] & 0x1f) << 11)
00260                       | ((rgba[i][GCOMP] & 0x3f) <<  5)
00261                       | ((rgba[i][RCOMP] & 0x1f)      );
00262             }
00263          }
00264          break;
00265       case GL_UNSIGNED_SHORT_5_6_5_REV:
00266          if (format == GL_RGB) {
00267             GLushort *dst = (GLushort *) destination;
00268             GLuint i;
00269             for (i = 0; i < n; i++) {
00270                dst[i] = ((rgba[i][BCOMP] & 0x1f) << 11)
00271                       | ((rgba[i][GCOMP] & 0x3f) <<  5)
00272                       | ((rgba[i][RCOMP] & 0x1f)      );
00273             }
00274          }
00275          else {
00276             GLushort *dst = (GLushort *) destination;
00277             GLuint i;
00278             ASSERT(format == GL_BGR);
00279             for (i = 0; i < n; i++) {
00280                dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11)
00281                       | ((rgba[i][GCOMP] & 0x3f) <<  5)
00282                       | ((rgba[i][BCOMP] & 0x1f)      );
00283             }
00284          }
00285          break;
00286       case GL_UNSIGNED_SHORT_4_4_4_4:
00287          if (format == GL_RGBA) {
00288             GLushort *dst = (GLushort *) destination;
00289             GLuint i;
00290             for (i = 0; i < n; i++) {
00291                dst[i] = ((rgba[i][RCOMP] & 0xf) << 12)
00292                       | ((rgba[i][GCOMP] & 0xf) <<  8)
00293                       | ((rgba[i][BCOMP] & 0xf) <<  4)
00294                       | ((rgba[i][ACOMP] & 0xf)      );
00295             }
00296          }
00297          else if (format == GL_BGRA) {
00298             GLushort *dst = (GLushort *) destination;
00299             GLuint i;
00300             for (i = 0; i < n; i++) {
00301                dst[i] = ((rgba[i][BCOMP] & 0xf) << 12)
00302                       | ((rgba[i][GCOMP] & 0xf) <<  8)
00303                       | ((rgba[i][RCOMP] & 0xf) <<  4)
00304                       | ((rgba[i][ACOMP] & 0xf)      );
00305             }
00306          }
00307          else {
00308             GLushort *dst = (GLushort *) destination;
00309             GLuint i;
00310             ASSERT(format == GL_ABGR_EXT);
00311             for (i = 0; i < n; i++) {
00312                dst[i] = ((rgba[i][ACOMP] & 0xf) << 12)
00313                       | ((rgba[i][BCOMP] & 0xf) <<  8)
00314                       | ((rgba[i][GCOMP] & 0xf) <<  4)
00315                       | ((rgba[i][RCOMP] & 0xf)      );
00316             }
00317          }
00318          break;
00319       case GL_UNSIGNED_SHORT_4_4_4_4_REV:
00320          if (format == GL_RGBA) {
00321             GLushort *dst = (GLushort *) destination;
00322             GLuint i;
00323             for (i = 0; i < n; i++) {
00324                dst[i] = ((rgba[i][ACOMP] & 0xf) << 12)
00325                       | ((rgba[i][BCOMP] & 0xf) <<  8)
00326                       | ((rgba[i][GCOMP] & 0xf) <<  4)
00327                       | ((rgba[i][RCOMP] & 0xf)      );
00328             }
00329          }
00330          else if (format == GL_BGRA) {
00331             GLushort *dst = (GLushort *) destination;
00332             GLuint i;
00333             for (i = 0; i < n; i++) {
00334                dst[i] = ((rgba[i][ACOMP] & 0xf) << 12)
00335                       | ((rgba[i][RCOMP] & 0xf) <<  8)
00336                       | ((rgba[i][GCOMP] & 0xf) <<  4)
00337                       | ((rgba[i][BCOMP] & 0xf)      );
00338             }
00339          }
00340          else {
00341             GLushort *dst = (GLushort *) destination;
00342             GLuint i;
00343             ASSERT(format == GL_ABGR_EXT);
00344             for (i = 0; i < n; i++) {
00345                dst[i] = ((rgba[i][RCOMP] & 0xf) << 12)
00346                       | ((rgba[i][GCOMP] & 0xf) <<  8)
00347                       | ((rgba[i][BCOMP] & 0xf) <<  4)
00348                       | ((rgba[i][ACOMP] & 0xf)      );
00349             }
00350          }
00351          break;
00352       case GL_UNSIGNED_SHORT_5_5_5_1:
00353          if (format == GL_RGBA) {
00354             GLushort *dst = (GLushort *) destination;
00355             GLuint i;
00356             for (i = 0; i < n; i++) {
00357                dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11)
00358                       | ((rgba[i][GCOMP] & 0x1f) <<  6)
00359                       | ((rgba[i][BCOMP] & 0x1f) <<  1)
00360                       | ((rgba[i][ACOMP] & 0x1)       );
00361             }
00362          }
00363          else if (format == GL_BGRA) {
00364             GLushort *dst = (GLushort *) destination;
00365             GLuint i;
00366             for (i = 0; i < n; i++) {
00367                dst[i] = ((rgba[i][BCOMP] & 0x1f) << 11)
00368                       | ((rgba[i][GCOMP] & 0x1f) <<  6)
00369                       | ((rgba[i][RCOMP] & 0x1f) <<  1)
00370                       | ((rgba[i][ACOMP] & 0x1)       );
00371             }
00372          }
00373          else {
00374             GLushort *dst = (GLushort *) destination;
00375             GLuint i;
00376             ASSERT(format == GL_ABGR_EXT);
00377             for (i = 0; i < n; i++) {
00378                dst[i] = ((rgba[i][ACOMP] & 0x1f) << 11)
00379                       | ((rgba[i][BCOMP] & 0x1f) <<  6)
00380                       | ((rgba[i][GCOMP] & 0x1f) <<  1)
00381                       | ((rgba[i][RCOMP] & 0x1)       );
00382             }
00383          }
00384          break;
00385       case GL_UNSIGNED_SHORT_1_5_5_5_REV:
00386          if (format == GL_RGBA) {
00387             GLushort *dst = (GLushort *) destination;
00388             GLuint i;
00389             for (i = 0; i < n; i++) {
00390                dst[i] = ((rgba[i][ACOMP] & 0x1f) << 11)
00391                       | ((rgba[i][BCOMP] & 0x1f) <<  6)
00392                       | ((rgba[i][GCOMP] & 0x1f) <<  1)
00393                       | ((rgba[i][RCOMP] & 0x1)       );
00394             }
00395          }
00396          else if (format == GL_BGRA) {
00397             GLushort *dst = (GLushort *) destination;
00398             GLuint i;
00399             for (i = 0; i < n; i++) {
00400                dst[i] = ((rgba[i][ACOMP] & 0x1f) << 11)
00401                       | ((rgba[i][RCOMP] & 0x1f) <<  6)
00402                       | ((rgba[i][GCOMP] & 0x1f) <<  1)
00403                       | ((rgba[i][BCOMP] & 0x1)       );
00404             }
00405          }
00406          else {
00407             GLushort *dst = (GLushort *) destination;
00408             GLuint i;
00409             ASSERT(format == GL_ABGR_EXT);
00410             for (i = 0; i < n; i++) {
00411                dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11)
00412                       | ((rgba[i][GCOMP] & 0x1f) <<  6)
00413                       | ((rgba[i][BCOMP] & 0x1f) <<  1)
00414                       | ((rgba[i][ACOMP] & 0x1)       );
00415             }
00416          }
00417          break;
00418       case GL_UNSIGNED_INT_8_8_8_8:
00419          if (format == GL_RGBA) {
00420             GLuint *dst = (GLuint *) destination;
00421             GLuint i;
00422             for (i = 0; i < n; i++) {
00423                dst[i] = ((rgba[i][RCOMP] & 0xff) << 24)
00424                       | ((rgba[i][GCOMP] & 0xff) << 16)
00425                       | ((rgba[i][BCOMP] & 0xff) <<  8)
00426                       | ((rgba[i][ACOMP] & 0xff)      );
00427             }
00428          }
00429          else if (format == GL_BGRA) {
00430             GLuint *dst = (GLuint *) destination;
00431             GLuint i;
00432             for (i = 0; i < n; i++) {
00433                dst[i] = ((rgba[i][BCOMP] & 0xff) << 24)
00434                       | ((rgba[i][GCOMP] & 0xff) << 16)
00435                       | ((rgba[i][RCOMP] & 0xff) <<  8)
00436                       | ((rgba[i][ACOMP] & 0xff)      );
00437             }
00438          }
00439          else {
00440             GLuint *dst = (GLuint *) destination;
00441             GLuint i;
00442             ASSERT(format == GL_ABGR_EXT);
00443             for (i = 0; i < n; i++) {
00444                dst[i] = ((rgba[i][ACOMP] & 0xff) << 24)
00445                       | ((rgba[i][BCOMP] & 0xff) << 16)
00446                       | ((rgba[i][GCOMP] & 0xff) <<  8)
00447                       | ((rgba[i][RCOMP] & 0xff)      );
00448             }
00449          }
00450          break;
00451       case GL_UNSIGNED_INT_8_8_8_8_REV:
00452          if (format == GL_RGBA) {
00453             GLuint *dst = (GLuint *) destination;
00454             GLuint i;
00455             for (i = 0; i < n; i++) {
00456                dst[i] = ((rgba[i][ACOMP] & 0xff) << 24)
00457                       | ((rgba[i][BCOMP] & 0xff) << 16)
00458                       | ((rgba[i][GCOMP] & 0xff) <<  8)
00459                       | ((rgba[i][RCOMP] & 0xff)      );
00460             }
00461          }
00462          else if (format == GL_BGRA) {
00463             GLuint *dst = (GLuint *) destination;
00464             GLuint i;
00465             for (i = 0; i < n; i++) {
00466                dst[i] = ((rgba[i][ACOMP] & 0xff) << 24)
00467                       | ((rgba[i][RCOMP] & 0xff) << 16)
00468                       | ((rgba[i][GCOMP] & 0xff) <<  8)
00469                       | ((rgba[i][BCOMP] & 0xff)      );
00470             }
00471          }
00472          else {
00473             GLuint *dst = (GLuint *) destination;
00474             GLuint i;
00475             ASSERT(format == GL_ABGR_EXT);
00476             for (i = 0; i < n; i++) {
00477                dst[i] = ((rgba[i][RCOMP] & 0xff) << 24)
00478                       | ((rgba[i][GCOMP] & 0xff) << 16)
00479                       | ((rgba[i][BCOMP] & 0xff) <<  8)
00480                       | ((rgba[i][ACOMP] & 0xff)      );
00481             }
00482          }
00483          break;
00484       case GL_UNSIGNED_INT_10_10_10_2:
00485          if (format == GL_RGBA) {
00486             GLuint *dst = (GLuint *) destination;
00487             GLuint i;
00488             for (i = 0; i < n; i++) {
00489                dst[i] = ((rgba[i][RCOMP] & 0x3ff) << 22)
00490                       | ((rgba[i][GCOMP] & 0x3ff) << 12)
00491                       | ((rgba[i][BCOMP] & 0x3ff) <<  2)
00492                       | ((rgba[i][ACOMP] & 0x3)        );
00493             }
00494          }
00495          else if (format == GL_BGRA) {
00496             GLuint *dst = (GLuint *) destination;
00497             GLuint i;
00498             for (i = 0; i < n; i++) {
00499                dst[i] = ((rgba[i][BCOMP] & 0x3ff) << 22)
00500                       | ((rgba[i][GCOMP] & 0x3ff) << 12)
00501                       | ((rgba[i][RCOMP] & 0x3ff) <<  2)
00502                       | ((rgba[i][ACOMP] & 0x3)        );
00503             }
00504          }
00505          else {
00506             GLuint *dst = (GLuint *) destination;
00507             GLuint i;
00508             ASSERT(format == GL_ABGR_EXT);
00509             for (i = 0; i < n; i++) {
00510                dst[i] = ((rgba[i][ACOMP] & 0x3ff) << 22)
00511                       | ((rgba[i][BCOMP] & 0x3ff) << 12)
00512                       | ((rgba[i][GCOMP] & 0x3ff) <<  2)
00513                       | ((rgba[i][RCOMP] & 0x3)        );
00514             }
00515          }
00516          break;
00517       case GL_UNSIGNED_INT_2_10_10_10_REV:
00518          if (format == GL_RGBA) {
00519             GLuint *dst = (GLuint *) destination;
00520             GLuint i;
00521             for (i = 0; i < n; i++) {
00522                dst[i] = ((rgba[i][ACOMP] & 0x3ff) << 22)
00523                       | ((rgba[i][BCOMP] & 0x3ff) << 12)
00524                       | ((rgba[i][GCOMP] & 0x3ff) <<  2)
00525                       | ((rgba[i][RCOMP] & 0x3)        );
00526             }
00527          }
00528          else if (format == GL_BGRA) {
00529             GLuint *dst = (GLuint *) destination;
00530             GLuint i;
00531             for (i = 0; i < n; i++) {
00532                dst[i] = ((rgba[i][ACOMP] & 0x3ff) << 22)
00533                       | ((rgba[i][RCOMP] & 0x3ff) << 12)
00534                       | ((rgba[i][GCOMP] & 0x3ff) <<  2)
00535                       | ((rgba[i][BCOMP] & 0x3)        );
00536             }
00537          }
00538          else {
00539             GLuint *dst = (GLuint *) destination;
00540             GLuint i;
00541             ASSERT(format == GL_ABGR_EXT);
00542             for (i = 0; i < n; i++) {
00543                dst[i] = ((rgba[i][RCOMP] & 0x3ff) << 22)
00544                       | ((rgba[i][GCOMP] & 0x3ff) << 12)
00545                       | ((rgba[i][BCOMP] & 0x3ff) <<  2)
00546                       | ((rgba[i][ACOMP] & 0x3)        );
00547             }
00548          }
00549          break;
00550       default:
00551          _mesa_problem(ctx, "Bad type in pack_histogram");
00552    }
00553 
00554 #undef PACK_MACRO
00555 }
00556 
00557 
00558 /*
00559  * Given an internalFormat token passed to glHistogram or glMinMax,
00560  * return the corresponding base format.
00561  * Return -1 if invalid token.
00562  */
00563 static GLint
00564 base_histogram_format( GLenum format )
00565 {
00566    switch (format) {
00567       case GL_ALPHA:
00568       case GL_ALPHA4:
00569       case GL_ALPHA8:
00570       case GL_ALPHA12:
00571       case GL_ALPHA16:
00572          return GL_ALPHA;
00573       case GL_LUMINANCE:
00574       case GL_LUMINANCE4:
00575       case GL_LUMINANCE8:
00576       case GL_LUMINANCE12:
00577       case GL_LUMINANCE16:
00578          return GL_LUMINANCE;
00579       case GL_LUMINANCE_ALPHA:
00580       case GL_LUMINANCE4_ALPHA4:
00581       case GL_LUMINANCE6_ALPHA2:
00582       case GL_LUMINANCE8_ALPHA8:
00583       case GL_LUMINANCE12_ALPHA4:
00584       case GL_LUMINANCE12_ALPHA12:
00585       case GL_LUMINANCE16_ALPHA16:
00586          return GL_LUMINANCE_ALPHA;
00587       case GL_RGB:
00588       case GL_R3_G3_B2:
00589       case GL_RGB4:
00590       case GL_RGB5:
00591       case GL_RGB8:
00592       case GL_RGB10:
00593       case GL_RGB12:
00594       case GL_RGB16:
00595          return GL_RGB;
00596       case GL_RGBA:
00597       case GL_RGBA2:
00598       case GL_RGBA4:
00599       case GL_RGB5_A1:
00600       case GL_RGBA8:
00601       case GL_RGB10_A2:
00602       case GL_RGBA12:
00603       case GL_RGBA16:
00604          return GL_RGBA;
00605       default:
00606          return -1;  /* error */
00607    }
00608 }
00609 
00610 
00611 
00612 /**********************************************************************
00613  * API functions
00614  */
00615 
00616 
00617 void GLAPIENTRY
00618 _mesa_GetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values)
00619 {
00620    GET_CURRENT_CONTEXT(ctx);
00621    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
00622 
00623    if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {
00624       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmax");
00625       return;
00626    }
00627 
00628    if (target != GL_MINMAX) {
00629       _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinmax(target)");
00630       return;
00631    }
00632 
00633    if (format != GL_RED &&
00634        format != GL_GREEN &&
00635        format != GL_BLUE &&
00636        format != GL_ALPHA &&
00637        format != GL_RGB &&
00638        format != GL_BGR &&
00639        format != GL_RGBA &&
00640        format != GL_BGRA &&
00641        format != GL_ABGR_EXT &&
00642        format != GL_LUMINANCE &&
00643        format != GL_LUMINANCE_ALPHA) {
00644       _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinMax(format)");
00645    }
00646 
00647    if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
00648       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmax(format or type)");
00649       return;
00650    }
00651 
00652    if (ctx->Pack.BufferObj->Name) {
00653       /* pack min/max values into a PBO */
00654       GLubyte *buf;
00655       if (!_mesa_validate_pbo_access(1, &ctx->Pack, 2, 1, 1,
00656                                      format, type, values)) {
00657          _mesa_error(ctx, GL_INVALID_OPERATION,
00658                      "glGetMinMax(invalid PBO access)");
00659          return;
00660       }
00661       buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,
00662                                               GL_WRITE_ONLY_ARB,
00663                                               ctx->Pack.BufferObj);
00664       if (!buf) {
00665          /* buffer is already mapped - that's an error */
00666          _mesa_error(ctx, GL_INVALID_OPERATION,"glGetMinMax(PBO is mapped)");
00667          return;
00668       }
00669       values = ADD_POINTERS(buf, values);
00670    }
00671    else if (!values) {
00672       /* not an error */
00673       return;
00674    }
00675 
00676    {
00677       GLfloat minmax[2][4];
00678       minmax[0][RCOMP] = CLAMP(ctx->MinMax.Min[RCOMP], 0.0F, 1.0F);
00679       minmax[0][GCOMP] = CLAMP(ctx->MinMax.Min[GCOMP], 0.0F, 1.0F);
00680       minmax[0][BCOMP] = CLAMP(ctx->MinMax.Min[BCOMP], 0.0F, 1.0F);
00681       minmax[0][ACOMP] = CLAMP(ctx->MinMax.Min[ACOMP], 0.0F, 1.0F);
00682       minmax[1][RCOMP] = CLAMP(ctx->MinMax.Max[RCOMP], 0.0F, 1.0F);
00683       minmax[1][GCOMP] = CLAMP(ctx->MinMax.Max[GCOMP], 0.0F, 1.0F);
00684       minmax[1][BCOMP] = CLAMP(ctx->MinMax.Max[BCOMP], 0.0F, 1.0F);
00685       minmax[1][ACOMP] = CLAMP(ctx->MinMax.Max[ACOMP], 0.0F, 1.0F);
00686       _mesa_pack_rgba_span_float(ctx, 2, minmax,
00687                                  format, type, values, &ctx->Pack, 0x0);
00688    }
00689 
00690    if (ctx->Pack.BufferObj->Name) {
00691       ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,
00692                               ctx->Pack.BufferObj);
00693    }
00694 
00695    if (reset) {
00696       _mesa_ResetMinmax(GL_MINMAX);
00697    }
00698 }
00699 
00700 
00701 void GLAPIENTRY
00702 _mesa_GetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values)
00703 {
00704    GET_CURRENT_CONTEXT(ctx);
00705    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
00706 
00707    if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {
00708       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogram");
00709       return;
00710    }
00711 
00712    if (target != GL_HISTOGRAM) {
00713       _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogram(target)");
00714       return;
00715    }
00716 
00717    if (format != GL_RED &&
00718        format != GL_GREEN &&
00719        format != GL_BLUE &&
00720        format != GL_ALPHA &&
00721        format != GL_RGB &&
00722        format != GL_BGR &&
00723        format != GL_RGBA &&
00724        format != GL_BGRA &&
00725        format != GL_ABGR_EXT &&
00726        format != GL_LUMINANCE &&
00727        format != GL_LUMINANCE_ALPHA) {
00728       _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogram(format)");
00729    }
00730 
00731    if (!_mesa_is_legal_format_and_type(ctx, format, type)) {
00732       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogram(format or type)");
00733       return;
00734    }
00735 
00736    if (ctx->Pack.BufferObj->Name) {
00737       /* pack min/max values into a PBO */
00738       GLubyte *buf;
00739       if (!_mesa_validate_pbo_access(1, &ctx->Pack, ctx->Histogram.Width, 1, 1,
00740                                      format, type, values)) {
00741          _mesa_error(ctx, GL_INVALID_OPERATION,
00742                      "glGetHistogram(invalid PBO access)");
00743          return;
00744       }
00745       buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,
00746                                               GL_WRITE_ONLY_ARB,
00747                                               ctx->Pack.BufferObj);
00748       if (!buf) {
00749          /* buffer is already mapped - that's an error */
00750          _mesa_error(ctx,GL_INVALID_OPERATION,"glGetHistogram(PBO is mapped)");
00751          return;
00752       }
00753       values = ADD_POINTERS(buf, values);
00754    }
00755    else if (!values) {
00756       /* not an error */
00757       return;
00758    }
00759 
00760    pack_histogram(ctx, ctx->Histogram.Width,
00761                   (CONST GLuint (*)[4]) ctx->Histogram.Count,
00762                   format, type, values, &ctx->Pack);
00763 
00764    if (ctx->Pack.BufferObj->Name) {
00765       ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,
00766                               ctx->Pack.BufferObj);
00767    }
00768 
00769    if (reset) {
00770       GLuint i;
00771       for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) {
00772          ctx->Histogram.Count[i][0] = 0;
00773          ctx->Histogram.Count[i][1] = 0;
00774          ctx->Histogram.Count[i][2] = 0;
00775          ctx->Histogram.Count[i][3] = 0;
00776       }
00777    }
00778 }
00779 
00780 
00781 void GLAPIENTRY
00782 _mesa_GetHistogramParameterfv(GLenum target, GLenum pname, GLfloat *params)
00783 {
00784    GET_CURRENT_CONTEXT(ctx);
00785    ASSERT_OUTSIDE_BEGIN_END(ctx);
00786 
00787    if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {
00788       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogramParameterfv");
00789       return;
00790    }
00791 
00792    if (target != GL_HISTOGRAM && target != GL_PROXY_HISTOGRAM) {
00793       _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameterfv(target)");
00794       return;
00795    }
00796 
00797    switch (pname) {
00798       case GL_HISTOGRAM_WIDTH:
00799          *params = (GLfloat) ctx->Histogram.Width;
00800          break;
00801       case GL_HISTOGRAM_FORMAT:
00802          *params = (GLfloat) ctx->Histogram.Format;
00803          break;
00804       case GL_HISTOGRAM_RED_SIZE:
00805          *params = (GLfloat) ctx->Histogram.RedSize;
00806          break;
00807       case GL_HISTOGRAM_GREEN_SIZE:
00808          *params = (GLfloat) ctx->Histogram.GreenSize;
00809          break;
00810       case GL_HISTOGRAM_BLUE_SIZE:
00811          *params = (GLfloat) ctx->Histogram.BlueSize;
00812          break;
00813       case GL_HISTOGRAM_ALPHA_SIZE:
00814          *params = (GLfloat) ctx->Histogram.AlphaSize;
00815          break;
00816       case GL_HISTOGRAM_LUMINANCE_SIZE:
00817          *params = (GLfloat) ctx->Histogram.LuminanceSize;
00818          break;
00819       case GL_HISTOGRAM_SINK:
00820          *params = (GLfloat) ctx->Histogram.Sink;
00821          break;
00822       default:
00823          _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameterfv(pname)");
00824    }
00825 }
00826 
00827 
00828 void GLAPIENTRY
00829 _mesa_GetHistogramParameteriv(GLenum target, GLenum pname, GLint *params)
00830 {
00831    GET_CURRENT_CONTEXT(ctx);
00832    ASSERT_OUTSIDE_BEGIN_END(ctx);
00833 
00834    if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {
00835       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogramParameteriv");
00836       return;
00837    }
00838 
00839    if (target != GL_HISTOGRAM && target != GL_PROXY_HISTOGRAM) {
00840       _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameteriv(target)");
00841       return;
00842    }
00843 
00844    switch (pname) {
00845       case GL_HISTOGRAM_WIDTH:
00846          *params = (GLint) ctx->Histogram.Width;
00847          break;
00848       case GL_HISTOGRAM_FORMAT:
00849          *params = (GLint) ctx->Histogram.Format;
00850          break;
00851       case GL_HISTOGRAM_RED_SIZE:
00852          *params = (GLint) ctx->Histogram.RedSize;
00853          break;
00854       case GL_HISTOGRAM_GREEN_SIZE:
00855          *params = (GLint) ctx->Histogram.GreenSize;
00856          break;
00857       case GL_HISTOGRAM_BLUE_SIZE:
00858          *params = (GLint) ctx->Histogram.BlueSize;
00859          break;
00860       case GL_HISTOGRAM_ALPHA_SIZE:
00861          *params = (GLint) ctx->Histogram.AlphaSize;
00862          break;
00863       case GL_HISTOGRAM_LUMINANCE_SIZE:
00864          *params = (GLint) ctx->Histogram.LuminanceSize;
00865          break;
00866       case GL_HISTOGRAM_SINK:
00867          *params = (GLint) ctx->Histogram.Sink;
00868          break;
00869       default:
00870          _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameteriv(pname)");
00871    }
00872 }
00873 
00874 
00875 void GLAPIENTRY
00876 _mesa_GetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat *params)
00877 {
00878    GET_CURRENT_CONTEXT(ctx);
00879    ASSERT_OUTSIDE_BEGIN_END(ctx);
00880 
00881    if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {
00882       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmaxParameterfv");
00883       return;
00884    }
00885    if (target != GL_MINMAX) {
00886       _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinmaxParameterfv(target)");
00887       return;
00888    }
00889    if (pname == GL_MINMAX_FORMAT) {
00890       *params = (GLfloat) ctx->MinMax.Format;
00891    }
00892    else if (pname == GL_MINMAX_SINK) {
00893       *params = (GLfloat) ctx->MinMax.Sink;
00894    }
00895    else {
00896       _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinMaxParameterfv(pname)");
00897    }
00898 }
00899 
00900 
00901 void GLAPIENTRY
00902 _mesa_GetMinmaxParameteriv(GLenum target, GLenum pname, GLint *params)
00903 {
00904    GET_CURRENT_CONTEXT(ctx);
00905    ASSERT_OUTSIDE_BEGIN_END(ctx);
00906 
00907    if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {
00908       _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmaxParameteriv");
00909       return;
00910    }
00911    if (target != GL_MINMAX) {
00912       _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinmaxParameteriv(target)");
00913       return;
00914    }
00915    if (pname == GL_MINMAX_FORMAT) {
00916       *params = (GLint) ctx->MinMax.Format;
00917    }
00918    else if (pname == GL_MINMAX_SINK) {
00919       *params = (GLint) ctx->MinMax.Sink;
00920    }
00921    else {
00922       _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinMaxParameteriv(pname)");
00923    }
00924 }
00925 
00926 
00927 void GLAPIENTRY
00928 _mesa_Histogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink)
00929 {
00930    GLuint i;
00931    GLboolean error = GL_FALSE;
00932    GET_CURRENT_CONTEXT(ctx);
00933    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* sideeffects */
00934 
00935    if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {
00936       _mesa_error(ctx, GL_INVALID_OPERATION, "glHistogram");
00937       return;
00938    }
00939 
00940    if (target != GL_HISTOGRAM && target != GL_PROXY_HISTOGRAM) {
00941       _mesa_error(ctx, GL_INVALID_ENUM, "glHistogram(target)");
00942       return;
00943    }
00944 
00945    if (width < 0 || width > HISTOGRAM_TABLE_SIZE) {
00946       if (target == GL_PROXY_HISTOGRAM) {
00947          error = GL_TRUE;
00948       }
00949       else {
00950          if (width < 0)
00951             _mesa_error(ctx, GL_INVALID_VALUE, "glHistogram(width)");
00952          else
00953             _mesa_error(ctx, GL_TABLE_TOO_LARGE, "glHistogram(width)");
00954          return;
00955       }
00956    }
00957 
00958    if (width != 0 && !_mesa_is_pow_two(width)) {
00959       if (target == GL_PROXY_HISTOGRAM) {
00960          error = GL_TRUE;
00961       }
00962       else {
00963          _mesa_error(ctx, GL_INVALID_VALUE, "glHistogram(width)");
00964          return;
00965       }
00966    }
00967 
00968    if (base_histogram_format(internalFormat) < 0) {
00969       if (target == GL_PROXY_HISTOGRAM) {
00970          error = GL_TRUE;
00971       }
00972       else {
00973          _mesa_error(ctx, GL_INVALID_ENUM, "glHistogram(internalFormat)");
00974          return;
00975       }
00976    }
00977 
00978    /* reset histograms */
00979    for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) {
00980       ctx->Histogram.Count[i][0] = 0;
00981       ctx->Histogram.Count[i][1] = 0;
00982       ctx->Histogram.Count[i][2] = 0;
00983       ctx->Histogram.Count[i][3] = 0;
00984    }
00985 
00986    if (error) {
00987       ctx->Histogram.Width = 0;
00988       ctx->Histogram.Format = 0;
00989       ctx->Histogram.RedSize       = 0;
00990       ctx->Histogram.GreenSize     = 0;
00991       ctx->Histogram.BlueSize      = 0;
00992       ctx->Histogram.AlphaSize     = 0;
00993       ctx->Histogram.LuminanceSize = 0;
00994    }
00995    else {
00996       ctx->Histogram.Width = width;
00997       ctx->Histogram.Format = internalFormat;
00998       ctx->Histogram.Sink = sink;
00999       ctx->Histogram.RedSize       = 8 * sizeof(GLuint);
01000       ctx->Histogram.GreenSize     = 8 * sizeof(GLuint);
01001       ctx->Histogram.BlueSize      = 8 * sizeof(GLuint);
01002       ctx->Histogram.AlphaSize     = 8 * sizeof(GLuint);
01003       ctx->Histogram.LuminanceSize = 8 * sizeof(GLuint);
01004    }
01005 
01006    ctx->NewState |= _NEW_PIXEL;
01007 }
01008 
01009 
01010 void GLAPIENTRY
01011 _mesa_Minmax(GLenum target, GLenum internalFormat, GLboolean sink)
01012 {
01013    GET_CURRENT_CONTEXT(ctx);
01014    ASSERT_OUTSIDE_BEGIN_END(ctx);
01015 
01016    if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {
01017       _mesa_error(ctx, GL_INVALID_OPERATION, "glMinmax");
01018       return;
01019    }
01020 
01021    if (target != GL_MINMAX) {
01022       _mesa_error(ctx, GL_INVALID_ENUM, "glMinMax(target)");
01023       return;
01024    }
01025 
01026    if (base_histogram_format(internalFormat) < 0) {
01027       _mesa_error(ctx, GL_INVALID_ENUM, "glMinMax(internalFormat)");
01028       return;
01029    }
01030 
01031    if (ctx->MinMax.Sink == sink)
01032       return;
01033    FLUSH_VERTICES(ctx, _NEW_PIXEL);
01034    ctx->MinMax.Sink = sink;
01035 }
01036 
01037 
01038 void GLAPIENTRY
01039 _mesa_ResetHistogram(GLenum target)
01040 {
01041    GLuint i;
01042    GET_CURRENT_CONTEXT(ctx);
01043    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* sideeffects */
01044 
01045    if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {
01046       _mesa_error(ctx, GL_INVALID_OPERATION, "glResetHistogram");
01047       return;
01048    }
01049 
01050    if (target != GL_HISTOGRAM) {
01051       _mesa_error(ctx, GL_INVALID_ENUM, "glResetHistogram(target)");
01052       return;
01053    }
01054 
01055    for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) {
01056       ctx->Histogram.Count[i][0] = 0;
01057       ctx->Histogram.Count[i][1] = 0;
01058       ctx->Histogram.Count[i][2] = 0;
01059       ctx->Histogram.Count[i][3] = 0;
01060    }
01061 
01062    ctx->NewState |= _NEW_PIXEL;
01063 }
01064 
01065 
01066 void GLAPIENTRY
01067 _mesa_ResetMinmax(GLenum target)
01068 {
01069    GET_CURRENT_CONTEXT(ctx);
01070    ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);
01071 
01072    if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {
01073       _mesa_error(ctx, GL_INVALID_OPERATION, "glResetMinmax");
01074       return;
01075    }
01076 
01077    if (target != GL_MINMAX) {
01078       _mesa_error(ctx, GL_INVALID_ENUM, "glResetMinMax(target)");
01079       return;
01080    }
01081 
01082    ctx->MinMax.Min[RCOMP] = 1000;    ctx->MinMax.Max[RCOMP] = -1000;
01083    ctx->MinMax.Min[GCOMP] = 1000;    ctx->MinMax.Max[GCOMP] = -1000;
01084    ctx->MinMax.Min[BCOMP] = 1000;    ctx->MinMax.Max[BCOMP] = -1000;
01085    ctx->MinMax.Min[ACOMP] = 1000;    ctx->MinMax.Max[ACOMP] = -1000;
01086    ctx->NewState |= _NEW_PIXEL;
01087 }
01088 
01089 
01090 
01091 /**********************************************************************/
01092 /*****                      Initialization                        *****/
01093 /**********************************************************************/
01094 
01095 void _mesa_init_histogram( GLcontext * ctx )
01096 {
01097    int i;
01098 
01099    /* Histogram group */
01100    ctx->Histogram.Width = 0;
01101    ctx->Histogram.Format = GL_RGBA;
01102    ctx->Histogram.Sink = GL_FALSE;
01103    ctx->Histogram.RedSize       = 0;
01104    ctx->Histogram.GreenSize     = 0;
01105    ctx->Histogram.BlueSize      = 0;
01106    ctx->Histogram.AlphaSize     = 0;
01107    ctx->Histogram.LuminanceSize = 0;
01108    for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) {
01109       ctx->Histogram.Count[i][0] = 0;
01110       ctx->Histogram.Count[i][1] = 0;
01111       ctx->Histogram.Count[i][2] = 0;
01112       ctx->Histogram.Count[i][3] = 0;
01113    }
01114 
01115    /* Min/Max group */
01116    ctx->MinMax.Format = GL_RGBA;
01117    ctx->MinMax.Sink = GL_FALSE;
01118    ctx->MinMax.Min[RCOMP] = 1000;    ctx->MinMax.Max[RCOMP] = -1000;
01119    ctx->MinMax.Min[GCOMP] = 1000;    ctx->MinMax.Max[GCOMP] = -1000;
01120    ctx->MinMax.Min[BCOMP] = 1000;    ctx->MinMax.Max[BCOMP] = -1000;
01121    ctx->MinMax.Min[ACOMP] = 1000;    ctx->MinMax.Max[ACOMP] = -1000;
01122 }

Generated on Sun May 27 2012 04:20:18 for ReactOS by doxygen 1.7.6.1

ReactOS is a registered trademark or a trademark of ReactOS Foundation in the United States and other countries.