]> git.cworth.org Git - vogl/blob - src/vogleditor/vogleditor.h
53247d6db948f5c81ed73aa44f383a1aec2885e8
[vogl] / src / vogleditor / vogleditor.h
1 /**************************************************************************
2  *
3  * Copyright 2013-2014 RAD Game Tools and Valve Software
4  * All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to deal
8  * in the Software without restriction, including without limitation the rights
9  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10  * copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in
14  * all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22  * THE SOFTWARE.
23  *
24  **************************************************************************/
25
26 #ifndef VOGLEDITOR_H
27 #define VOGLEDITOR_H
28
29 #include <QMainWindow>
30 #include <QString>
31 #include <QLabel>
32 #include <QModelIndexList>
33
34 #include "vogl_dynamic_string.h"
35 #include "vogl_hash_map.h"
36 #include "vogl_json.h"
37 #include "vogleditor_qframebufferexplorer.h"
38 #include "vogleditor_qprogramexplorer.h"
39 #include "vogleditor_qshaderexplorer.h"
40 #include "vogleditor_qtextureexplorer.h"
41 #include "vogleditor_qtimelineview.h"
42 #include "vogleditor_tracereplayer.h"
43
44 namespace Ui {
45 class VoglEditor;
46 }
47
48 typedef uint64_t GLuint64;
49
50 class vogleditor_QTextureExplorer;
51
52 class QItemSelection;
53 class QModelIndex;
54 class QSortFilterProxyModel;
55 class QToolButton;
56 class vogl_context_snapshot;
57 class vogl_framebuffer_state;
58 class vogl_program_state;
59 class vogl_replay_window;
60 class vogl_shader_state;
61 class vogl_texture_state;
62 class vogl_trace_file_reader;
63 class vogl_trace_packet;
64 class vogl_gl_state_snapshot;
65 class vogleditor_apiCallTimelineModel;
66 class vogleditor_apiCallTreeItem;
67 class vogleditor_gl_state_snapshot;
68 class vogleditor_QApiCallTreeModel;
69
70 class VoglEditor : public QMainWindow
71 {
72    Q_OBJECT
73
74 public:
75    explicit VoglEditor(QWidget* parent = 0);
76    ~VoglEditor();
77
78    bool open_trace_file(vogl::dynamic_string filename);
79    void close_trace_file();
80
81 private slots:
82    void on_action_Open_triggered();
83    void on_action_Close_triggered();
84    void on_actionE_xit_triggered();
85    void on_actionExport_API_Calls_triggered();
86
87    void on_treeView_currentChanged(const QModelIndex & current, const QModelIndex & previous);
88
89    void on_treeView_clicked(const QModelIndex& index);
90
91    void playCurrentTraceFile();
92    void pauseCurrentTraceFile();
93    void trimCurrentTraceFile();
94    void stopCurrentTraceFile();
95
96    void on_stateTreeView_clicked(const QModelIndex &index);
97
98    void on_searchTextBox_textChanged(const QString &searchText);
99    void on_searchNextButton_clicked();
100    void on_searchPrevButton_clicked();
101    void on_prevSnapshotButton_clicked();
102    void on_nextSnapshotButton_clicked();
103    void on_prevDrawcallButton_clicked();
104    void on_nextDrawcallButton_clicked();
105
106    void on_program_edited(vogl_program_state* pNewProgramState);   
107
108 private:
109    Ui::VoglEditor* ui;
110
111    void onApiCallSelected(const QModelIndex &index, bool bAllowStateSnapshot);
112    bool displayTexture(GLuint64 textureHandle, bool bBringTabToFront);
113    void displayFramebuffer(GLuint64 framebufferHandle, bool bBringTabToFront);
114    bool displayShader(GLuint64 shaderHandle, bool bBringTabToFront);
115    void displayProgram(GLuint64 programHandle, bool bBringTabToFront);
116
117    // temp?
118    vogl_gl_state_snapshot *read_state_snapshot_from_trace(vogl_trace_file_reader* pTrace_reader);
119
120    void reset_tracefile_ui();
121    void reset_snapshot_ui();
122
123    void update_ui_for_snapshot(vogleditor_gl_state_snapshot *pStateSnapshot);
124    void displayMachineInfoHelper(QString prefix, const QString& sectionKeyStr, const vogl::json_value& value, QString& rMachineInfoStr);
125    void displayMachineInfo();
126    void recursive_update_snapshot_flags(vogleditor_apiCallTreeItem* pItem, bool& bFoundEditedSnapshot);
127
128    vogleditor_gl_state_snapshot* findMostRecentSnapshot_helper(vogleditor_apiCallTreeItem* pItem, vogleditor_gl_state_snapshot*& pMostRecentSnapshot, const vogleditor_gl_state_snapshot* pCurSnapshot);
129    vogleditor_gl_state_snapshot* findMostRecentSnapshot(vogleditor_apiCallTreeItem* pItem, const vogleditor_gl_state_snapshot* pCurSnapshot);
130
131    void selectApicallModelIndex(QModelIndex index, bool scrollTo, bool select);
132
133    void write_child_api_calls(vogleditor_apiCallTreeItem* pItem, FILE* pFile);
134
135    QString m_openFilename;
136    QLabel* m_statusLabel;
137    vogleditor_QFramebufferExplorer* m_framebufferExplorer;
138    vogleditor_QTextureExplorer* m_textureExplorer;
139    vogleditor_QTextureExplorer* m_renderbufferExplorer;
140    vogleditor_QProgramExplorer* m_programExplorer;
141    vogleditor_QShaderExplorer* m_shaderExplorer;
142    vogleditor_QTimelineView* m_timeline;
143
144    vogleditor_gl_state_snapshot* m_currentSnapshot;
145    vogleditor_apiCallTreeItem* m_pCurrentCallTreeItem;
146
147    QToolButton* m_pPlayButton;
148    QToolButton* m_pPauseButton;
149    QToolButton* m_pTrimButton;
150    QToolButton* m_pStopButton;
151
152    vogleditor_traceReplayer m_traceReplayer;
153    vogl_trace_file_reader* m_pTraceReader;
154    vogl::json_document m_backtraceDoc;
155    vogl::hash_map<vogl::uint32, vogl::json_node*> m_backtraceToJsonMap;
156
157    vogleditor_apiCallTimelineModel* m_pTimelineModel;
158
159    vogleditor_QApiCallTreeModel* m_pApicallTreeModel;
160
161    QModelIndexList m_searchApicallResults;
162 };
163
164 #endif // VOGLEDITOR_H