お世話になっております。
現在DxLibにImGuiを組み込んで使用しているのですが、
DrawStringの描画結果が意図した描画順を無視し、ImGuiよりも上に表示されてしまう問題が発生しております。
最小構成を作成し確認しましたが依然として再現され、解決策が見つからず困っております。
お力添えいただけますと幸いです。
よろしくお願いします。
#include <windows.h>
#include <DxLib.h>
#include <ImGui/Backends/imgui_impl_win32.h>
#include <ImGui/Backends/imgui_impl_dx11.h>
ID3D11Device* g_pd3dDevice = nullptr;
ID3D11DeviceContext* g_pd3dDeviceContext = nullptr;
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
// ImGuiにプロシージャの情報を流す
LRESULT CALLBACK WndProc( HWND hWnd, UINT msg, WPARAM wp, LPARAM lp ){
if( ImGui_ImplWin32_WndProcHandler( hWnd, msg, wp, lp ) ){
return true;
}
return 0;
}
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
// ウィンドウモードで描画
ChangeWindowMode( TRUE );
SetWindowStyleMode( 10 );
// Dxライブラリ初期化処理
if( DxLib_Init() == -1 ){
return false;
}
// ImGuiの初期化
ImGui::CreateContext();
g_pd3dDevice = (ID3D11Device*)( GetUseDirect3D11Device() );
g_pd3dDeviceContext = (ID3D11DeviceContext*)GetUseDirect3D11DeviceContext();
ImGui_ImplWin32_Init( GetMainWindowHandle() );
ImGui_ImplDX11_Init( g_pd3dDevice, g_pd3dDeviceContext );
SetHookWinProc( WndProc );
ImGui::GetIO().Fonts->AddFontFromFileTTF( "c:/Windows/Fonts/meiryo.ttc", 18.0f, NULL, ImGui::GetIO().Fonts->GetGlyphRangesJapanese() );
int handle = LoadGraph( "TestImg.png" );
while( 1 ){
if( ProcessMessage() == -1 ){
break;
}
// 描画準備
SetDrawScreen( DX_SCREEN_BACK );
SetDrawAreaFull();
ClearDrawScreen();
// @正常に描画される
DrawBox( 40, 20, 70, 60, 0xff0000ff, TRUE );
// A正常に描画される
DrawGraph( 40, 50, handle, TRUE );
// B※ImGuiよりも上に来てしまう
DrawString( 40, 80, "hello", 0xffff0000 );
// ImGuiの描画 --->
ImGui_ImplDX11_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
if( ImGui::Begin( "window" ) ){
ImGui::Text( "hoge" );
}
ImGui::End();
ImGui::Render();
ImGui_ImplDX11_RenderDrawData( ImGui::GetDrawData() );
// <---
// 表示
ScreenFlip();
}
ImGui_ImplDX11_Shutdown();
ImGui_ImplWin32_Shutdown();
ImGui::DestroyContext();
// Dxライブラリ使用の終了処理
DxLib_End();
return 0;
}