2 #include "imgui/imgui.h"
7 static void render_func(ImDrawData *ddat);
14 io = ImGui::GetIOPtr();
15 io->DisplaySize.x = win_width;
16 io->DisplaySize.y = win_height;
17 io->RenderDrawListsFn = render_func;
19 unsigned char *pixels;
21 io->Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
24 img.set_pixels(width, height, pixels, Image::FMT_RGBA);
28 io->Fonts->TexID = (void*)tex;
33 void cleanup_debug_gui()
39 void debug_gui_reshape(int x, int y)
41 io->DisplaySize.x = x;
42 io->DisplaySize.y = y;
45 bool debug_gui_key(int key, bool press, unsigned int modstate)
47 io->KeysDown[key] = press;
48 io->KeyShift = (modstate & MOD_SHIFT) != 0;
49 io->KeyCtrl = (modstate & MOD_CTRL) != 0;
50 io->KeyAlt = (modstate & MOD_ALT) != 0;
56 bool debug_gui_mbutton(int bn, bool press, int x, int y)
58 io->MouseDown[bn] = press;
65 bool debug_gui_mmotion(int x, int y)
73 static void render_func(ImDrawData *ddat)
75 glViewport(0, 0, win_width, win_height);
77 glPushAttrib(GL_ENABLE_BIT);
79 glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
80 glDisable(GL_CULL_FACE);
81 glDisable(GL_DEPTH_TEST);
82 glDisable(GL_LIGHTING);
83 glEnable(GL_SCISSOR_TEST);
84 glEnable(GL_TEXTURE_2D);
87 glMatrixMode(GL_PROJECTION);
90 glOrtho(0, win_width, win_height, 0.0, -1, 1);
92 glMatrixMode(GL_MODELVIEW);
96 for(int i=0; i<ddat->CmdListsCount; i++) {
97 ImDrawList *cmdlist = ddat->CmdLists[i];
98 ImDrawVert *vbuf = cmdlist->VtxBuffer.Data;
99 ImDrawIdx *ibuf = cmdlist->IdxBuffer.Data;
101 for(int j=0; j<cmdlist->CmdBuffer.Size; j++) {
102 ImDrawCmd *cmd = &cmdlist->CmdBuffer[j];
103 if(cmd->UserCallback) {
104 cmd->UserCallback(cmdlist, cmd);
107 bind_texture((Texture*)cmd->TextureId);
109 glScissor(cmd->ClipRect.x, win_height - cmd->ClipRect.w,
110 cmd->ClipRect.z - cmd->ClipRect.x, cmd->ClipRect.w - cmd->ClipRect.y);
112 glBindBuffer(GL_ARRAY_BUFFER, 0);
113 glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
115 glEnableClientState(GL_VERTEX_ARRAY);
116 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
117 glEnableClientState(GL_COLOR_ARRAY);
119 glVertexPointer(2, GL_FLOAT, sizeof *vbuf, &vbuf[0].pos);
120 glTexCoordPointer(2, GL_FLOAT, sizeof *vbuf, &vbuf[0].uv);
121 glColorPointer(4, GL_UNSIGNED_BYTE, sizeof *vbuf, &vbuf[0].col);
123 glDrawElements(GL_TRIANGLES, cmd->ElemCount, GL_UNSIGNED_SHORT, ibuf);
125 glDisableClientState(GL_VERTEX_ARRAY);
126 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
127 glDisableClientState(GL_COLOR_ARRAY);
129 ibuf += cmd->ElemCount;
133 glMatrixMode(GL_PROJECTION);
136 glMatrixMode(GL_MODELVIEW);