3 #include "imgui/imgui.h"
8 static void render_func(ImDrawData *ddat);
10 bool debug_gui, parent_expanded;
17 io = ImGui::GetIOPtr();
18 io->DisplaySize.x = win_width;
19 io->DisplaySize.y = win_height;
20 io->RenderDrawListsFn = render_func;
22 io->KeyMap[ImGuiKey_Tab] = '\t';
23 io->KeyMap[ImGuiKey_LeftArrow] = KEY_LEFT;
24 io->KeyMap[ImGuiKey_RightArrow] = KEY_RIGHT;
25 io->KeyMap[ImGuiKey_UpArrow] = KEY_UP;
26 io->KeyMap[ImGuiKey_DownArrow] = KEY_DOWN;
27 io->KeyMap[ImGuiKey_PageUp] = KEY_PGUP;
28 io->KeyMap[ImGuiKey_PageDown] = KEY_PGDOWN;
29 io->KeyMap[ImGuiKey_Home] = KEY_HOME;
30 io->KeyMap[ImGuiKey_End] = KEY_END;
31 io->KeyMap[ImGuiKey_Delete] = KEY_DEL;
32 io->KeyMap[ImGuiKey_Backspace] = '\b';
33 io->KeyMap[ImGuiKey_Enter] = '\n';
34 io->KeyMap[ImGuiKey_Escape] = 27;
35 io->KeyMap[ImGuiKey_A] = 'a';
36 io->KeyMap[ImGuiKey_C] = 'c';
37 io->KeyMap[ImGuiKey_V] = 'v';
38 io->KeyMap[ImGuiKey_X] = 'x';
39 io->KeyMap[ImGuiKey_Y] = 'y';
40 io->KeyMap[ImGuiKey_Z] = 'z';
42 unsigned char *pixels;
44 io->Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
47 img.set_pixels(width, height, pixels, Image::FMT_RGBA);
51 io->Fonts->TexID = (void*)tex;
56 void cleanup_debug_gui()
62 void debug_gui_reshape(int x, int y)
64 io->DisplaySize.x = x;
65 io->DisplaySize.y = y;
68 void debug_gui_key(int key, bool press, unsigned int modstate)
71 io->KeysDown[key] = press;
73 io->KeyShift = (modstate & MOD_SHIFT) != 0;
74 io->KeyCtrl = (modstate & MOD_CTRL) != 0;
75 io->KeyAlt = (modstate & MOD_ALT) != 0;
78 if(press && key < 256 && isprint(key)) {
79 io->AddInputCharacter(key);
83 void debug_gui_mbutton(int bn, bool press, int x, int y)
85 io->MouseDown[bn] = press;
90 void debug_gui_mmotion(int x, int y)
96 void debug_gui_wheel(int dir)
101 static void render_func(ImDrawData *ddat)
103 glViewport(0, 0, win_width, win_height);
105 glPushAttrib(GL_ENABLE_BIT);
107 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
108 glDisable(GL_CULL_FACE);
109 glDisable(GL_DEPTH_TEST);
110 glDisable(GL_LIGHTING);
111 glEnable(GL_SCISSOR_TEST);
112 glEnable(GL_TEXTURE_2D);
115 glMatrixMode(GL_PROJECTION);
118 glOrtho(0, win_width, win_height, 0.0, -1, 1);
120 glMatrixMode(GL_MODELVIEW);
124 for(int i=0; i<ddat->CmdListsCount; i++) {
125 ImDrawList *cmdlist = ddat->CmdLists[i];
126 ImDrawVert *vbuf = cmdlist->VtxBuffer.Data;
127 ImDrawIdx *ibuf = cmdlist->IdxBuffer.Data;
129 for(int j=0; j<cmdlist->CmdBuffer.Size; j++) {
130 ImDrawCmd *cmd = &cmdlist->CmdBuffer[j];
131 if(cmd->UserCallback) {
132 cmd->UserCallback(cmdlist, cmd);
135 bind_texture((Texture*)cmd->TextureId);
137 glScissor(cmd->ClipRect.x, win_height - cmd->ClipRect.w,
138 cmd->ClipRect.z - cmd->ClipRect.x, cmd->ClipRect.w - cmd->ClipRect.y);
140 glBindBuffer(GL_ARRAY_BUFFER, 0);
141 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
143 glEnableClientState(GL_VERTEX_ARRAY);
144 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
145 glEnableClientState(GL_COLOR_ARRAY);
147 glVertexPointer(2, GL_FLOAT, sizeof *vbuf, &vbuf[0].pos);
148 glTexCoordPointer(2, GL_FLOAT, sizeof *vbuf, &vbuf[0].uv);
149 glColorPointer(4, GL_UNSIGNED_BYTE, sizeof *vbuf, &vbuf[0].col);
151 glDrawElements(GL_TRIANGLES, cmd->ElemCount, GL_UNSIGNED_SHORT, ibuf);
153 glDisableClientState(GL_VERTEX_ARRAY);
154 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
155 glDisableClientState(GL_COLOR_ARRAY);
157 ibuf += cmd->ElemCount;
161 glMatrixMode(GL_PROJECTION);
164 glMatrixMode(GL_MODELVIEW);