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

📄 texstate.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 5 页
字号:
}void GLAPIENTRY_mesa_TexEnviv( GLenum target, GLenum pname, const GLint *param ){   GLfloat p[4];   if (pname == GL_TEXTURE_ENV_COLOR) {      p[0] = INT_TO_FLOAT( param[0] );      p[1] = INT_TO_FLOAT( param[1] );      p[2] = INT_TO_FLOAT( param[2] );      p[3] = INT_TO_FLOAT( param[3] );   }   else {      p[0] = (GLfloat) param[0];      p[1] = p[2] = p[3] = 0;  /* init to zero, just to be safe */   }   _mesa_TexEnvfv( target, pname, p );}void GLAPIENTRY_mesa_GetTexEnvfv( GLenum target, GLenum pname, GLfloat *params ){   GLuint maxUnit;   const struct gl_texture_unit *texUnit;   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END(ctx);   maxUnit = (target == GL_POINT_SPRITE_NV && pname == GL_COORD_REPLACE_NV)      ? ctx->Const.MaxTextureCoordUnits : ctx->Const.MaxTextureImageUnits;   if (ctx->Texture.CurrentUnit >= maxUnit) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexEnvfv(current unit)");      return;   }   texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];   if (target == GL_TEXTURE_ENV) {      switch (pname) {         case GL_TEXTURE_ENV_MODE:            *params = ENUM_TO_FLOAT(texUnit->EnvMode);            break;         case GL_TEXTURE_ENV_COLOR:            COPY_4FV( params, texUnit->EnvColor );            break;         case GL_COMBINE_RGB:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {               *params = (GLfloat) texUnit->Combine.ModeRGB;            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)");            }            break;         case GL_COMBINE_ALPHA:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {               *params = (GLfloat) texUnit->Combine.ModeA;            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)");            }            break;         case GL_SOURCE0_RGB:         case GL_SOURCE1_RGB:         case GL_SOURCE2_RGB:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {	       const unsigned rgb_idx = pname - GL_SOURCE0_RGB;               *params = (GLfloat) texUnit->Combine.SourceRGB[rgb_idx];            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)");            }            break;         case GL_SOURCE0_ALPHA:         case GL_SOURCE1_ALPHA:         case GL_SOURCE2_ALPHA:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {	       const unsigned alpha_idx = pname - GL_SOURCE0_ALPHA;               *params = (GLfloat) texUnit->Combine.SourceA[alpha_idx];            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)");            }            break;         case GL_OPERAND0_RGB:         case GL_OPERAND1_RGB:         case GL_OPERAND2_RGB:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {	       const unsigned op_rgb = pname - GL_OPERAND0_RGB;               *params = (GLfloat) texUnit->Combine.OperandRGB[op_rgb];            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)");            }            break;         case GL_OPERAND0_ALPHA:         case GL_OPERAND1_ALPHA:         case GL_OPERAND2_ALPHA:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {	       const unsigned op_alpha = pname - GL_OPERAND0_ALPHA;               *params = (GLfloat) texUnit->Combine.OperandA[op_alpha];            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)");            }            break;         case GL_RGB_SCALE:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {               if (texUnit->Combine.ScaleShiftRGB == 0)                  *params = 1.0;               else if (texUnit->Combine.ScaleShiftRGB == 1)                  *params = 2.0;               else                  *params = 4.0;            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)");               return;            }            break;         case GL_ALPHA_SCALE:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {               if (texUnit->Combine.ScaleShiftA == 0)                  *params = 1.0;               else if (texUnit->Combine.ScaleShiftA == 1)                  *params = 2.0;               else                  *params = 4.0;            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)");               return;            }            break;         default:            _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname=0x%x)", pname);      }   }   else if (target == GL_TEXTURE_FILTER_CONTROL_EXT) {      /* GL_EXT_texture_lod_bias */      if (!ctx->Extensions.EXT_texture_lod_bias) {	 _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexEnvfv(target)" );	 return;      }      if (pname == GL_TEXTURE_LOD_BIAS_EXT) {         *params = texUnit->LodBias;      }      else {         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)" );	 return;      }   }   else if (target == GL_POINT_SPRITE_NV) {      /* GL_ARB_point_sprite / GL_NV_point_sprite */      if (!ctx->Extensions.NV_point_sprite	  && !ctx->Extensions.ARB_point_sprite) {         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexEnvfv(target)" );         return;      }      if (pname == GL_COORD_REPLACE_NV) {         *params = (GLfloat) ctx->Point.CoordReplace[ctx->Texture.CurrentUnit];      }      else {         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)" );         return;      }   }   else {      _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexEnvfv(target)" );      return;   }}void GLAPIENTRY_mesa_GetTexEnviv( GLenum target, GLenum pname, GLint *params ){   GLuint maxUnit;   const struct gl_texture_unit *texUnit;   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END(ctx);   maxUnit = (target == GL_POINT_SPRITE_NV && pname == GL_COORD_REPLACE_NV)      ? ctx->Const.MaxTextureCoordUnits : ctx->Const.MaxTextureImageUnits;   if (ctx->Texture.CurrentUnit >= maxUnit) {      _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexEnviv(current unit)");      return;   }   texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit];   if (target == GL_TEXTURE_ENV) {      switch (pname) {         case GL_TEXTURE_ENV_MODE:            *params = (GLint) texUnit->EnvMode;            break;         case GL_TEXTURE_ENV_COLOR:            params[0] = FLOAT_TO_INT( texUnit->EnvColor[0] );            params[1] = FLOAT_TO_INT( texUnit->EnvColor[1] );            params[2] = FLOAT_TO_INT( texUnit->EnvColor[2] );            params[3] = FLOAT_TO_INT( texUnit->EnvColor[3] );            break;         case GL_COMBINE_RGB:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {               *params = (GLint) texUnit->Combine.ModeRGB;            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnviv(pname)");            }            break;         case GL_COMBINE_ALPHA:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {               *params = (GLint) texUnit->Combine.ModeA;            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnviv(pname)");            }            break;         case GL_SOURCE0_RGB:         case GL_SOURCE1_RGB:         case GL_SOURCE2_RGB:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {	       const unsigned rgb_idx = pname - GL_SOURCE0_RGB;               *params = (GLint) texUnit->Combine.SourceRGB[rgb_idx];            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnviv(pname)");            }            break;         case GL_SOURCE0_ALPHA:         case GL_SOURCE1_ALPHA:         case GL_SOURCE2_ALPHA:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {	       const unsigned alpha_idx = pname - GL_SOURCE0_ALPHA;               *params = (GLint) texUnit->Combine.SourceA[alpha_idx];            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnviv(pname)");            }            break;         case GL_OPERAND0_RGB:         case GL_OPERAND1_RGB:         case GL_OPERAND2_RGB:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {	       const unsigned op_rgb = pname - GL_OPERAND0_RGB;               *params = (GLint) texUnit->Combine.OperandRGB[op_rgb];            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnviv(pname)");            }            break;         case GL_OPERAND0_ALPHA:         case GL_OPERAND1_ALPHA:         case GL_OPERAND2_ALPHA:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {	       const unsigned op_alpha = pname - GL_OPERAND0_ALPHA;               *params = (GLint) texUnit->Combine.OperandA[op_alpha];            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnviv(pname)");            }            break;         case GL_RGB_SCALE:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {               if (texUnit->Combine.ScaleShiftRGB == 0)                  *params = 1;               else if (texUnit->Combine.ScaleShiftRGB == 1)                  *params = 2;               else                  *params = 4;            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnviv(pname)");               return;            }            break;         case GL_ALPHA_SCALE:            if (ctx->Extensions.EXT_texture_env_combine ||                ctx->Extensions.ARB_texture_env_combine) {               if (texUnit->Combine.ScaleShiftA == 0)                  *params = 1;               else if (texUnit->Combine.ScaleShiftA == 1)                  *params = 2;               else                  *params = 4;            }            else {               _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnviv(pname)");               return;            }            break;         default:            _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexEnviv(pname=0x%x)",                        pname);      }   }   else if (target == GL_TEXTURE_FILTER_CONTROL_EXT) {      /* GL_EXT_texture_lod_bias */      if (!ctx->Extensions.EXT_texture_lod_bias) {	 _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexEnviv(target)" );	 return;      }      if (pname == GL_TEXTURE_LOD_BIAS_EXT) {         *params = (GLint) texUnit->LodBias;      }      else {         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexEnviv(pname)" );	 return;      }   }   else if (target == GL_POINT_SPRITE_NV) {      /* GL_ARB_point_sprite / GL_NV_point_sprite */      if (!ctx->Extensions.NV_point_sprite	  && !ctx->Extensions.ARB_point_sprite) {         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexEnviv(target)" );         return;      }      if (pname == GL_COORD_REPLACE_NV) {         *params = (GLint) ctx->Point.CoordReplace[ctx->Texture.CurrentUnit];      }      else {         _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexEnviv(pname)" );         return;      }   }   else {      _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexEnviv(target)" );      return;   }}/**********************************************************************//*                       Texture Parameters                           *//**********************************************************************//** * Check if a coordinate wrap mode is supported for the texture target. * \return GL_TRUE if legal, GL_FALSE otherwise */static GLboolean validate_texture_wrap_mode(GLcontext * ctx, GLenum target, GLenum wrap){   const struct gl_extensions * const e = & ctx->Extensions;   if (wrap == GL_CLAMP || wrap == GL_CLAMP_TO_EDGE ||       (wrap == GL_CLAMP_TO_BORDER && e->ARB_texture_border_clamp)) {      /* any texture target */      return GL_TRUE;   }   else if (target != GL_TEXTURE_RECTANGLE_NV &&	    (wrap == GL_REPEAT ||	     (wrap == GL_MIRRORED_REPEAT &&	      e->ARB_texture_mirrored_repeat) ||	     (wrap == GL_MIRROR_CLAMP_EXT &&	      (e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp)) ||	     (wrap == GL_MIRROR_CLAMP_TO_EDGE_EXT &&	      (e->ATI_texture_mirror_once || e->EXT_texture_mirror_clamp)) ||	     (wrap == GL_MIRROR_CLAMP_TO_BORDER_EXT &&	      (e->EXT_texture_mirror_clamp)))) {      /* non-rectangle texture */      return GL_TRUE;   }   _mesa_error( ctx, GL_INVALID_VALUE, "glTexParameter(param)" );   return GL_FALSE;}

⌨️ 快捷键说明

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