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

📄 histogram.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 3 页
字号:
      _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogram(format)");   }   if (!_mesa_is_legal_format_and_type(ctx, format, type)) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogram(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, ctx->Histogram.Width, 1, 1,                                     format, type, values)) {         _mesa_error(ctx, GL_INVALID_OPERATION,                     "glGetHistogram(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,"glGetHistogram(PBO is mapped)");         return;      }      values = ADD_POINTERS(buf, values);   }   else if (!values) {      /* not an error */      return;   }   pack_histogram(ctx, ctx->Histogram.Width,                  (CONST GLuint (*)[4]) ctx->Histogram.Count,                  format, type, values, &ctx->Pack);   if (ctx->Pack.BufferObj->Name) {      ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,                              ctx->Pack.BufferObj);   }   if (reset) {      GLuint i;      for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) {         ctx->Histogram.Count[i][0] = 0;         ctx->Histogram.Count[i][1] = 0;         ctx->Histogram.Count[i][2] = 0;         ctx->Histogram.Count[i][3] = 0;      }   }}void GLAPIENTRY_mesa_GetHistogramParameterfv(GLenum target, GLenum pname, GLfloat *params){   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END(ctx);   if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogramParameterfv");      return;   }   if (target != GL_HISTOGRAM && target != GL_PROXY_HISTOGRAM) {      _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameterfv(target)");      return;   }   switch (pname) {      case GL_HISTOGRAM_WIDTH:         *params = (GLfloat) ctx->Histogram.Width;         break;      case GL_HISTOGRAM_FORMAT:         *params = (GLfloat) ctx->Histogram.Format;         break;      case GL_HISTOGRAM_RED_SIZE:         *params = (GLfloat) ctx->Histogram.RedSize;         break;      case GL_HISTOGRAM_GREEN_SIZE:         *params = (GLfloat) ctx->Histogram.GreenSize;         break;      case GL_HISTOGRAM_BLUE_SIZE:         *params = (GLfloat) ctx->Histogram.BlueSize;         break;      case GL_HISTOGRAM_ALPHA_SIZE:         *params = (GLfloat) ctx->Histogram.AlphaSize;         break;      case GL_HISTOGRAM_LUMINANCE_SIZE:         *params = (GLfloat) ctx->Histogram.LuminanceSize;         break;      case GL_HISTOGRAM_SINK:         *params = (GLfloat) ctx->Histogram.Sink;         break;      default:         _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameterfv(pname)");   }}void GLAPIENTRY_mesa_GetHistogramParameteriv(GLenum target, GLenum pname, GLint *params){   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END(ctx);   if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetHistogramParameteriv");      return;   }   if (target != GL_HISTOGRAM && target != GL_PROXY_HISTOGRAM) {      _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameteriv(target)");      return;   }   switch (pname) {      case GL_HISTOGRAM_WIDTH:         *params = (GLint) ctx->Histogram.Width;         break;      case GL_HISTOGRAM_FORMAT:         *params = (GLint) ctx->Histogram.Format;         break;      case GL_HISTOGRAM_RED_SIZE:         *params = (GLint) ctx->Histogram.RedSize;         break;      case GL_HISTOGRAM_GREEN_SIZE:         *params = (GLint) ctx->Histogram.GreenSize;         break;      case GL_HISTOGRAM_BLUE_SIZE:         *params = (GLint) ctx->Histogram.BlueSize;         break;      case GL_HISTOGRAM_ALPHA_SIZE:         *params = (GLint) ctx->Histogram.AlphaSize;         break;      case GL_HISTOGRAM_LUMINANCE_SIZE:         *params = (GLint) ctx->Histogram.LuminanceSize;         break;      case GL_HISTOGRAM_SINK:         *params = (GLint) ctx->Histogram.Sink;         break;      default:         _mesa_error(ctx, GL_INVALID_ENUM, "glGetHistogramParameteriv(pname)");   }}void GLAPIENTRY_mesa_GetMinmaxParameterfv(GLenum target, GLenum pname, GLfloat *params){   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END(ctx);   if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmaxParameterfv");      return;   }   if (target != GL_MINMAX) {      _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinmaxParameterfv(target)");      return;   }   if (pname == GL_MINMAX_FORMAT) {      *params = (GLfloat) ctx->MinMax.Format;   }   else if (pname == GL_MINMAX_SINK) {      *params = (GLfloat) ctx->MinMax.Sink;   }   else {      _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinMaxParameterfv(pname)");   }}void GLAPIENTRY_mesa_GetMinmaxParameteriv(GLenum target, GLenum pname, GLint *params){   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END(ctx);   if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetMinmaxParameteriv");      return;   }   if (target != GL_MINMAX) {      _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinmaxParameteriv(target)");      return;   }   if (pname == GL_MINMAX_FORMAT) {      *params = (GLint) ctx->MinMax.Format;   }   else if (pname == GL_MINMAX_SINK) {      *params = (GLint) ctx->MinMax.Sink;   }   else {      _mesa_error(ctx, GL_INVALID_ENUM, "glGetMinMaxParameteriv(pname)");   }}void GLAPIENTRY_mesa_Histogram(GLenum target, GLsizei width, GLenum internalFormat, GLboolean sink){   GLuint i;   GLboolean error = GL_FALSE;   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* sideeffects */   if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glHistogram");      return;   }   if (target != GL_HISTOGRAM && target != GL_PROXY_HISTOGRAM) {      _mesa_error(ctx, GL_INVALID_ENUM, "glHistogram(target)");      return;   }   if (width < 0 || width > HISTOGRAM_TABLE_SIZE) {      if (target == GL_PROXY_HISTOGRAM) {         error = GL_TRUE;      }      else {         if (width < 0)            _mesa_error(ctx, GL_INVALID_VALUE, "glHistogram(width)");         else            _mesa_error(ctx, GL_TABLE_TOO_LARGE, "glHistogram(width)");         return;      }   }   if (width != 0 && _mesa_bitcount(width) != 1) {      if (target == GL_PROXY_HISTOGRAM) {         error = GL_TRUE;      }      else {         _mesa_error(ctx, GL_INVALID_VALUE, "glHistogram(width)");         return;      }   }   if (base_histogram_format(internalFormat) < 0) {      if (target == GL_PROXY_HISTOGRAM) {         error = GL_TRUE;      }      else {         _mesa_error(ctx, GL_INVALID_ENUM, "glHistogram(internalFormat)");         return;      }   }   /* reset histograms */   for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) {      ctx->Histogram.Count[i][0] = 0;      ctx->Histogram.Count[i][1] = 0;      ctx->Histogram.Count[i][2] = 0;      ctx->Histogram.Count[i][3] = 0;   }   if (error) {      ctx->Histogram.Width = 0;      ctx->Histogram.Format = 0;      ctx->Histogram.RedSize       = 0;      ctx->Histogram.GreenSize     = 0;      ctx->Histogram.BlueSize      = 0;      ctx->Histogram.AlphaSize     = 0;      ctx->Histogram.LuminanceSize = 0;   }   else {      ctx->Histogram.Width = width;      ctx->Histogram.Format = internalFormat;      ctx->Histogram.Sink = sink;      ctx->Histogram.RedSize       = 8 * sizeof(GLuint);      ctx->Histogram.GreenSize     = 8 * sizeof(GLuint);      ctx->Histogram.BlueSize      = 8 * sizeof(GLuint);      ctx->Histogram.AlphaSize     = 8 * sizeof(GLuint);      ctx->Histogram.LuminanceSize = 8 * sizeof(GLuint);   }   ctx->NewState |= _NEW_PIXEL;}void GLAPIENTRY_mesa_Minmax(GLenum target, GLenum internalFormat, GLboolean sink){   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END(ctx);   if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glMinmax");      return;   }   if (target != GL_MINMAX) {      _mesa_error(ctx, GL_INVALID_ENUM, "glMinMax(target)");      return;   }   if (base_histogram_format(internalFormat) < 0) {      _mesa_error(ctx, GL_INVALID_ENUM, "glMinMax(internalFormat)");      return;   }   if (ctx->MinMax.Sink == sink)      return;   FLUSH_VERTICES(ctx, _NEW_PIXEL);   ctx->MinMax.Sink = sink;}void GLAPIENTRY_mesa_ResetHistogram(GLenum target){   GLuint i;   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx); /* sideeffects */   if (!ctx->Extensions.EXT_histogram && !ctx->Extensions.ARB_imaging) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glResetHistogram");      return;   }   if (target != GL_HISTOGRAM) {      _mesa_error(ctx, GL_INVALID_ENUM, "glResetHistogram(target)");      return;   }   for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) {      ctx->Histogram.Count[i][0] = 0;      ctx->Histogram.Count[i][1] = 0;      ctx->Histogram.Count[i][2] = 0;      ctx->Histogram.Count[i][3] = 0;   }   ctx->NewState |= _NEW_PIXEL;}void GLAPIENTRY_mesa_ResetMinmax(GLenum target){   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, "glResetMinmax");      return;   }   if (target != GL_MINMAX) {      _mesa_error(ctx, GL_INVALID_ENUM, "glResetMinMax(target)");      return;   }   ctx->MinMax.Min[RCOMP] = 1000;    ctx->MinMax.Max[RCOMP] = -1000;   ctx->MinMax.Min[GCOMP] = 1000;    ctx->MinMax.Max[GCOMP] = -1000;   ctx->MinMax.Min[BCOMP] = 1000;    ctx->MinMax.Max[BCOMP] = -1000;   ctx->MinMax.Min[ACOMP] = 1000;    ctx->MinMax.Max[ACOMP] = -1000;   ctx->NewState |= _NEW_PIXEL;}/**********************************************************************//*****                      Initialization                        *****//**********************************************************************/void _mesa_init_histogram( GLcontext * ctx ){   int i;   /* Histogram group */   ctx->Histogram.Width = 0;   ctx->Histogram.Format = GL_RGBA;   ctx->Histogram.Sink = GL_FALSE;   ctx->Histogram.RedSize       = 0;   ctx->Histogram.GreenSize     = 0;   ctx->Histogram.BlueSize      = 0;   ctx->Histogram.AlphaSize     = 0;   ctx->Histogram.LuminanceSize = 0;   for (i = 0; i < HISTOGRAM_TABLE_SIZE; i++) {      ctx->Histogram.Count[i][0] = 0;      ctx->Histogram.Count[i][1] = 0;      ctx->Histogram.Count[i][2] = 0;      ctx->Histogram.Count[i][3] = 0;   }   /* Min/Max group */   ctx->MinMax.Format = GL_RGBA;   ctx->MinMax.Sink = GL_FALSE;   ctx->MinMax.Min[RCOMP] = 1000;    ctx->MinMax.Max[RCOMP] = -1000;   ctx->MinMax.Min[GCOMP] = 1000;    ctx->MinMax.Max[GCOMP] = -1000;   ctx->MinMax.Min[BCOMP] = 1000;    ctx->MinMax.Max[BCOMP] = -1000;   ctx->MinMax.Min[ACOMP] = 1000;    ctx->MinMax.Max[ACOMP] = -1000;}

⌨️ 快捷键说明

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