⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 histogram.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 3 页
字号:
            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][ACOMP] & 0xf) << 12)                      | ((rgba[i][RCOMP] & 0xf) <<  8)                      | ((rgba[i][GCOMP] & 0xf) <<  4)                      | ((rgba[i][BCOMP] & 0xf)      );            }         }         else {            GLushort *dst = (GLushort *) destination;            GLuint i;            ASSERT(format == GL_ABGR_EXT);            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][RCOMP] & 0xf) << 12)                      | ((rgba[i][GCOMP] & 0xf) <<  8)                      | ((rgba[i][BCOMP] & 0xf) <<  4)                      | ((rgba[i][ACOMP] & 0xf)      );            }         }         break;      case GL_UNSIGNED_SHORT_5_5_5_1:         if (format == GL_RGBA) {            GLushort *dst = (GLushort *) destination;            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11)                      | ((rgba[i][GCOMP] & 0x1f) <<  6)                      | ((rgba[i][BCOMP] & 0x1f) <<  1)                      | ((rgba[i][ACOMP] & 0x1)       );            }         }         else if (format == GL_BGRA) {            GLushort *dst = (GLushort *) destination;            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][BCOMP] & 0x1f) << 11)                      | ((rgba[i][GCOMP] & 0x1f) <<  6)                      | ((rgba[i][RCOMP] & 0x1f) <<  1)                      | ((rgba[i][ACOMP] & 0x1)       );            }         }         else {            GLushort *dst = (GLushort *) destination;            GLuint i;            ASSERT(format == GL_ABGR_EXT);            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][ACOMP] & 0x1f) << 11)                      | ((rgba[i][BCOMP] & 0x1f) <<  6)                      | ((rgba[i][GCOMP] & 0x1f) <<  1)                      | ((rgba[i][RCOMP] & 0x1)       );            }         }         break;      case GL_UNSIGNED_SHORT_1_5_5_5_REV:         if (format == GL_RGBA) {            GLushort *dst = (GLushort *) destination;            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][ACOMP] & 0x1f) << 11)                      | ((rgba[i][BCOMP] & 0x1f) <<  6)                      | ((rgba[i][GCOMP] & 0x1f) <<  1)                      | ((rgba[i][RCOMP] & 0x1)       );            }         }         else if (format == GL_BGRA) {            GLushort *dst = (GLushort *) destination;            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][ACOMP] & 0x1f) << 11)                      | ((rgba[i][RCOMP] & 0x1f) <<  6)                      | ((rgba[i][GCOMP] & 0x1f) <<  1)                      | ((rgba[i][BCOMP] & 0x1)       );            }         }         else {            GLushort *dst = (GLushort *) destination;            GLuint i;            ASSERT(format == GL_ABGR_EXT);            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][RCOMP] & 0x1f) << 11)                      | ((rgba[i][GCOMP] & 0x1f) <<  6)                      | ((rgba[i][BCOMP] & 0x1f) <<  1)                      | ((rgba[i][ACOMP] & 0x1)       );            }         }         break;      case GL_UNSIGNED_INT_8_8_8_8:         if (format == GL_RGBA) {            GLuint *dst = (GLuint *) destination;            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][RCOMP] & 0xff) << 24)                      | ((rgba[i][GCOMP] & 0xff) << 16)                      | ((rgba[i][BCOMP] & 0xff) <<  8)                      | ((rgba[i][ACOMP] & 0xff)      );            }         }         else if (format == GL_BGRA) {            GLuint *dst = (GLuint *) destination;            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][BCOMP] & 0xff) << 24)                      | ((rgba[i][GCOMP] & 0xff) << 16)                      | ((rgba[i][RCOMP] & 0xff) <<  8)                      | ((rgba[i][ACOMP] & 0xff)      );            }         }         else {            GLuint *dst = (GLuint *) destination;            GLuint i;            ASSERT(format == GL_ABGR_EXT);            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][ACOMP] & 0xff) << 24)                      | ((rgba[i][BCOMP] & 0xff) << 16)                      | ((rgba[i][GCOMP] & 0xff) <<  8)                      | ((rgba[i][RCOMP] & 0xff)      );            }         }         break;      case GL_UNSIGNED_INT_8_8_8_8_REV:         if (format == GL_RGBA) {            GLuint *dst = (GLuint *) destination;            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][ACOMP] & 0xff) << 24)                      | ((rgba[i][BCOMP] & 0xff) << 16)                      | ((rgba[i][GCOMP] & 0xff) <<  8)                      | ((rgba[i][RCOMP] & 0xff)      );            }         }         else if (format == GL_BGRA) {            GLuint *dst = (GLuint *) destination;            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][ACOMP] & 0xff) << 24)                      | ((rgba[i][RCOMP] & 0xff) << 16)                      | ((rgba[i][GCOMP] & 0xff) <<  8)                      | ((rgba[i][BCOMP] & 0xff)      );            }         }         else {            GLuint *dst = (GLuint *) destination;            GLuint i;            ASSERT(format == GL_ABGR_EXT);            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][RCOMP] & 0xff) << 24)                      | ((rgba[i][GCOMP] & 0xff) << 16)                      | ((rgba[i][BCOMP] & 0xff) <<  8)                      | ((rgba[i][ACOMP] & 0xff)      );            }         }         break;      case GL_UNSIGNED_INT_10_10_10_2:         if (format == GL_RGBA) {            GLuint *dst = (GLuint *) destination;            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][RCOMP] & 0x3ff) << 22)                      | ((rgba[i][GCOMP] & 0x3ff) << 12)                      | ((rgba[i][BCOMP] & 0x3ff) <<  2)                      | ((rgba[i][ACOMP] & 0x3)        );            }         }         else if (format == GL_BGRA) {            GLuint *dst = (GLuint *) destination;            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][BCOMP] & 0x3ff) << 22)                      | ((rgba[i][GCOMP] & 0x3ff) << 12)                      | ((rgba[i][RCOMP] & 0x3ff) <<  2)                      | ((rgba[i][ACOMP] & 0x3)        );            }         }         else {            GLuint *dst = (GLuint *) destination;            GLuint i;            ASSERT(format == GL_ABGR_EXT);            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][ACOMP] & 0x3ff) << 22)                      | ((rgba[i][BCOMP] & 0x3ff) << 12)                      | ((rgba[i][GCOMP] & 0x3ff) <<  2)                      | ((rgba[i][RCOMP] & 0x3)        );            }         }         break;      case GL_UNSIGNED_INT_2_10_10_10_REV:         if (format == GL_RGBA) {            GLuint *dst = (GLuint *) destination;            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][ACOMP] & 0x3ff) << 22)                      | ((rgba[i][BCOMP] & 0x3ff) << 12)                      | ((rgba[i][GCOMP] & 0x3ff) <<  2)                      | ((rgba[i][RCOMP] & 0x3)        );            }         }         else if (format == GL_BGRA) {            GLuint *dst = (GLuint *) destination;            GLuint i;            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][ACOMP] & 0x3ff) << 22)                      | ((rgba[i][RCOMP] & 0x3ff) << 12)                      | ((rgba[i][GCOMP] & 0x3ff) <<  2)                      | ((rgba[i][BCOMP] & 0x3)        );            }         }         else {            GLuint *dst = (GLuint *) destination;            GLuint i;            ASSERT(format == GL_ABGR_EXT);            for (i = 0; i < n; i++) {               dst[i] = ((rgba[i][RCOMP] & 0x3ff) << 22)                      | ((rgba[i][GCOMP] & 0x3ff) << 12)                      | ((rgba[i][BCOMP] & 0x3ff) <<  2)                      | ((rgba[i][ACOMP] & 0x3)        );            }         }         break;      default:         _mesa_problem(ctx, "Bad type in pack_histogram");   }#undef PACK_MACRO}/* * Given an internalFormat token passed to glHistogram or glMinMax, * return the corresponding base format. * Return -1 if invalid token. */static GLintbase_histogram_format( GLenum format ){   switch (format) {      case GL_ALPHA:      case GL_ALPHA4:      case GL_ALPHA8:      case GL_ALPHA12:      case GL_ALPHA16:         return GL_ALPHA;      case GL_LUMINANCE:      case GL_LUMINANCE4:      case GL_LUMINANCE8:      case GL_LUMINANCE12:      case GL_LUMINANCE16:         return GL_LUMINANCE;      case GL_LUMINANCE_ALPHA:      case GL_LUMINANCE4_ALPHA4:      case GL_LUMINANCE6_ALPHA2:      case GL_LUMINANCE8_ALPHA8:      case GL_LUMINANCE12_ALPHA4:      case GL_LUMINANCE12_ALPHA12:      case GL_LUMINANCE16_ALPHA16:         return GL_LUMINANCE_ALPHA;      case GL_RGB:      case GL_R3_G3_B2:      case GL_RGB4:      case GL_RGB5:      case GL_RGB8:      case GL_RGB10:      case GL_RGB12:      case GL_RGB16:         return GL_RGB;      case GL_RGBA:      case GL_RGBA2:      case GL_RGBA4:      case GL_RGB5_A1:      case GL_RGBA8:      case GL_RGB10_A2:      case GL_RGBA12:      case GL_RGBA16:         return GL_RGBA;      default:         return -1;  /* error */   }}/********************************************************************** * API functions */void GLAPIENTRY_mesa_GetMinmax(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values){   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);   if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmax");      return;   }   if (target != GL_MINMAX) {      _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinmax(target)");      return;   }   if (format != GL_RED &&       format != GL_GREEN &&       format != GL_BLUE &&       format != GL_ALPHA &&       format != GL_RGB &&       format != GL_BGR &&       format != GL_RGBA &&       format != GL_BGRA &&       format != GL_ABGR_EXT &&       format != GL_LUMINANCE &&       format != GL_LUMINANCE_ALPHA) {      _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinMax(format)");   }   if (!_mesa_is_legal_format_and_type(ctx, format, type)) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmax(format or type)");      return;   }   if (ctx->Pack.BufferObj->Name) {      /* pack min/max values into a PBO */      GLubyte *buf;      if (!_mesa_validate_pbo_access(1, &ctx->Pack, 2, 1, 1,                                     format, type, values)) {         _mesa_error(ctx, GL_INVALID_OPERATION,                     "glGetMinMax(invalid PBO access)");         return;      }      buf = (GLubyte *) ctx->Driver.MapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,                                              GL_WRITE_ONLY_ARB,                                              ctx->Pack.BufferObj);      if (!buf) {         /* buffer is already mapped - that's an error */         _mesa_error(ctx, GL_INVALID_OPERATION,"glGetMinMax(PBO is mapped)");         return;      }      values = ADD_POINTERS(buf, values);   }   else if (!values) {      /* not an error */      return;   }   {      GLfloat minmax[2][4];      minmax[0][RCOMP] = CLAMP(ctx->MinMax.Min[RCOMP], 0.0F, 1.0F);      minmax[0][GCOMP] = CLAMP(ctx->MinMax.Min[GCOMP], 0.0F, 1.0F);      minmax[0][BCOMP] = CLAMP(ctx->MinMax.Min[BCOMP], 0.0F, 1.0F);      minmax[0][ACOMP] = CLAMP(ctx->MinMax.Min[ACOMP], 0.0F, 1.0F);      minmax[1][RCOMP] = CLAMP(ctx->MinMax.Max[RCOMP], 0.0F, 1.0F);      minmax[1][GCOMP] = CLAMP(ctx->MinMax.Max[GCOMP], 0.0F, 1.0F);      minmax[1][BCOMP] = CLAMP(ctx->MinMax.Max[BCOMP], 0.0F, 1.0F);      minmax[1][ACOMP] = CLAMP(ctx->MinMax.Max[ACOMP], 0.0F, 1.0F);      _mesa_pack_rgba_span_float(ctx, 2, (CONST GLfloat (*)[4]) minmax,                                 format, type, values, &ctx->Pack, 0);   }   if (ctx->Pack.BufferObj->Name) {      ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,                              ctx->Pack.BufferObj);   }   if (reset) {      _mesa_ResetMinmax(GL_MINMAX);   }}void GLAPIENTRY_mesa_GetHistogram(GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values){   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);   if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogram");      return;   }   if (target != GL_HISTOGRAM) {      _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogram(target)");      return;   }   if (format != GL_RED &&       format != GL_GREEN &&       format != GL_BLUE &&       format != GL_ALPHA &&       format != GL_RGB &&       format != GL_BGR &&       format != GL_RGBA &&       format != GL_BGRA &&       format != GL_ABGR_EXT &&       format != GL_LUMINANCE &&       format != GL_LUMINANCE_ALPHA) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -