Esempio n. 1
0
func (me *FxEffect) UpdateRoutine() {
	var (
		i, tc int
		buf   ustr.Buffer
		rt    string
	)
	if len(me.KeepProcIDsLast) > 0 {
		me.FxProcs.EnsureLast(me.KeepProcIDsLast...)
		me.ext.EnsureLast(me.KeepProcIDsLast...)
	}

	ops, ext, counts := me.FxProcs, len(me.ext) > 0, make(map[string]int, len(me.FxProcs)+len(me.ext))
doOps:
	for o := 0; o < len(ops); o++ {
		if ops[o].Enabled {
			buf.Write("_%s", ops[o].procID)
			i = counts[ops[o].procID]
			ops[o].setProcIndex(i)
			counts[ops[o].procID] = i + 1
			if ops[o].IsTex() {
				tc++
			}
		}
	}
	if ext {
		ext, ops = false, me.ext
		goto doOps
	}

	me.uberName = buf.String()
	for rt, _ = range Core.Render.KnownTechniques {
		me.uberPnames[rt] = strf("uber_%s%s", rt, me.uberName)
	}
	thrRend.curEffect = nil
	if tc > Stats.Programs.maxTexUnits {
		Stats.Programs.maxTexUnits = tc
	}
}