Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "imgui.h"
- #define TFTX 220
- #define TFTY 176
- #include "SPI.h"
- #include <TFT_22_ILI9225.h>
- const uint8_t HSPICLK = 14;
- const uint8_t HSPICS0 = 15;
- const uint8_t HSPIMISO = 12;
- const uint8_t HSPIMOSI = 13;
- const uint8_t HSPIHD = 4;
- const uint8_t HSPIWP = 2;
- const uint8_t ADC2CH1 = 0;
- const uint8_t BOOTBTN = ADC2CH1;
- const uint8_t LEDPIN = 16;
- const uint8_t TFTLED = 25;
- const uint8_t TFTRST = 26;
- const uint8_t TFTRS = 27;
- const uint8_t TFTCS = HSPICS0;
- const uint8_t TFTCLK = HSPICLK;
- const uint8_t TFTSDI = HSPIMOSI;
- TFT_22_ILI9225 tft = TFT_22_ILI9225(TFTRST, TFTRS, TFTCS, TFTSDI, TFTCLK, TFTLED, 128);
- float displayScale = 1.2f;
- typedef struct fontAtlas
- {
- unsigned char* pixels;
- int width, height;
- } fontAtlas_t;
- fontAtlas_t fonts;
- void TFTRenderFunc(ImDrawData* draw_data)
- {
- for (int n = 0; n < draw_data->CmdListsCount; n++)
- {
- ImDrawList* cmd_list = *draw_data->CmdLists;
- const ImDrawVert* vtx_buffer = cmd_list->VtxBuffer.Data;
- const ImDrawIdx* idx_buffer = cmd_list->IdxBuffer.Data;
- for (int cmd_i = 0; cmd_i < cmd_list->CmdBuffer.Size; cmd_i++)
- {
- const ImDrawCmd* pcmd = &cmd_list->CmdBuffer[cmd_i];
- if (pcmd->UserCallback)
- {
- pcmd->UserCallback(cmd_list, pcmd);
- Serial.println("User callback");
- }
- else
- {
- Serial.println("Other callback");
- Serial.println((int)pcmd->TextureId);
- //MyEngineBindTexture(pcmd->TextureId);
- Serial.print("ClipRect.x ");
- Serial.println(pcmd->ClipRect.x);
- //MyEngineScissor((int)pcmd->ClipRect.x, (int)pcmd->ClipRect.y, (int)(pcmd->ClipRect.z - pcmd->ClipRect.x), (int)(pcmd->ClipRect.w - pcmd->ClipRect.y));
- Serial.print("ElemCount ");
- Serial.println(pcmd->ElemCount);
- //MyEngineDrawIndexedTriangles(pcmd->ElemCount, sizeof(ImDrawIdx) == 2 ? GL_UNSIGNED_SHORT : GL_UNSIGNED_INT, idx_buffer, vtx_buffer);
- //for(int i = 0; i < pcmd->ElemCount/3; i++)
- for(int i = 0; i < pcmd->ElemCount; i+=3)
- {
- for(int j = 0; j < 3; j++)
- {
- Serial.println("Color ");
- Serial.println(vtx_buffer[idx_buffer[i+j]].col, HEX);;
- Serial.println("UV ");
- Serial.print(vtx_buffer[idx_buffer[i+j]].uv.x);
- Serial.print(" ");
- Serial.println(vtx_buffer[idx_buffer[i+j]].uv.y);
- }
- uint8_t alpha = ((vtx_buffer[idx_buffer[i]].col >> IM_COL32_A_SHIFT) & 0xFF +
- (vtx_buffer[idx_buffer[i+1]].col >> IM_COL32_A_SHIFT) & 0xFF +
- (vtx_buffer[idx_buffer[i+2]].col >> IM_COL32_A_SHIFT) & 0xFF)/3;
- if (alpha == 0x00) continue;
- uint8_t red = ((vtx_buffer[idx_buffer[i]].col >> IM_COL32_R_SHIFT) & 0xFF +
- (vtx_buffer[idx_buffer[i+1]].col >> IM_COL32_R_SHIFT) & 0xFF +
- (vtx_buffer[idx_buffer[i+2]].col >> IM_COL32_R_SHIFT) & 0xFF)/3;
- uint8_t green = ((vtx_buffer[idx_buffer[i]].col >> IM_COL32_G_SHIFT) & 0xFF +
- (vtx_buffer[idx_buffer[i+1]].col >> IM_COL32_G_SHIFT) & 0xFF +
- (vtx_buffer[idx_buffer[i+2]].col >> IM_COL32_G_SHIFT) & 0xFF)/3;
- uint8_t blue = ((vtx_buffer[idx_buffer[i]].col >> IM_COL32_B_SHIFT) & 0xFF +
- (vtx_buffer[idx_buffer[i+1]].col >> IM_COL32_B_SHIFT) & 0xFF +
- (vtx_buffer[idx_buffer[i+2]].col >> IM_COL32_B_SHIFT) & 0xFF)/3;
- tft.fillTriangle(
- vtx_buffer[idx_buffer[i]].pos.x * displayScale, vtx_buffer[idx_buffer[i]].pos.y * displayScale,
- vtx_buffer[idx_buffer[i+1]].pos.x * displayScale, vtx_buffer[idx_buffer[i+1]].pos.y * displayScale,
- vtx_buffer[idx_buffer[i+2]].pos.x * displayScale, vtx_buffer[idx_buffer[i+2]].pos.y * displayScale,
- tft.setColor(red, green, blue));
- }
- }
- idx_buffer += pcmd->ElemCount;
- }
- }
- }
- void setup()
- {
- Serial.begin(115200);
- tft.begin();//tftspi);
- tft.setFont(Terminal6x8);
- tft.setOrientation(3);
- digitalWrite(TFTLED, HIGH);
- ImGui::CreateContext();
- ImGuiIO& io = ImGui::GetIO();
- io.DisplaySize.x = TFTX;
- io.DisplaySize.y = TFTY;
- io.RenderDrawListsFn = TFTRenderFunc;
- //io.Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
- io.Fonts->GetTexDataAsAlpha8(&(fonts.pixels), &(fonts.width), &(fonts.height));
- //MyTexture* texture = MyEngine::CreateTextureFromMemoryPixels(pixels, width, height, TEXTURE_TYPE_RGBA)
- //io.Fonts->TexID = (void*)texture;
- }
- void loop()
- {
- ImGuiIO& io = ImGui::GetIO();
- io.DeltaTime = 1.0f/60.0f;
- //io.MousePos = mouse_pos;
- //io.MouseDown[0] = mouse_button_0;
- //io.MouseDown[1] = mouse_button_1;
- //[0.0f - 1.0f]
- io.NavFlags |= ImGuiNavFlags_EnableGamepad;
- io.NavInputs[ImGuiNavInput_Activate] = 0.0f; // activate / open / toggle / tweak value // e.g. Circle (PS4), A (Xbox), B (Switch), Space (Keyboard)
- io.NavInputs[ImGuiNavInput_Cancel] = 0.0f; // cancel / close / exit // e.g. Cross (PS4), B (Xbox), A (Switch), Escape (Keyboard)
- io.NavInputs[ImGuiNavInput_Input] = 0.0f; // text input / on-screen keyboard // e.g. Triang.(PS4), Y (Xbox), X (Switch), Return (Keyboard)
- io.NavInputs[ImGuiNavInput_Menu] = 0.0f; // tap: toggle menu / hold: focus, move, resize // e.g. Square (PS4), X (Xbox), Y (Switch), Alt (Keyboard)
- io.NavInputs[ImGuiNavInput_DpadLeft] = 0.0f; // move / tweak / resize window (w/ PadMenu) // e.g. D-pad Left/Right/Up/Down (Gamepads), Arrow keys (Keyboard)
- io.NavInputs[ImGuiNavInput_DpadRight] = 0.0f;
- io.NavInputs[ImGuiNavInput_DpadUp] = 0.0f;
- io.NavInputs[ImGuiNavInput_DpadDown] = 0.0f;
- io.NavInputs[ImGuiNavInput_TweakSlow] = 0.0f; // slower tweaks // e.g. L1 or L2 (PS4), LB or LT (Xbox), L or ZL (Switch)
- io.NavInputs[ImGuiNavInput_TweakFast] = 0.0f; // faster tweaks // e.g. R1 or R2 (PS4), RB or RT (Xbox), R or ZL (Switch)
- ImGui::NewFrame();
- static float f = 0.0f;
- ImGui::Text("Hello, world!");
- ImGui::SliderFloat("float", &f, 0.0f, 1.0f);
- ImGui::Text("Application average %.3f ms/frame (%.1f FPS)", 1000.0f / io.Framerate, io.Framerate);
- tft.clear();
- ImGui::Render();
- //SwapBuffers();
- Serial.print("Cool ");
- Serial.println(f);
- delay(1000);
- displayScale += 0.1f;
- if (displayScale > 1.5f) displayScale = 0.3f;
- }
Add Comment
Please, Sign In to add comment