3 #include "imgui/imgui.h"
8 static void render_func(ImDrawData *ddat);
10 bool debug_gui, parent_expanded;
11 SceneNode *dbg_sel_node;
18 io = ImGui::GetIOPtr();
19 io->DisplaySize.x = win_width;
20 io->DisplaySize.y = win_height;
21 io->RenderDrawListsFn = render_func;
23 io->KeyMap[ImGuiKey_Tab] = '\t';
24 io->KeyMap[ImGuiKey_LeftArrow] = KEY_LEFT;
25 io->KeyMap[ImGuiKey_RightArrow] = KEY_RIGHT;
26 io->KeyMap[ImGuiKey_UpArrow] = KEY_UP;
27 io->KeyMap[ImGuiKey_DownArrow] = KEY_DOWN;
28 io->KeyMap[ImGuiKey_PageUp] = KEY_PGUP;
29 io->KeyMap[ImGuiKey_PageDown] = KEY_PGDOWN;
30 io->KeyMap[ImGuiKey_Home] = KEY_HOME;
31 io->KeyMap[ImGuiKey_End] = KEY_END;
32 io->KeyMap[ImGuiKey_Delete] = KEY_DEL;
33 io->KeyMap[ImGuiKey_Backspace] = '\b';
34 io->KeyMap[ImGuiKey_Enter] = '\n';
35 io->KeyMap[ImGuiKey_Escape] = 27;
36 io->KeyMap[ImGuiKey_A] = 'a';
37 io->KeyMap[ImGuiKey_C] = 'c';
38 io->KeyMap[ImGuiKey_V] = 'v';
39 io->KeyMap[ImGuiKey_X] = 'x';
40 io->KeyMap[ImGuiKey_Y] = 'y';
41 io->KeyMap[ImGuiKey_Z] = 'z';
43 unsigned char *pixels;
45 io->Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
48 img.set_pixels(width, height, pixels, Image::FMT_RGBA);
52 io->Fonts->TexID = (void*)tex;
57 void cleanup_debug_gui()
63 void debug_gui_reshape(int x, int y)
65 io->DisplaySize.x = x;
66 io->DisplaySize.y = y;
69 void debug_gui_key(int key, bool press, unsigned int modstate)
72 io->KeysDown[key] = press;
74 io->KeyShift = (modstate & MOD_SHIFT) != 0;
75 io->KeyCtrl = (modstate & MOD_CTRL) != 0;
76 io->KeyAlt = (modstate & MOD_ALT) != 0;
79 if(press && key < 256 && isprint(key)) {
80 io->AddInputCharacter(key);
84 void debug_gui_mbutton(int bn, bool press, int x, int y)
86 io->MouseDown[bn] = press;
91 void debug_gui_mmotion(int x, int y)
97 void debug_gui_wheel(int dir)
102 static void render_func(ImDrawData *ddat)
104 glViewport(0, 0, win_width, win_height);
106 glPushAttrib(GL_ENABLE_BIT);
108 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
109 glDisable(GL_CULL_FACE);
110 glDisable(GL_DEPTH_TEST);
111 glDisable(GL_LIGHTING);
112 glEnable(GL_SCISSOR_TEST);
113 glEnable(GL_TEXTURE_2D);
116 glMatrixMode(GL_PROJECTION);
119 glOrtho(0, win_width, win_height, 0.0, -1, 1);
121 glMatrixMode(GL_MODELVIEW);
125 for(int i=0; i<ddat->CmdListsCount; i++) {
126 ImDrawList *cmdlist = ddat->CmdLists[i];
127 ImDrawVert *vbuf = cmdlist->VtxBuffer.Data;
128 ImDrawIdx *ibuf = cmdlist->IdxBuffer.Data;
130 for(int j=0; j<cmdlist->CmdBuffer.Size; j++) {
131 ImDrawCmd *cmd = &cmdlist->CmdBuffer[j];
132 if(cmd->UserCallback) {
133 cmd->UserCallback(cmdlist, cmd);
136 bind_texture((Texture*)cmd->TextureId);
138 glScissor(cmd->ClipRect.x, win_height - cmd->ClipRect.w,
139 cmd->ClipRect.z - cmd->ClipRect.x, cmd->ClipRect.w - cmd->ClipRect.y);
141 glBindBuffer(GL_ARRAY_BUFFER, 0);
142 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
144 glEnableClientState(GL_VERTEX_ARRAY);
145 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
146 glEnableClientState(GL_COLOR_ARRAY);
148 glVertexPointer(2, GL_FLOAT, sizeof *vbuf, &vbuf[0].pos);
149 glTexCoordPointer(2, GL_FLOAT, sizeof *vbuf, &vbuf[0].uv);
150 glColorPointer(4, GL_UNSIGNED_BYTE, sizeof *vbuf, &vbuf[0].col);
152 if(glcaps.draw_range) {
153 int max_vidx = cmdlist->VtxBuffer.Size - 1;
154 glDrawRangeElements(GL_TRIANGLES, 0, max_vidx, cmd->ElemCount, GL_UNSIGNED_SHORT, ibuf);
156 glDrawElements(GL_TRIANGLES, cmd->ElemCount, GL_UNSIGNED_SHORT, ibuf);
159 glDisableClientState(GL_VERTEX_ARRAY);
160 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
161 glDisableClientState(GL_COLOR_ARRAY);
163 ibuf += cmd->ElemCount;
167 glMatrixMode(GL_PROJECTION);
170 glMatrixMode(GL_MODELVIEW);