| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package stats
- import (
- "github.com/g3n/engine/gls"
- "github.com/g3n/engine/gui"
- )
- // StatsTable is a gui.Table panel with statistics
- type StatsTable struct {
- *gui.Table // embedded table panel
- fields []*field // array of fields to show
- }
- type field struct {
- id string
- row int
- }
- // NewStatsTable creates and returns a pointer to a new statistics table panel
- func NewStatsTable(width, height float32, gs *gls.GLS) *StatsTable {
- // Creates table panel
- st := new(StatsTable)
- t, err := gui.NewTable(width, height, []gui.TableColumn{
- {Id: "f", Header: "Stat", Width: 50, Minwidth: 32, Align: gui.AlignRight, Format: "%s", Resize: true, Expand: 2},
- {Id: "v", Header: "Value", Width: 50, Minwidth: 32, Align: gui.AlignRight, Format: "%d", Resize: false, Expand: 1},
- })
- if err != nil {
- panic(err)
- }
- st.Table = t
- st.ShowHeader(false)
- // Add rows
- st.addRow("shaders", "Shaders:")
- st.addRow("vaos", "Vaos:")
- st.addRow("buffers", "Buffers:")
- st.addRow("textures", "Textures:")
- st.addRow("unisets", "Uniforms/frame:")
- st.addRow("drawcalls", "Draw calls/frame:")
- st.addRow("cgocalls", "CGO calls/frame:")
- return st
- }
- // Update updates the table values from the specified stats table
- func (st *StatsTable) Update(s *Stats) {
- for i := 0; i < len(st.fields); i++ {
- f := st.fields[i]
- switch f.id {
- case "shaders":
- st.Table.SetCell(f.row, "v", s.Glstats.Shaders)
- case "vaos":
- st.Table.SetCell(f.row, "v", s.Glstats.Vaos)
- case "buffers":
- st.Table.SetCell(f.row, "v", s.Glstats.Buffers)
- case "textures":
- st.Table.SetCell(f.row, "v", s.Glstats.Textures)
- case "unisets":
- st.Table.SetCell(f.row, "v", s.Unisets)
- case "drawcalls":
- st.Table.SetCell(f.row, "v", s.Drawcalls)
- case "cgocalls":
- st.Table.SetCell(f.row, "v", s.Cgocalls)
- }
- }
- }
- func (st *StatsTable) addRow(id, label string) {
- f := new(field)
- f.id = id
- f.row = st.Table.RowCount()
- st.Table.AddRow(map[string]interface{}{"f": label, "v": 0})
- st.fields = append(st.fields, f)
- }
|