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

📄 program.c

📁 mesa-6.5-minigui源码
💻 C
📖 第 1 页 / 共 5 页
字号:
         switch (state[1]) {            case STATE_ENV:               COPY_4V(value, ctx->FragmentProgram.Parameters[idx]);               break;            case STATE_LOCAL:               COPY_4V(value, ctx->FragmentProgram.Current->Base.LocalParams[idx]);               break;            default:               _mesa_problem(ctx, "Bad state switch in _mesa_fetch_state()");               return;         }      }      return;		   case STATE_VERTEX_PROGRAM:      {         /* state[1] = {STATE_ENV, STATE_LOCAL} */         /* state[2] = parameter index          */         const int idx = (int) state[2];         switch (state[1]) {            case STATE_ENV:               COPY_4V(value, ctx->VertexProgram.Parameters[idx]);               break;            case STATE_LOCAL:               COPY_4V(value, ctx->VertexProgram.Current->Base.LocalParams[idx]);               break;            default:               _mesa_problem(ctx, "Bad state switch in _mesa_fetch_state()");               return;         }      }      return;   case STATE_INTERNAL:      {         switch (state[1]) {	    case STATE_NORMAL_SCALE:               ASSIGN_4V(value, ctx->_ModelViewInvScale, 0, 0, 1);               break;	    default:               _mesa_problem(ctx, "Bad state switch in _mesa_fetch_state()");               return;         }      }      return;   default:      _mesa_problem(ctx, "Invalid state in _mesa_fetch_state");      return;   }}/* Return a bit mask of the Mesa state flags under which a parameter's * value might change. */static GLuint make_state_flags(const GLint state[]){   switch (state[0]) {   case STATE_MATERIAL:   case STATE_LIGHT:   case STATE_LIGHTMODEL_AMBIENT:   case STATE_LIGHTMODEL_SCENECOLOR:   case STATE_LIGHTPROD:      return _NEW_LIGHT;   case STATE_TEXGEN:   case STATE_TEXENV_COLOR:      return _NEW_TEXTURE;   case STATE_FOG_COLOR:   case STATE_FOG_PARAMS:      return _NEW_FOG;   case STATE_CLIPPLANE:      return _NEW_TRANSFORM;   case STATE_POINT_SIZE:   case STATE_POINT_ATTENUATION:      return _NEW_POINT;   case STATE_MATRIX:      switch (state[1]) {      case STATE_MODELVIEW:	 return _NEW_MODELVIEW;      case STATE_PROJECTION:	 return _NEW_PROJECTION;      case STATE_MVP:	 return _NEW_MODELVIEW | _NEW_PROJECTION;      case STATE_TEXTURE:	 return _NEW_TEXTURE_MATRIX;      case STATE_PROGRAM:	 return _NEW_TRACK_MATRIX;      default:	 assert(0);	 return 0;      }   case STATE_DEPTH_RANGE:      return _NEW_VIEWPORT;   case STATE_FRAGMENT_PROGRAM:   case STATE_VERTEX_PROGRAM:      return _NEW_PROGRAM;   case STATE_INTERNAL:      switch (state[1]) {      case STATE_NORMAL_SCALE:	 return _NEW_MODELVIEW;      default:	 assert(0);	 return 0;      }   default:      assert(0);      return 0;   }}static voidappend(char *dst, const char *src){   while (*dst)      dst++;   while (*src)     *dst++ = *src++;   *dst = 0;}static voidappend_token(char *dst, enum state_index k){   switch (k) {   case STATE_MATERIAL:      append(dst, "material.");      break;   case STATE_LIGHT:      append(dst, "light");      break;   case STATE_LIGHTMODEL_AMBIENT:      append(dst, "lightmodel.ambient");      break;   case STATE_LIGHTMODEL_SCENECOLOR:      break;   case STATE_LIGHTPROD:      append(dst, "lightprod");      break;   case STATE_TEXGEN:      append(dst, "texgen");      break;   case STATE_FOG_COLOR:      append(dst, "fog.color");      break;   case STATE_FOG_PARAMS:      append(dst, "fog.params");      break;   case STATE_CLIPPLANE:      append(dst, "clip");      break;   case STATE_POINT_SIZE:      append(dst, "point.size");      break;   case STATE_POINT_ATTENUATION:      append(dst, "point.attenuation");      break;   case STATE_MATRIX:      append(dst, "matrix.");      break;   case STATE_MODELVIEW:      append(dst, "modelview");      break;   case STATE_PROJECTION:      append(dst, "projection");      break;   case STATE_MVP:      append(dst, "mvp");      break;   case STATE_TEXTURE:      append(dst, "texture");      break;   case STATE_PROGRAM:      append(dst, "program");      break;   case STATE_MATRIX_INVERSE:      append(dst, ".inverse");      break;   case STATE_MATRIX_TRANSPOSE:      append(dst, ".transpose");      break;   case STATE_MATRIX_INVTRANS:      append(dst, ".invtrans");      break;   case STATE_AMBIENT:      append(dst, "ambient");      break;   case STATE_DIFFUSE:      append(dst, "diffuse");      break;   case STATE_SPECULAR:      append(dst, "specular");      break;   case STATE_EMISSION:      append(dst, "emission");      break;   case STATE_SHININESS:      append(dst, "shininess");      break;   case STATE_HALF:      append(dst, "half");      break;   case STATE_POSITION:      append(dst, ".position");      break;   case STATE_ATTENUATION:      append(dst, ".attenuation");      break;   case STATE_SPOT_DIRECTION:      append(dst, ".spot.direction");      break;   case STATE_TEXGEN_EYE_S:      append(dst, "eye.s");      break;   case STATE_TEXGEN_EYE_T:      append(dst, "eye.t");      break;   case STATE_TEXGEN_EYE_R:      append(dst, "eye.r");      break;   case STATE_TEXGEN_EYE_Q:      append(dst, "eye.q");      break;   case STATE_TEXGEN_OBJECT_S:      append(dst, "object.s");      break;   case STATE_TEXGEN_OBJECT_T:      append(dst, "object.t");      break;   case STATE_TEXGEN_OBJECT_R:      append(dst, "object.r");      break;   case STATE_TEXGEN_OBJECT_Q:      append(dst, "object.q");      break;   case STATE_TEXENV_COLOR:      append(dst, "texenv");      break;   case STATE_DEPTH_RANGE:      append(dst, "depth.range");      break;   case STATE_VERTEX_PROGRAM:   case STATE_FRAGMENT_PROGRAM:      break;   case STATE_ENV:      append(dst, "env");      break;   case STATE_LOCAL:      append(dst, "local");      break;   case STATE_INTERNAL:   case STATE_NORMAL_SCALE:   case STATE_POSITION_NORMALIZED:      append(dst, "(internal)");      break;   default:      ;   }}static voidappend_face(char *dst, GLint face){   if (face == 0)      append(dst, "front.");   else      append(dst, "back.");}static voidappend_index(char *dst, GLint index){   char s[20];   _mesa_sprintf(s, "[%d].", index);   append(dst, s);}/** * Make a string from the given state vector. * For example, return "state.matrix.texture[2].inverse". */static const char *make_state_string(const GLint state[6]){   char str[1000] = "";   char tmp[30];   append(str, "state.");   append_token(str, (enum state_index) state[0]);   switch (state[0]) {   case STATE_MATERIAL:      append_face(str, state[1]);      append_token(str, (enum state_index) state[2]);      break;   case STATE_LIGHT:      append(str, "light");      append_index(str, state[1]); /* light number [i]. */      append_token(str, (enum state_index) state[2]); /* coefficients */      break;   case STATE_LIGHTMODEL_AMBIENT:      append(str, "lightmodel.ambient");      break;   case STATE_LIGHTMODEL_SCENECOLOR:      if (state[1] == 0) {         append(str, "lightmodel.front.scenecolor");      }      else {         append(str, "lightmodel.back.scenecolor");      }      break;   case STATE_LIGHTPROD:      append_index(str, state[1]); /* light number [i]. */      append_face(str, state[2]);      append_token(str, (enum state_index) state[3]);      break;   case STATE_TEXGEN:      append_index(str, state[1]); /* tex unit [i] */      append_token(str, (enum state_index) state[2]); /* plane coef */      break;   case STATE_TEXENV_COLOR:      append_index(str, state[1]); /* tex unit [i] */      append(str, "color");      break;   case STATE_FOG_COLOR:   case STATE_FOG_PARAMS:      break;   case STATE_CLIPPLANE:      append_index(str, state[1]); /* plane [i] */      append(str, "plane");      break;   case STATE_POINT_SIZE:   case STATE_POINT_ATTENUATION:      break;   case STATE_MATRIX:      {         /* state[1] = modelview, projection, texture, etc. */         /* state[2] = which texture matrix or program matrix */         /* state[3] = first column to fetch */         /* state[4] = last column to fetch */         /* state[5] = transpose, inverse or invtrans */         const enum state_index mat = (enum state_index) state[1];         const GLuint index = (GLuint) state[2];         const GLuint first = (GLuint) state[3];         const GLuint last = (GLuint) state[4];         const enum state_index modifier = (enum state_index) state[5];         append_token(str, mat);         if (index)            append_index(str, index);         if (modifier)            append_token(str, modifier);         if (first == last)            _mesa_sprintf(tmp, ".row[%d]", first);         else            _mesa_sprintf(tmp, ".row[%d..%d]", first, last);         append(str, tmp);      }      break;   case STATE_DEPTH_RANGE:      break;   case STATE_FRAGMENT_PROGRAM:   case STATE_VERTEX_PROGRAM:      /* state[1] = {STATE_ENV, STATE_LOCAL} */      /* state[2] = parameter index          */      append_token(str, (enum state_index) state[1]);      append_index(str, state[2]);      break;   case STATE_INTERNAL:      break;   default:      _mesa_problem(NULL, "Invalid state in maka_state_string");      break;   }   return _mesa_strdup(str);}/** * Loop over all the parameters in a parameter list.  If the parameter * is a GL state reference, look up the current value of that state * variable and put it into the parameter's Value[4] array. * This would be called at glBegin time when using a fragment program. */void_mesa_load_state_parameters(GLcontext *ctx,                            struct program_parameter_list *paramList){   GLuint i;   if (!paramList)      return;   for (i = 0; i < paramList->NumParameters; i++) {      if (paramList->Parameters[i].Type == PROGRAM_STATE_VAR) {         _mesa_fetch_state(ctx, 			   paramList->Parameters[i].StateIndexes,                           paramList->ParameterValues[i]);      }   }}/** * Initialize program instruction fields to defaults. */void_mesa_init_instruction(struct prog_instruction *inst){   _mesa_bzero(inst, sizeof(struct prog_instruction));   inst->SrcReg[0].File = PROGRAM_UNDEFINED;   inst->SrcReg[0].Swizzle = SWIZZLE_NOOP;   inst->SrcReg[1].File = PROGRAM_UNDEFINED;

⌨️ 快捷键说明

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