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

📄 pixel.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 4 页
字号:
	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.GreenScale = param;	 break;      case GL_GREEN_BIAS:         if (ctx->Pixel.GreenBias == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.GreenBias = param;	 break;      case GL_BLUE_SCALE:         if (ctx->Pixel.BlueScale == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.BlueScale = param;	 break;      case GL_BLUE_BIAS:         if (ctx->Pixel.BlueBias == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.BlueBias = param;	 break;      case GL_ALPHA_SCALE:         if (ctx->Pixel.AlphaScale == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.AlphaScale = param;	 break;      case GL_ALPHA_BIAS:         if (ctx->Pixel.AlphaBias == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.AlphaBias = param;	 break;      case GL_DEPTH_SCALE:         if (ctx->Pixel.DepthScale == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.DepthScale = param;	 break;      case GL_DEPTH_BIAS:         if (ctx->Pixel.DepthBias == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.DepthBias = param;	 break;      case GL_POST_COLOR_MATRIX_RED_SCALE:         if (ctx->Pixel.PostColorMatrixScale[0] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostColorMatrixScale[0] = param;	 break;      case GL_POST_COLOR_MATRIX_RED_BIAS:         if (ctx->Pixel.PostColorMatrixBias[0] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostColorMatrixBias[0] = param;	 break;      case GL_POST_COLOR_MATRIX_GREEN_SCALE:         if (ctx->Pixel.PostColorMatrixScale[1] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostColorMatrixScale[1] = param;	 break;      case GL_POST_COLOR_MATRIX_GREEN_BIAS:         if (ctx->Pixel.PostColorMatrixBias[1] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostColorMatrixBias[1] = param;	 break;      case GL_POST_COLOR_MATRIX_BLUE_SCALE:         if (ctx->Pixel.PostColorMatrixScale[2] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostColorMatrixScale[2] = param;	 break;      case GL_POST_COLOR_MATRIX_BLUE_BIAS:         if (ctx->Pixel.PostColorMatrixBias[2] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostColorMatrixBias[2] = param;	 break;      case GL_POST_COLOR_MATRIX_ALPHA_SCALE:         if (ctx->Pixel.PostColorMatrixScale[3] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostColorMatrixScale[3] = param;	 break;      case GL_POST_COLOR_MATRIX_ALPHA_BIAS:         if (ctx->Pixel.PostColorMatrixBias[3] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostColorMatrixBias[3] = param;	 break;      case GL_POST_CONVOLUTION_RED_SCALE:         if (ctx->Pixel.PostConvolutionScale[0] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostConvolutionScale[0] = param;	 break;      case GL_POST_CONVOLUTION_RED_BIAS:         if (ctx->Pixel.PostConvolutionBias[0] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostConvolutionBias[0] = param;	 break;      case GL_POST_CONVOLUTION_GREEN_SCALE:         if (ctx->Pixel.PostConvolutionScale[1] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostConvolutionScale[1] = param;	 break;      case GL_POST_CONVOLUTION_GREEN_BIAS:         if (ctx->Pixel.PostConvolutionBias[1] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostConvolutionBias[1] = param;	 break;      case GL_POST_CONVOLUTION_BLUE_SCALE:         if (ctx->Pixel.PostConvolutionScale[2] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostConvolutionScale[2] = param;	 break;      case GL_POST_CONVOLUTION_BLUE_BIAS:         if (ctx->Pixel.PostConvolutionBias[2] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostConvolutionBias[2] = param;	 break;      case GL_POST_CONVOLUTION_ALPHA_SCALE:         if (ctx->Pixel.PostConvolutionScale[3] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostConvolutionScale[3] = param;	 break;      case GL_POST_CONVOLUTION_ALPHA_BIAS:         if (ctx->Pixel.PostConvolutionBias[3] == param)	    return;	 FLUSH_VERTICES(ctx, _NEW_PIXEL);         ctx->Pixel.PostConvolutionBias[3] = param;	 break;      default:         _mesa_error( ctx, GL_INVALID_ENUM, "glPixelTransfer(pname)" );         return;   }}void GLAPIENTRY_mesa_PixelTransferi( GLenum pname, GLint param ){   _mesa_PixelTransferf( pname, (GLfloat) param );}/**********************************************************************//*****                  Pixel processing functions               ******//**********************************************************************//* * Apply scale and bias factors to an array of RGBA pixels. */void_mesa_scale_and_bias_rgba(GLuint n, GLfloat rgba[][4],                          GLfloat rScale, GLfloat gScale,                          GLfloat bScale, GLfloat aScale,                          GLfloat rBias, GLfloat gBias,                          GLfloat bBias, GLfloat aBias){   if (rScale != 1.0 || rBias != 0.0) {      GLuint i;      for (i = 0; i < n; i++) {         rgba[i][RCOMP] = rgba[i][RCOMP] * rScale + rBias;      }   }   if (gScale != 1.0 || gBias != 0.0) {      GLuint i;      for (i = 0; i < n; i++) {         rgba[i][GCOMP] = rgba[i][GCOMP] * gScale + gBias;      }   }   if (bScale != 1.0 || bBias != 0.0) {      GLuint i;      for (i = 0; i < n; i++) {         rgba[i][BCOMP] = rgba[i][BCOMP] * bScale + bBias;      }   }   if (aScale != 1.0 || aBias != 0.0) {      GLuint i;      for (i = 0; i < n; i++) {         rgba[i][ACOMP] = rgba[i][ACOMP] * aScale + aBias;      }   }}/* * Apply pixel mapping to an array of floating point RGBA pixels. */void_mesa_map_rgba( const GLcontext *ctx, GLuint n, GLfloat rgba[][4] ){   const GLfloat rscale = (GLfloat) (ctx->PixelMaps.RtoR.Size - 1);   const GLfloat gscale = (GLfloat) (ctx->PixelMaps.GtoG.Size - 1);   const GLfloat bscale = (GLfloat) (ctx->PixelMaps.BtoB.Size - 1);   const GLfloat ascale = (GLfloat) (ctx->PixelMaps.AtoA.Size - 1);   const GLfloat *rMap = ctx->PixelMaps.RtoR.Map;   const GLfloat *gMap = ctx->PixelMaps.GtoG.Map;   const GLfloat *bMap = ctx->PixelMaps.BtoB.Map;   const GLfloat *aMap = ctx->PixelMaps.AtoA.Map;   GLuint i;   for (i=0;i<n;i++) {      GLfloat r = CLAMP(rgba[i][RCOMP], 0.0F, 1.0F);      GLfloat g = CLAMP(rgba[i][GCOMP], 0.0F, 1.0F);      GLfloat b = CLAMP(rgba[i][BCOMP], 0.0F, 1.0F);      GLfloat a = CLAMP(rgba[i][ACOMP], 0.0F, 1.0F);      rgba[i][RCOMP] = rMap[IROUND(r * rscale)];      rgba[i][GCOMP] = gMap[IROUND(g * gscale)];      rgba[i][BCOMP] = bMap[IROUND(b * bscale)];      rgba[i][ACOMP] = aMap[IROUND(a * ascale)];   }}/* * Apply the color matrix and post color matrix scaling and biasing. */void_mesa_transform_rgba(const GLcontext *ctx, GLuint n, GLfloat rgba[][4]){   const GLfloat rs = ctx->Pixel.PostColorMatrixScale[0];   const GLfloat rb = ctx->Pixel.PostColorMatrixBias[0];   const GLfloat gs = ctx->Pixel.PostColorMatrixScale[1];   const GLfloat gb = ctx->Pixel.PostColorMatrixBias[1];   const GLfloat bs = ctx->Pixel.PostColorMatrixScale[2];   const GLfloat bb = ctx->Pixel.PostColorMatrixBias[2];   const GLfloat as = ctx->Pixel.PostColorMatrixScale[3];   const GLfloat ab = ctx->Pixel.PostColorMatrixBias[3];   const GLfloat *m = ctx->ColorMatrixStack.Top->m;   GLuint i;   for (i = 0; i < n; i++) {      const GLfloat r = rgba[i][RCOMP];      const GLfloat g = rgba[i][GCOMP];      const GLfloat b = rgba[i][BCOMP];      const GLfloat a = rgba[i][ACOMP];      rgba[i][RCOMP] = (m[0] * r + m[4] * g + m[ 8] * b + m[12] * a) * rs + rb;      rgba[i][GCOMP] = (m[1] * r + m[5] * g + m[ 9] * b + m[13] * a) * gs + gb;      rgba[i][BCOMP] = (m[2] * r + m[6] * g + m[10] * b + m[14] * a) * bs + bb;      rgba[i][ACOMP] = (m[3] * r + m[7] * g + m[11] * b + m[15] * a) * as + ab;   }}/** * Apply a color table lookup to an array of floating point RGBA colors. */void_mesa_lookup_rgba_float(const struct gl_color_table *table,                        GLuint n, GLfloat rgba[][4]){   const GLint max = table->Size - 1;   const GLfloat scale = (GLfloat) max;   const GLfloat *lut = table->TableF;   GLuint i;   if (!table->TableF || table->Size == 0)      return;   switch (table->_BaseFormat) {      case GL_INTENSITY:         /* replace RGBA with I */         for (i = 0; i < n; i++) {            GLint j = IROUND(rgba[i][RCOMP] * scale);            GLfloat c = lut[CLAMP(j, 0, max)];            rgba[i][RCOMP] =            rgba[i][GCOMP] =            rgba[i][BCOMP] =            rgba[i][ACOMP] = c;         }         break;      case GL_LUMINANCE:         /* replace RGB with L */         for (i = 0; i < n; i++) {            GLint j = IROUND(rgba[i][RCOMP] * scale);            GLfloat c = lut[CLAMP(j, 0, max)];            rgba[i][RCOMP] =            rgba[i][GCOMP] =            rgba[i][BCOMP] = c;         }         break;      case GL_ALPHA:         /* replace A with A */         for (i = 0; i < n; i++) {            GLint j = IROUND(rgba[i][ACOMP] * scale);            rgba[i][ACOMP] = lut[CLAMP(j, 0, max)];         }         break;      case GL_LUMINANCE_ALPHA:         /* replace RGBA with LLLA */         for (i = 0; i < n; i++) {            GLint jL = IROUND(rgba[i][RCOMP] * scale);            GLint jA = IROUND(rgba[i][ACOMP] * scale);            GLfloat luminance, alpha;            jL = CLAMP(jL, 0, max);            jA = CLAMP(jA, 0, max);            luminance = lut[jL * 2 + 0];            alpha     = lut[jA * 2 + 1];            rgba[i][RCOMP] =            rgba[i][GCOMP] =            rgba[i][BCOMP] = luminance;            rgba[i][ACOMP] = alpha;;         }         break;      case GL_RGB:         /* replace RGB with RGB */         for (i = 0; i < n; i++) {            GLint jR = IROUND(rgba[i][RCOMP] * scale);            GLint jG = IROUND(rgba[i][GCOMP] * scale);            GLint jB = IROUND(rgba[i][BCOMP] * scale);            jR = CLAMP(jR, 0, max);            jG = CLAMP(jG, 0, max);            jB = CLAMP(jB, 0, max);            rgba[i][RCOMP] = lut[jR * 3 + 0];            rgba[i][GCOMP] = lut[jG * 3 + 1];            rgba[i][BCOMP] = lut[jB * 3 + 2];         }         break;      case GL_RGBA:         /* replace RGBA with RGBA */         for (i = 0; i < n; i++) {            GLint jR = IROUND(rgba[i][RCOMP] * scale);            GLint jG = IROUND(rgba[i][GCOMP] * scale);            GLint jB = IROUND(rgba[i][BCOMP] * scale);            GLint jA = IROUND(rgba[i][ACOMP] * scale);            jR = CLAMP(jR, 0, max);            jG = CLAMP(jG, 0, max);            jB = CLAMP(jB, 0, max);            jA = CLAMP(jA, 0, max);            rgba[i][RCOMP] = lut[jR * 4 + 0];            rgba[i][GCOMP] = lut[jG * 4 + 1];            rgba[i][BCOMP] = lut[jB * 4 + 2];            rgba[i][ACOMP] = lut[jA * 4 + 3];         }         break;      default:         _mesa_problem(NULL, "Bad format in _mesa_lookup_rgba_float");         return;   }}/** * Apply a color table lookup to an array of ubyte/RGBA colors. */void_mesa_lookup_rgba_ubyte(const struct gl_color_table *table,                        GLuint n, GLubyte rgba[][4]){   const GLubyte *lut = table->TableUB;   const GLfloat scale = (GLfloat) (table->Size - 1) / 255.0;   GLuint i;   if (!table->TableUB || table->Size == 0)      return;   switch (table->_BaseFormat) {   case GL_INTENSITY:      /* replace RGBA with I */      if (table->Size == 256) {         for (i = 0; i < n; i++) {            const GLubyte c = lut[rgba[i][RCOMP]];            rgba[i][RCOMP] =            rgba[i][GCOMP] =            rgba[i][BCOMP] =            rgba[i][ACOMP] = c;         }      }      else {         for (i = 0; i < n; i++) {            GLint j = IROUND((GLfloat) rgba[i][RCOMP] * scale);            rgba[i][RCOMP] =            rgba[i][GCOMP] =            rgba[i][BCOMP] =            rgba[i][ACOMP] = lut[j];         }      }      break;   case GL_LUMINANCE:

⌨️ 快捷键说明

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