struct gl_fragment_program_state { unsigned char _Enabled; struct gl_fragment_program *_TexEnvProgram; }; struct gl_shader_state { struct gl_shader_program *CurrentProgram; }; struct gl_constants { unsigned int MaxTextureUnits; } GLvertexformat; typedef struct { struct gl_constants Const; struct gl_fragment_program_state FragmentProgram; struct gl_shader_state Shader; } GLcontext; struct mode_opt { }; struct state_key { unsigned int enabled_units; struct { unsigned int NumArgsRGB:2; unsigned int ModeRGB:4; struct mode_opt OptRGB[3]; unsigned int ModeA:4; } unit[8]; }; struct ureg { unsigned int file:4; unsigned int idx:8; }; struct texenv_fragment_program { struct ureg src_previous; }; emit_combine(struct texenv_fragment_program *p, unsigned int mode) { if (mode) emit_arith(p); } struct ureg emit_texenv(struct texenv_fragment_program *p, unsigned int unit) { struct state_key *key; emit_combine(p, key->unit[unit].ModeRGB); } create_new_program(GLcontext *ctx) { struct texenv_fragment_program p; unsigned int unit; for (; unit < ctx->Const.MaxTextureUnits; ++unit) p.src_previous = emit_texenv(&p, unit); } _mesa_UpdateTexEnvProgram() { GLcontext *ctx; create_new_program(ctx); }