ofxImGui
ofxImGui copied to clipboard
AddFont should before ui.setup() otherwise font wont build
README.md is like this, but not work for me
void ofApp::setup()
{
m_ui.setup();
ImGuiIO * io = &ImGui::GetIO();
io->Fonts->AddFontFromFileTTF(&ofToDataPath("NotoSans.ttf")[0], 24.f);
}
Font texture create in setup()->createDeviceObjects()
bool EngineGLFW::createDeviceObjects()
{
......
unsigned char * pixels;
int width, height;
io->Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
GLuint textureid = loadTextureImage2D(pixels, width, height);
io->Fonts->TexID = (ImTextureID)(intptr_t)textureid;
io->Fonts->ClearTexData();
return true;
}
So after setup(), I can't add any font, below code work for me
ImGuiIO * io = &ImGui::GetIO();
ImFontConfig font_config; font_config.OversampleH = 1; font_config.OversampleV = 1; font_config.PixelSnapH = 1;
ImFont* f = io->Fonts->AddFontFromFileTTF("data/Deng.ttf", 18.0f, NULL, io->Fonts->GetGlyphRangesChinese());
gui.setup();
By the way, this line is important to add unicode font, or you just see white grid.
ImFontConfig font_config; font_config.OversampleH = 1; font_config.OversampleV = 1; font_config.PixelSnapH = 1;
Can you try after commenting out
io->Fonts->ClearTexData();
setup() AddFont()
comment io->Fonts->ClearTexData();
font texture still not allocate, maybe separate a method to create font texture
bool ImGui_ImplGlfwGL3_CreateFontsTexture()
Hi Guys,
I'm struggling to use a Unicode font (need it for arrows on buttons) I have this code in ofApp::setup()
// Load unicode font, has to be done before gui set up - see https://github.com/jvcleave/ofxImGui/issues/19
ImGuiIO * io = &ImGui::GetIO();
ImFontConfig font_config; font_config.OversampleH = 1; font_config.OversampleV = 1; font_config.PixelSnapH = 1;
// load Lucinda SansRegular Unicode font - file name L_10646.TTF
unicodeFont = io->Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\L_10646.ttf", 16.0f, NULL, io->Fonts->GetGlyphRangesDefault());
unsigned char * pixels;
int width, height;
io->Fonts->GetTexDataAsRGBA32(&pixels, &width, &height);
gui.setup();
ImGui::GetIO().MouseDrawCursor = false;
But I can't work out how to swap between the default font and my unicode one. I just always get the unicode one, and it doesn't look very crisp.
Then even when using the Unicode font I just get a question mark in the button from this
ImGui::Button(u8"\u2190"); // Unicode left arrow
Any advice greatly appreciated
Thanks Richard
I figured it out eventually, my code is now
// Load unicode font, has to be done before gui set up - see https://github.com/jvcleave/ofxImGui/issues/19
io = &ImGui::GetIO();
// set default font in font atlas
ImFont* font0 = io->Fonts->AddFontDefault();
// load Lucinda SansRegular Unicode font - file name L_10646.TTF
ImFontConfig font_config; font_config.OversampleH = 1; font_config.OversampleV = 1; font_config.PixelSnapH = 1;
static const ImWchar glyphRanges[] = { 0x0020, 0x266F, 0, }; // Everything
unicodeFont = io->Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\L_10646.ttf", 18.0f, &font_config, &glyphRanges[0]);
unsigned char* pixels;
int width, height;
io->Fonts->GetTexDataAsAlpha8(&pixels, &width, &height);
For anyone trying to change the font on today's master; this currently works:
//create an actual ImGui context before setting up the addon
ImGui::CreateContext();
//specify a font to use
&ImGui::GetIO().Fonts->AddFontFromFileTTF(&ofToDataPath("fonts/VeraMono.ttf")[0], 14.f);
gui.setup(); //finally setup the addon ofxImGui::Gui setup;
The trick is to create the native ImGui context before adding a font; otherwise ImGui complains about not being initalized... And if you add the font after setting up the addon, it's already too late.
Note that ofxImGui's setup() (gui.setup()) does internally call ImGui::CreateContext(); again, but it's not a problem as this second call is ignored.