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

📄 attrib.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 4 页
字号:
      if (ctx->Extensions.EXT_texture_lod_bias) {         _mesa_TexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT,                       GL_TEXTURE_LOD_BIAS_EXT, unit->LodBias);      }      if (ctx->Extensions.EXT_texture_env_combine ||          ctx->Extensions.ARB_texture_env_combine) {         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB,                       unit->Combine.ModeRGB);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA,                       unit->Combine.ModeA);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB,                       unit->Combine.SourceRGB[0]);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB,                       unit->Combine.SourceRGB[1]);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_RGB,                       unit->Combine.SourceRGB[2]);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_ALPHA,                       unit->Combine.SourceA[0]);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_ALPHA,                       unit->Combine.SourceA[1]);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_ALPHA,                       unit->Combine.SourceA[2]);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB,                       unit->Combine.OperandRGB[0]);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB,                       unit->Combine.OperandRGB[1]);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB,                       unit->Combine.OperandRGB[2]);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA,                       unit->Combine.OperandA[0]);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA,                       unit->Combine.OperandA[1]);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_ALPHA,                       unit->Combine.OperandA[2]);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_RGB_SCALE,                       1 << unit->Combine.ScaleShiftRGB);         _mesa_TexEnvi(GL_TEXTURE_ENV, GL_ALPHA_SCALE,                       1 << unit->Combine.ScaleShiftA);      }      /* Restore texture object state */      for (i = 0; i < NUM_TEXTURE_TARGETS; i++) {         GLenum target = 0;         const struct gl_texture_object *obj = NULL;         GLfloat bordColor[4];         switch (i) {         case 0:            target = GL_TEXTURE_1D;            obj = &unit->Saved1D;            break;         case 1:            target = GL_TEXTURE_2D;            obj = &unit->Saved2D;            break;         case 2:            target = GL_TEXTURE_3D;            obj = &unit->Saved3D;            break;         case 3:            if (!ctx->Extensions.ARB_texture_cube_map)               continue;            target = GL_TEXTURE_CUBE_MAP_ARB;            obj = &unit->SavedCubeMap;            break;         case 4:            if (!ctx->Extensions.NV_texture_rectangle)               continue;            target = GL_TEXTURE_RECTANGLE_NV;            obj = &unit->SavedRect;            break;         default:            ; /* silence warnings */         }         _mesa_BindTexture(target, obj->Name);         bordColor[0] = CHAN_TO_FLOAT(obj->BorderColor[0]);         bordColor[1] = CHAN_TO_FLOAT(obj->BorderColor[1]);         bordColor[2] = CHAN_TO_FLOAT(obj->BorderColor[2]);         bordColor[3] = CHAN_TO_FLOAT(obj->BorderColor[3]);         _mesa_TexParameterf(target, GL_TEXTURE_PRIORITY, obj->Priority);         _mesa_TexParameterfv(target, GL_TEXTURE_BORDER_COLOR, bordColor);         _mesa_TexParameteri(target, GL_TEXTURE_WRAP_S, obj->WrapS);         _mesa_TexParameteri(target, GL_TEXTURE_WRAP_T, obj->WrapT);         _mesa_TexParameteri(target, GL_TEXTURE_WRAP_R, obj->WrapR);         _mesa_TexParameteri(target, GL_TEXTURE_MIN_FILTER, obj->MinFilter);         _mesa_TexParameteri(target, GL_TEXTURE_MAG_FILTER, obj->MagFilter);         _mesa_TexParameterf(target, GL_TEXTURE_MIN_LOD, obj->MinLod);         _mesa_TexParameterf(target, GL_TEXTURE_MAX_LOD, obj->MaxLod);         _mesa_TexParameteri(target, GL_TEXTURE_BASE_LEVEL, obj->BaseLevel);         _mesa_TexParameteri(target, GL_TEXTURE_MAX_LEVEL, obj->MaxLevel);         if (ctx->Extensions.EXT_texture_filter_anisotropic) {            _mesa_TexParameterf(target, GL_TEXTURE_MAX_ANISOTROPY_EXT,                                obj->MaxAnisotropy);         }         if (ctx->Extensions.SGIX_shadow) {            _mesa_TexParameteri(target, GL_TEXTURE_COMPARE_SGIX,                                obj->CompareFlag);            _mesa_TexParameteri(target, GL_TEXTURE_COMPARE_OPERATOR_SGIX,                                obj->CompareOperator);         }         if (ctx->Extensions.SGIX_shadow_ambient) {            _mesa_TexParameterf(target, GL_SHADOW_AMBIENT_SGIX,                                obj->ShadowAmbient);         }      }   }   _mesa_ActiveTextureARB(GL_TEXTURE0_ARB                          + texAttrib->CurrentUnit);   /* "un-bump" the texture object reference counts.  We did that so they    * wouldn't inadvertantly get deleted while they were still referenced    * inside the attribute state stack.    */   for (u = 0; u < ctx->Const.MaxTextureUnits; u++) {      ctx->Texture.Unit[u].Current1D->RefCount--;      ctx->Texture.Unit[u].Current2D->RefCount--;      ctx->Texture.Unit[u].Current3D->RefCount--;      ctx->Texture.Unit[u].CurrentCubeMap->RefCount--;      ctx->Texture.Unit[u].CurrentRect->RefCount--;   }}/* * This function is kind of long just because we have to call a lot * of device driver functions to update device driver state. * * XXX As it is now, most of the pop-code calls immediate-mode Mesa functions * in order to restore GL state.  This isn't terribly efficient but it * ensures that dirty flags and any derived state gets updated correctly. * We could at least check if the value to restore equals the current value * and then skip the Mesa call. */void GLAPIENTRY_mesa_PopAttrib(void){   struct gl_attrib_node *attr, *next;   GET_CURRENT_CONTEXT(ctx);   ASSERT_OUTSIDE_BEGIN_END_AND_FLUSH(ctx);   if (ctx->AttribStackDepth == 0) {      _mesa_error( ctx, GL_STACK_UNDERFLOW, "glPopAttrib" );      return;   }   ctx->AttribStackDepth--;   attr = ctx->AttribStack[ctx->AttribStackDepth];   while (attr) {      if (MESA_VERBOSE & VERBOSE_API) {         _mesa_debug(ctx, "glPopAttrib %s\n",                     _mesa_lookup_enum_by_nr(attr->kind));      }      switch (attr->kind) {         case GL_ACCUM_BUFFER_BIT:            {               const struct gl_accum_attrib *accum;               accum = (const struct gl_accum_attrib *) attr->data;               _mesa_ClearAccum(accum->ClearColor[0],                                accum->ClearColor[1],                                accum->ClearColor[2],                                accum->ClearColor[3]);            }            break;         case GL_COLOR_BUFFER_BIT:            {               const struct gl_colorbuffer_attrib *color;               color = (const struct gl_colorbuffer_attrib *) attr->data;               _mesa_ClearIndex((GLfloat) color->ClearIndex);               _mesa_ClearColor(color->ClearColor[0],                                color->ClearColor[1],                                color->ClearColor[2],                                color->ClearColor[3]);               _mesa_IndexMask(color->IndexMask);               _mesa_ColorMask((GLboolean) (color->ColorMask[0] != 0),                               (GLboolean) (color->ColorMask[1] != 0),                               (GLboolean) (color->ColorMask[2] != 0),                               (GLboolean) (color->ColorMask[3] != 0));               _mesa_drawbuffers(ctx, ctx->Const.MaxDrawBuffers,                                 color->DrawBuffer, NULL);               _mesa_set_enable(ctx, GL_ALPHA_TEST, color->AlphaEnabled);               _mesa_AlphaFunc(color->AlphaFunc, color->AlphaRef);               _mesa_set_enable(ctx, GL_BLEND, color->BlendEnabled);               _mesa_BlendFuncSeparateEXT(color->BlendSrcRGB,                                          color->BlendDstRGB,                                          color->BlendSrcA,                                          color->BlendDstA);	       /* This special case is because glBlendEquationSeparateEXT		* cannot take GL_LOGIC_OP as a parameter.		*/	       if ( color->BlendEquationRGB == color->BlendEquationA ) {		  _mesa_BlendEquation(color->BlendEquationRGB);	       }	       else {		  _mesa_BlendEquationSeparateEXT(color->BlendEquationRGB,						 color->BlendEquationA);	       }               _mesa_BlendColor(color->BlendColor[0],                                color->BlendColor[1],                                color->BlendColor[2],                                color->BlendColor[3]);               _mesa_LogicOp(color->LogicOp);               _mesa_set_enable(ctx, GL_COLOR_LOGIC_OP,                                color->ColorLogicOpEnabled);               _mesa_set_enable(ctx, GL_INDEX_LOGIC_OP,                                color->IndexLogicOpEnabled);               _mesa_set_enable(ctx, GL_DITHER, color->DitherFlag);            }            break;         case GL_CURRENT_BIT:	    FLUSH_CURRENT( ctx, 0 );            MEMCPY( &ctx->Current, attr->data,		    sizeof(struct gl_current_attrib) );            break;         case GL_DEPTH_BUFFER_BIT:            {               const struct gl_depthbuffer_attrib *depth;               depth = (const struct gl_depthbuffer_attrib *) attr->data;               _mesa_DepthFunc(depth->Func);               _mesa_ClearDepth(depth->Clear);               _mesa_set_enable(ctx, GL_DEPTH_TEST, depth->Test);               _mesa_DepthMask(depth->Mask);            }            break;         case GL_ENABLE_BIT:            {               const struct gl_enable_attrib *enable;               enable = (const struct gl_enable_attrib *) attr->data;               pop_enable_group(ctx, enable);	       ctx->NewState |= _NEW_ALL;            }            break;         case GL_EVAL_BIT:            MEMCPY( &ctx->Eval, attr->data, sizeof(struct gl_eval_attrib) );	    ctx->NewState |= _NEW_EVAL;            break;         case GL_FOG_BIT:            {               const struct gl_fog_attrib *fog;               fog = (const struct gl_fog_attrib *) attr->data;               _mesa_set_enable(ctx, GL_FOG, fog->Enabled);               _mesa_Fogfv(GL_FOG_COLOR, fog->Color);               _mesa_Fogf(GL_FOG_DENSITY, fog->Density);               _mesa_Fogf(GL_FOG_START, fog->Start);               _mesa_Fogf(GL_FOG_END, fog->End);               _mesa_Fogf(GL_FOG_INDEX, fog->Index);               _mesa_Fogi(GL_FOG_MODE, fog->Mode);            }            break;         case GL_HINT_BIT:            {               const struct gl_hint_attrib *hint;               hint = (const struct gl_hint_attrib *) attr->data;               _mesa_Hint(GL_PERSPECTIVE_CORRECTION_HINT,                          hint->PerspectiveCorrection );               _mesa_Hint(GL_POINT_SMOOTH_HINT, hint->PointSmooth);               _mesa_Hint(GL_LINE_SMOOTH_HINT, hint->LineSmooth);               _mesa_Hint(GL_POLYGON_SMOOTH_HINT, hint->PolygonSmooth);               _mesa_Hint(GL_FOG_HINT, hint->Fog);               _mesa_Hint(GL_CLIP_VOLUME_CLIPPING_HINT_EXT,                          hint->ClipVolumeClipping);               if (ctx->Extensions.ARB_texture_compression)                  _mesa_Hint(GL_TEXTURE_COMPRESSION_HINT_ARB,                             hint->TextureCompression);            }            break;         case GL_LIGHTING_BIT:            {               GLuint i;               const struct gl_light_attrib *light;               light = (const struct gl_light_attrib *) attr->data;               /* lighting enable */               _mesa_set_enable(ctx, GL_LIGHTING, light->Enabled);               /* per-light state */               if (_math_matrix_is_dirty(ctx->ModelviewMatrixStack.Top))                  _math_matrix_analyse( ctx->ModelviewMatrixStack.Top );	                      for (i = 0; i < ctx->Const.MaxLights; i++) {		  const struct gl_light *l = &light->Light[i];                  _mesa_set_enable(ctx, GL_LIGHT0 + i, l->Enabled);		  _mesa_light(ctx, i, GL_AMBIENT, l->Ambient);		  _mesa_light(ctx, i, GL_DIFFUSE, l->Diffuse);		  _mesa_light(ctx, i, GL_SPECULAR, l->Specular );		  _mesa_light(ctx, i, GL_POSITION, l->EyePosition);		  _mesa_light(ctx, i, GL_SPOT_DIRECTION, l->EyeDirection);		  _mesa_light(ctx, i, GL_SPOT_EXPONENT, &l->SpotExponent);		  _mesa_light(ctx, i, GL_SPOT_CUTOFF, &l->SpotCutoff);		  _mesa_light(ctx, i, GL_CONSTANT_ATTENUATION,                              &l->ConstantAttenuation);		  _mesa_light(ctx, i, GL_LINEAR_ATTENUATION,                              &l->LinearAttenuation);		  _mesa_light(ctx, i, GL_QUADRATIC_ATTENUATION,                              &l->QuadraticAttenuation);               }               /* light model */               _mesa_LightModelfv(GL_LIGHT_MODEL_AMBIENT,                                  light->Model.Ambient);               _mesa_LightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER,                                 (GLfloat) light->Model.LocalViewer);               _mesa_LightModelf(GL_LIGHT_MODEL_TWO_SIDE,                                 (GLfloat) light->Model.TwoSide);               _mesa_LightModelf(GL_LIGHT_MODEL_COLOR_CONTROL,                                 (GLfloat) light->Model.ColorControl);               /* materials */               MEMCPY(&ctx->Light.Material, &light->Material,                      sizeof(struct gl_material));               /* shade model */               _mesa_ShadeModel(light->ShadeModel);               /* color material */               _mesa_ColorMaterial(light->ColorMaterialFace,                                   light->ColorMaterialMode);               _mesa_set_enable(ctx, GL_COLOR_MATERIAL,                                light->ColorMaterialEnabled);            }            break;         case GL_LINE_BIT:            {               const struct gl_line_attrib *line;               line = (const struct gl_line_attrib *) attr->data;               _mesa_set_enable(ctx, GL_LINE_SMOOTH, line->SmoothFlag);               _mesa_set_enable(ctx, GL_LINE_STIPPLE, line->StippleFlag);               _mesa_LineStipple(line->StippleFactor, line->StipplePattern);               _mesa_LineWidth(line->Width);            }            break;         case GL_LIST_BIT:            MEMCPY( &ctx->List, attr->data, sizeof(struct gl_list_attrib) );

⌨️ 快捷键说明

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