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

📄 convolve.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 4 页
字号:
         break;      default:         _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameterfv(pname)");         return;   }   ctx->NewState |= _NEW_PIXEL;}void GLAPIENTRY_mesa_ConvolutionParameteri(GLenum target, GLenum pname, GLint param){   GET_CURRENT_CONTEXT(ctx);   GLuint c;   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);   switch (target) {      case GL_CONVOLUTION_1D:         c = 0;         break;      case GL_CONVOLUTION_2D:         c = 1;         break;      case GL_SEPARABLE_2D:         c = 2;         break;      default:         _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameteri(target)");         return;   }   switch (pname) {      case GL_CONVOLUTION_BORDER_MODE:         if (param == (GLint) GL_REDUCE ||             param == (GLint) GL_CONSTANT_BORDER ||             param == (GLint) GL_REPLICATE_BORDER) {            ctx->Pixel.ConvolutionBorderMode[c] = (GLenum) param;         }         else {            _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameteri(params)");            return;         }         break;      default:         _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameteri(pname)");         return;   }   ctx->NewState |= _NEW_PIXEL;}void GLAPIENTRY_mesa_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params){   GET_CURRENT_CONTEXT(ctx);   GLuint c;   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);   switch (target) {      case GL_CONVOLUTION_1D:         c = 0;         break;      case GL_CONVOLUTION_2D:         c = 1;         break;      case GL_SEPARABLE_2D:         c = 2;         break;      default:         _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameteriv(target)");         return;   }   switch (pname) {      case GL_CONVOLUTION_BORDER_COLOR:	 ctx->Pixel.ConvolutionBorderColor[c][0] = INT_TO_FLOAT(params[0]);	 ctx->Pixel.ConvolutionBorderColor[c][1] = INT_TO_FLOAT(params[1]);	 ctx->Pixel.ConvolutionBorderColor[c][2] = INT_TO_FLOAT(params[2]);	 ctx->Pixel.ConvolutionBorderColor[c][3] = INT_TO_FLOAT(params[3]);         break;      case GL_CONVOLUTION_BORDER_MODE:         if (params[0] == (GLint) GL_REDUCE ||             params[0] == (GLint) GL_CONSTANT_BORDER ||             params[0] == (GLint) GL_REPLICATE_BORDER) {            ctx->Pixel.ConvolutionBorderMode[c] = (GLenum) params[0];         }         else {            _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameteriv(params)");            return;         }         break;      case GL_CONVOLUTION_FILTER_SCALE:	 /* COPY_4V(ctx->Pixel.ConvolutionFilterScale[c], params); */	 /* need cast to prevent compiler warnings */  	 ctx->Pixel.ConvolutionFilterScale[c][0] = (GLfloat) params[0]; 	 ctx->Pixel.ConvolutionFilterScale[c][1] = (GLfloat) params[1]; 	 ctx->Pixel.ConvolutionFilterScale[c][2] = (GLfloat) params[2]; 	 ctx->Pixel.ConvolutionFilterScale[c][3] = (GLfloat) params[3];          break;      case GL_CONVOLUTION_FILTER_BIAS:	 /* COPY_4V(ctx->Pixel.ConvolutionFilterBias[c], params); */	 /* need cast to prevent compiler warnings */  	 ctx->Pixel.ConvolutionFilterBias[c][0] = (GLfloat) params[0]; 	 ctx->Pixel.ConvolutionFilterBias[c][1] = (GLfloat) params[1]; 	 ctx->Pixel.ConvolutionFilterBias[c][2] = (GLfloat) params[2]; 	 ctx->Pixel.ConvolutionFilterBias[c][3] = (GLfloat) params[3];          break;      default:         _mesa_error(ctx, GL_INVALID_ENUM, "glConvolutionParameteriv(pname)");         return;   }   ctx->NewState |= _NEW_PIXEL;}void GLAPIENTRY_mesa_CopyConvolutionFilter1D(GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width){   GLint baseFormat;   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);   if (target != GL_CONVOLUTION_1D) {      _mesa_error(ctx, GL_INVALID_ENUM, "glCopyConvolutionFilter1D(target)");      return;   }   baseFormat = base_filter_format(internalFormat);   if (baseFormat < 0 || baseFormat == GL_COLOR_INDEX) {      _mesa_error(ctx, GL_INVALID_ENUM, "glCopyConvolutionFilter1D(internalFormat)");      return;   }   if (width < 0 || width > MAX_CONVOLUTION_WIDTH) {      _mesa_error(ctx, GL_INVALID_VALUE, "glCopyConvolutionFilter1D(width)");      return;   }   ctx->Driver.CopyConvolutionFilter1D( ctx, target, 					internalFormat, x, y, width);}void GLAPIENTRY_mesa_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height){   GLint baseFormat;   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);   if (target != GL_CONVOLUTION_2D) {      _mesa_error(ctx, GL_INVALID_ENUM, "glCopyConvolutionFilter2D(target)");      return;   }   baseFormat = base_filter_format(internalFormat);   if (baseFormat < 0 || baseFormat == GL_COLOR_INDEX) {      _mesa_error(ctx, GL_INVALID_ENUM, "glCopyConvolutionFilter2D(internalFormat)");      return;   }   if (width < 0 || width > MAX_CONVOLUTION_WIDTH) {      _mesa_error(ctx, GL_INVALID_VALUE, "glCopyConvolutionFilter2D(width)");      return;   }   if (height < 0 || height > MAX_CONVOLUTION_HEIGHT) {      _mesa_error(ctx, GL_INVALID_VALUE, "glCopyConvolutionFilter2D(height)");      return;   }   ctx->Driver.CopyConvolutionFilter2D( ctx, target, internalFormat, x, y, 					width, height );}void GLAPIENTRY_mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type,                           GLvoid *image){   struct gl_convolution_attrib *filter;   GLuint row;   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END(ctx);   if (ctx->NewState) {      _mesa_update_state(ctx);   }   if (!_mesa_is_legal_format_and_type(ctx, format, type)) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetConvolutionFilter(format or type)");      return;   }   if (format == GL_COLOR_INDEX ||       format == GL_STENCIL_INDEX ||       format == GL_DEPTH_COMPONENT ||       format == GL_INTENSITY ||       type == GL_BITMAP) {      _mesa_error(ctx, GL_INVALID_ENUM, "glGetConvolutionFilter(format or type)");      return;   }   switch (target) {      case GL_CONVOLUTION_1D:         filter = &(ctx->Convolution1D);         break;      case GL_CONVOLUTION_2D:         filter = &(ctx->Convolution2D);         break;      default:         _mesa_error(ctx, GL_INVALID_ENUM, "glGetConvolutionFilter(target)");         return;   }   if (ctx->Pack.BufferObj->Name) {      /* Pack the filter into a PBO */      GLubyte *buf;      if (!_mesa_validate_pbo_access(2, &ctx->Pack,                                     filter->Width, filter->Height,                                     1, format, type, image)) {         _mesa_error(ctx, GL_INVALID_OPERATION,                     "glGetConvolutionFilter(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,                     "glGetConvolutionFilter(PBO is mapped)");         return;      }      image = ADD_POINTERS(image, buf);   }   for (row = 0; row < filter->Height; row++) {      GLvoid *dst = _mesa_image_address2d(&ctx->Pack, image, filter->Width,                                          filter->Height, format, type,                                          row, 0);      GLfloat (*src)[4] = (GLfloat (*)[4]) (filter->Filter + row * filter->Width * 4);      _mesa_pack_rgba_span_float(ctx, filter->Width, src,                                 format, type, dst, &ctx->Pack, 0x0);   }   if (ctx->Pack.BufferObj->Name) {      ctx->Driver.UnmapBuffer(ctx, GL_PIXEL_PACK_BUFFER_EXT,                              ctx->Pack.BufferObj);   }}void GLAPIENTRY_mesa_GetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat *params){   GET_CURRENT_CONTEXT(ctx);   const struct gl_convolution_attrib *conv;   GLuint c;   ASSERT_OUTSIDE_BEGIN_END(ctx);   switch (target) {      case GL_CONVOLUTION_1D:         c = 0;         conv = &ctx->Convolution1D;         break;      case GL_CONVOLUTION_2D:         c = 1;         conv = &ctx->Convolution2D;         break;      case GL_SEPARABLE_2D:         c = 2;         conv = &ctx->Separable2D;         break;      default:         _mesa_error(ctx, GL_INVALID_ENUM, "glGetConvolutionParameterfv(target)");         return;   }   switch (pname) {      case GL_CONVOLUTION_BORDER_COLOR:         COPY_4V(params, ctx->Pixel.ConvolutionBorderColor[c]);         break;      case GL_CONVOLUTION_BORDER_MODE:         *params = (GLfloat) ctx->Pixel.ConvolutionBorderMode[c];         break;      case GL_CONVOLUTION_FILTER_SCALE:         COPY_4V(params, ctx->Pixel.ConvolutionFilterScale[c]);         break;      case GL_CONVOLUTION_FILTER_BIAS:         COPY_4V(params, ctx->Pixel.ConvolutionFilterBias[c]);         break;      case GL_CONVOLUTION_FORMAT:         *params = (GLfloat) conv->Format;         break;      case GL_CONVOLUTION_WIDTH:         *params = (GLfloat) conv->Width;         break;      case GL_CONVOLUTION_HEIGHT:         *params = (GLfloat) conv->Height;         break;      case GL_MAX_CONVOLUTION_WIDTH:         *params = (GLfloat) ctx->Const.MaxConvolutionWidth;         break;      case GL_MAX_CONVOLUTION_HEIGHT:         *params = (GLfloat) ctx->Const.MaxConvolutionHeight;         break;      default:         _mesa_error(ctx, GL_INVALID_ENUM, "glGetConvolutionParameterfv(pname)");         return;   }}void GLAPIENTRY_mesa_GetConvolutionParameteriv(GLenum target, GLenum pname, GLint *params){   GET_CURRENT_CONTEXT(ctx);   const struct gl_convolution_attrib *conv;   GLuint c;   ASSERT_OUTSIDE_BEGIN_END(ctx);   switch (target) {      case GL_CONVOLUTION_1D:         c = 0;         conv = &ctx->Convolution1D;         break;      case GL_CONVOLUTION_2D:         c = 1;         conv = &ctx->Convolution2D;         break;      case GL_SEPARABLE_2D:         c = 2;         conv = &ctx->Separable2D;         break;      default:         _mesa_error(ctx, GL_INVALID_ENUM, "glGetConvolutionParameteriv(target)");         return;   }   switch (pname) {      case GL_CONVOLUTION_BORDER_COLOR:         params[0] = FLOAT_TO_INT(ctx->Pixel.ConvolutionBorderColor[c][0]);         params[1] = FLOAT_TO_INT(ctx->Pixel.ConvolutionBorderColor[c][1]);         params[2] = FLOAT_TO_INT(ctx->Pixel.ConvolutionBorderColor[c][2]);         params[3] = FLOAT_TO_INT(ctx->Pixel.ConvolutionBorderColor[c][3]);         break;      case GL_CONVOLUTION_BORDER_MODE:         *params = (GLint) ctx->Pixel.ConvolutionBorderMode[c];         break;      case GL_CONVOLUTION_FILTER_SCALE:         params[0] = (GLint) ctx->Pixel.ConvolutionFilterScale[c][0];         params[1] = (GLint) ctx->Pixel.ConvolutionFilterScale[c][1];         params[2] = (GLint) ctx->Pixel.ConvolutionFilterScale[c][2];         params[3] = (GLint) ctx->Pixel.ConvolutionFilterScale[c][3];         break;      case GL_CONVOLUTION_FILTER_BIAS:         params[0] = (GLint) ctx->Pixel.ConvolutionFilterBias[c][0];         params[1] = (GLint) ctx->Pixel.ConvolutionFilterBias[c][1];         params[2] = (GLint) ctx->Pixel.ConvolutionFilterBias[c][2];         params[3] = (GLint) ctx->Pixel.ConvolutionFilterBias[c][3];         break;      case GL_CONVOLUTION_FORMAT:         *params = (GLint) conv->Format;         break;      case GL_CONVOLUTION_WIDTH:         *params = (GLint) conv->Width;         break;      case GL_CONVOLUTION_HEIGHT:         *params = (GLint) conv->Height;         break;      case GL_MAX_CONVOLUTION_WIDTH:         *params = (GLint) ctx->Const.MaxConvolutionWidth;         break;      case GL_MAX_CONVOLUTION_HEIGHT:         *params = (GLint) ctx->Const.MaxConvolutionHeight;         break;      default:         _mesa_error(ctx, GL_INVALID_ENUM, "glGetConvolutionParameteriv(pname)");         return;   }

⌨️ 快捷键说明

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