]> git.cworth.org Git - apitrace/blob - gui/apitracecall.h
Show currently bound shaders.
[apitrace] / gui / apitracecall.h
1 #ifndef APITRACECALL_H
2 #define APITRACECALL_H
3
4 #include <QStaticText>
5 #include <QStringList>
6 #include <QUrl>
7 #include <QVariant>
8
9 #include "trace_model.hpp"
10
11
12 class VariantVisitor : public Trace::Visitor
13 {
14 public:
15     virtual void visit(Trace::Null *);
16     virtual void visit(Trace::Bool *node);
17     virtual void visit(Trace::SInt *node);
18     virtual void visit(Trace::UInt *node);
19     virtual void visit(Trace::Float *node);
20     virtual void visit(Trace::String *node);
21     virtual void visit(Trace::Enum *e);
22     virtual void visit(Trace::Bitmask *bitmask);
23     virtual void visit(Trace::Struct *str);
24     virtual void visit(Trace::Array *array);
25     virtual void visit(Trace::Blob *blob);
26     virtual void visit(Trace::Pointer *ptr);
27
28     QVariant variant() const
29     {
30         return m_variant;
31     }
32 private:
33     QVariant m_variant;
34 };
35
36
37 class ApiPointer
38 {
39 public:
40     ApiPointer(int val=0);
41
42     QString toString() const;
43 private:
44     int m_value;
45 };
46 Q_DECLARE_METATYPE(ApiPointer);
47
48 class ApiBitmask
49 {
50 public:
51     typedef QList<QPair<QString, unsigned long long> > Signature;
52
53     ApiBitmask(const Trace::Bitmask *bitmask = 0);
54
55     QString toString() const;
56
57 private:
58     void init(const Trace::Bitmask *bitmask);
59 private:
60     Signature m_sig;
61     unsigned long long m_value;
62 };
63 Q_DECLARE_METATYPE(ApiBitmask);
64
65 class ApiStruct
66 {
67 public:
68     struct Signature {
69         QString name;
70         QStringList memberNames;
71     };
72
73     ApiStruct(const Trace::Struct *s = 0);
74
75     QString toString() const;
76
77 private:
78     void init(const Trace::Struct *bitmask);
79 private:
80     Signature m_sig;
81     QList<QVariant> m_members;
82 };
83 Q_DECLARE_METATYPE(ApiStruct);
84
85 class ApiArray
86 {
87 public:
88     ApiArray(const Trace::Array *arr = 0);
89
90     QString toString() const;
91
92 private:
93     void init(const Trace::Array *arr);
94 private:
95     QList<QVariant> m_array;
96 };
97 Q_DECLARE_METATYPE(ApiArray);
98
99
100 QString apiVariantToString(const QVariant &variant);
101
102 class ApiTraceFrame;
103
104 class ApiTraceState {
105 public:
106     ApiTraceState();
107     explicit ApiTraceState(const QVariantMap &parseJson);
108
109     bool isEmpty() const;
110     QVariantMap parameters() const;
111     QStringList shaderSources() const;
112
113 private:
114     QVariantMap m_parameters;
115     QStringList m_shaderSources;
116 };
117
118 class ApiTraceEvent
119 {
120 public:
121     enum Type {
122         None,
123         Call,
124         Frame
125     };
126 public:
127     ApiTraceEvent();
128     ApiTraceEvent(Type t);
129
130     Type type() const { return m_type; }
131
132     virtual QStaticText staticText() const = 0;
133     virtual int numChildren() const = 0;
134
135     QVariantMap stateParameters() const;
136     ApiTraceState state() const;
137     void setState(const ApiTraceState &state);
138
139 protected:
140     Type m_type;
141     ApiTraceState m_state;
142 };
143 Q_DECLARE_METATYPE(ApiTraceEvent*);
144
145 class ApiTraceCall : public ApiTraceEvent
146 {
147 public:
148     ApiTraceCall();
149     ~ApiTraceCall();
150
151     int index;
152     QString name;
153     QStringList argNames;
154     QVariantList argValues;
155     QVariant returnValue;
156     ApiTraceFrame *parentFrame;
157     QUrl helpUrl;
158
159     QString toHtml() const;
160     QString filterText() const;
161     QStaticText staticText() const;
162     int numChildren() const;
163     bool hasBinaryData() const;
164     int binaryDataIndex() const;
165 private:
166     mutable QString m_richText;
167     mutable QString m_filterText;
168     mutable QStaticText m_staticText;
169     mutable bool m_hasBinaryData;
170     mutable int m_binaryDataIndex;
171 };
172 Q_DECLARE_METATYPE(ApiTraceCall*);
173
174 class ApiTraceFrame : public ApiTraceEvent
175 {
176 public:
177     ApiTraceFrame();
178     int number;
179     QList<ApiTraceCall*> calls;
180
181     int numChildren() const;
182     QStaticText staticText() const;
183 private:
184     mutable QStaticText m_staticText;
185 };
186 Q_DECLARE_METATYPE(ApiTraceFrame*);
187
188
189 #endif