@ -29,14 +29,8 @@
# include <d3d10_1.h>
# include <d3d10_1.h>
# include <d3d10.h>
# include <d3d10.h>
# include <d3dcompiler.h>
# include <d3dcompiler.h>
# define DIRECTINPUT_VERSION 0x0800
# include <dinput.h>
// Data
// Data
static INT64 g_Time = 0 ;
static INT64 g_TicksPerSecond = 0 ;
static HWND g_hWnd = 0 ;
static ID3D10Device * g_pd3dDevice = NULL ;
static ID3D10Device * g_pd3dDevice = NULL ;
static ID3D10Buffer * g_pVB = NULL ;
static ID3D10Buffer * g_pVB = NULL ;
static ID3D10Buffer * g_pIB = NULL ;
static ID3D10Buffer * g_pIB = NULL ;
@ -116,11 +110,11 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data)
if ( g_pVertexConstantBuffer - > Map ( D3D10_MAP_WRITE_DISCARD , 0 , & mapped_resource ) ! = S_OK )
if ( g_pVertexConstantBuffer - > Map ( D3D10_MAP_WRITE_DISCARD , 0 , & mapped_resource ) ! = S_OK )
return ;
return ;
VERTEX_CONSTANT_BUFFER * constant_buffer = ( VERTEX_CONSTANT_BUFFER * ) mapped_resource ;
VERTEX_CONSTANT_BUFFER * constant_buffer = ( VERTEX_CONSTANT_BUFFER * ) mapped_resource ;
const float L = 0.0f ;
float L = 0.0f ;
const float R = ImGui : : GetIO ( ) . DisplaySize . x ;
float R = ImGui : : GetIO ( ) . DisplaySize . x ;
const float B = ImGui : : GetIO ( ) . DisplaySize . y ;
float B = ImGui : : GetIO ( ) . DisplaySize . y ;
const float T = 0.0f ;
float T = 0.0f ;
const float mvp [ 4 ] [ 4 ] =
float mvp [ 4 ] [ 4 ] =
{
{
{ 2.0f / ( R - L ) , 0.0f , 0.0f , 0.0f } ,
{ 2.0f / ( R - L ) , 0.0f , 0.0f , 0.0f } ,
{ 0.0f , 2.0f / ( T - B ) , 0.0f , 0.0f } ,
{ 0.0f , 2.0f / ( T - B ) , 0.0f , 0.0f } ,
@ -240,86 +234,15 @@ void ImGui_ImplDX10_RenderDrawData(ImDrawData* draw_data)
ctx - > IASetInputLayout ( old . InputLayout ) ; if ( old . InputLayout ) old . InputLayout - > Release ( ) ;
ctx - > IASetInputLayout ( old . InputLayout ) ; if ( old . InputLayout ) old . InputLayout - > Release ( ) ;
}
}
// Process Win32 mouse/keyboard inputs.
// You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs.
// - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application.
// - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application.
// Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags.
// PS: In this Win32 handler, we use the capture API (GetCapture/SetCapture/ReleaseCapture) to be able to read mouse coordinations when dragging mouse outside of our window bounds.
// PS: We treat DBLCLK messages as regular mouse down messages, so this code will work on windows classes that have the CS_DBLCLKS flag set. Our own example app code doesn't set this flag.
IMGUI_API LRESULT ImGui_ImplWin32_WndProcHandler ( HWND hwnd , UINT msg , WPARAM wParam , LPARAM lParam )
{
if ( ImGui : : GetCurrentContext ( ) = = NULL )
return 0 ;
ImGuiIO & io = ImGui : : GetIO ( ) ;
switch ( msg )
{
case WM_LBUTTONDOWN : case WM_LBUTTONDBLCLK :
case WM_RBUTTONDOWN : case WM_RBUTTONDBLCLK :
case WM_MBUTTONDOWN : case WM_MBUTTONDBLCLK :
{
int button = 0 ;
if ( msg = = WM_LBUTTONDOWN | | msg = = WM_LBUTTONDBLCLK ) button = 0 ;
if ( msg = = WM_RBUTTONDOWN | | msg = = WM_RBUTTONDBLCLK ) button = 1 ;
if ( msg = = WM_MBUTTONDOWN | | msg = = WM_MBUTTONDBLCLK ) button = 2 ;
if ( ! ImGui : : IsAnyMouseDown ( ) & & : : GetCapture ( ) = = NULL )
: : SetCapture ( hwnd ) ;
io . MouseDown [ button ] = true ;
return 0 ;
}
case WM_LBUTTONUP :
case WM_RBUTTONUP :
case WM_MBUTTONUP :
{
int button = 0 ;
if ( msg = = WM_LBUTTONUP ) button = 0 ;
if ( msg = = WM_RBUTTONUP ) button = 1 ;
if ( msg = = WM_MBUTTONUP ) button = 2 ;
io . MouseDown [ button ] = false ;
if ( ! ImGui : : IsAnyMouseDown ( ) & & : : GetCapture ( ) = = hwnd )
: : ReleaseCapture ( ) ;
return 0 ;
}
case WM_MOUSEWHEEL :
io . MouseWheel + = GET_WHEEL_DELTA_WPARAM ( wParam ) > 0 ? + 1.0f : - 1.0f ;
return 0 ;
case WM_MOUSEHWHEEL :
io . MouseWheelH + = GET_WHEEL_DELTA_WPARAM ( wParam ) > 0 ? + 1.0f : - 1.0f ;
return 0 ;
case WM_MOUSEMOVE :
io . MousePos . x = ( signed short ) ( lParam ) ;
io . MousePos . y = ( signed short ) ( lParam > > 16 ) ;
return 0 ;
case WM_KEYDOWN :
case WM_SYSKEYDOWN :
if ( wParam < 256 )
io . KeysDown [ wParam ] = 1 ;
return 0 ;
case WM_KEYUP :
case WM_SYSKEYUP :
if ( wParam < 256 )
io . KeysDown [ wParam ] = 0 ;
return 0 ;
case WM_CHAR :
// You can also use ToAscii()+GetKeyboardState() to retrieve characters.
if ( wParam > 0 & & wParam < 0x10000 )
io . AddInputCharacter ( ( unsigned short ) wParam ) ;
return 0 ;
}
return 0 ;
}
static void ImGui_ImplDX10_CreateFontsTexture ( )
static void ImGui_ImplDX10_CreateFontsTexture ( )
{
{
// Build texture atlas
ImGuiIO & io = ImGui : : GetIO ( ) ;
ImGuiIO & io = ImGui : : GetIO ( ) ;
// Build
unsigned char * pixels ;
unsigned char * pixels ;
int width , height ;
int width , height ;
io . Fonts - > GetTexDataAsRGBA32 ( & pixels , & width , & height ) ;
io . Fonts - > GetTexDataAsRGBA32 ( & pixels , & width , & height ) ;
// Create DX10 texture
// Upload texture to graphics system
{
{
D3D10_TEXTURE2D_DESC desc ;
D3D10_TEXTURE2D_DESC desc ;
ZeroMemory ( & desc , sizeof ( desc ) ) ;
ZeroMemory ( & desc , sizeof ( desc ) ) ;
@ -368,10 +291,6 @@ static void ImGui_ImplDX10_CreateFontsTexture()
desc . MaxLOD = 0.f ;
desc . MaxLOD = 0.f ;
g_pd3dDevice - > CreateSamplerState ( & desc , & g_pFontSampler ) ;
g_pd3dDevice - > CreateSamplerState ( & desc , & g_pFontSampler ) ;
}
}
// Cleanup (don't clear the input data if you want to append new fonts later)
io . Fonts - > ClearInputData ( ) ;
io . Fonts - > ClearTexData ( ) ;
}
}
bool ImGui_ImplDX10_CreateDeviceObjects ( )
bool ImGui_ImplDX10_CreateDeviceObjects ( )
@ -537,41 +456,9 @@ void ImGui_ImplDX10_InvalidateDeviceObjects()
if ( g_pVertexShaderBlob ) { g_pVertexShaderBlob - > Release ( ) ; g_pVertexShaderBlob = NULL ; }
if ( g_pVertexShaderBlob ) { g_pVertexShaderBlob - > Release ( ) ; g_pVertexShaderBlob = NULL ; }
}
}
bool ImGui_ImplDX10_Init ( void * hwnd , ID3D10Device * device )
bool ImGui_ImplDX10_Init ( ID3D10Device * device )
{
{
g_hWnd = ( HWND ) hwnd ;
g_pd3dDevice = device ;
g_pd3dDevice = device ;
if ( ! QueryPerformanceFrequency ( ( LARGE_INTEGER * ) & g_TicksPerSecond ) )
return false ;
if ( ! QueryPerformanceCounter ( ( LARGE_INTEGER * ) & g_Time ) )
return false ;
ImGuiIO & io = ImGui : : GetIO ( ) ;
io . KeyMap [ ImGuiKey_Tab ] = VK_TAB ; // Keyboard mapping. ImGui will use those indices to peek into the io.KeyDown[] array that we will update during the application lifetime.
io . KeyMap [ ImGuiKey_LeftArrow ] = VK_LEFT ;
io . KeyMap [ ImGuiKey_RightArrow ] = VK_RIGHT ;
io . KeyMap [ ImGuiKey_UpArrow ] = VK_UP ;
io . KeyMap [ ImGuiKey_DownArrow ] = VK_DOWN ;
io . KeyMap [ ImGuiKey_PageUp ] = VK_PRIOR ;
io . KeyMap [ ImGuiKey_PageDown ] = VK_NEXT ;
io . KeyMap [ ImGuiKey_Home ] = VK_HOME ;
io . KeyMap [ ImGuiKey_End ] = VK_END ;
io . KeyMap [ ImGuiKey_Insert ] = VK_INSERT ;
io . KeyMap [ ImGuiKey_Delete ] = VK_DELETE ;
io . KeyMap [ ImGuiKey_Backspace ] = VK_BACK ;
io . KeyMap [ ImGuiKey_Space ] = VK_SPACE ;
io . KeyMap [ ImGuiKey_Enter ] = VK_RETURN ;
io . KeyMap [ ImGuiKey_Escape ] = VK_ESCAPE ;
io . KeyMap [ ImGuiKey_A ] = ' A ' ;
io . KeyMap [ ImGuiKey_C ] = ' C ' ;
io . KeyMap [ ImGuiKey_V ] = ' V ' ;
io . KeyMap [ ImGuiKey_X ] = ' X ' ;
io . KeyMap [ ImGuiKey_Y ] = ' Y ' ;
io . KeyMap [ ImGuiKey_Z ] = ' Z ' ;
io . ImeWindowHandle = g_hWnd ;
return true ;
return true ;
}
}
@ -579,49 +466,10 @@ void ImGui_ImplDX10_Shutdown()
{
{
ImGui_ImplDX10_InvalidateDeviceObjects ( ) ;
ImGui_ImplDX10_InvalidateDeviceObjects ( ) ;
g_pd3dDevice = NULL ;
g_pd3dDevice = NULL ;
g_hWnd = ( HWND ) 0 ;
}
}
void ImGui_ImplDX10_NewFrame ( )
void ImGui_ImplDX10_NewFrame ( )
{
{
if ( ! g_pFontSampler )
if ( ! g_pFontSampler )
ImGui_ImplDX10_CreateDeviceObjects ( ) ;
ImGui_ImplDX10_CreateDeviceObjects ( ) ;
ImGuiIO & io = ImGui : : GetIO ( ) ;
// Setup display size (every frame to accommodate for window resizing)
RECT rect ;
GetClientRect ( g_hWnd , & rect ) ;
io . DisplaySize = ImVec2 ( ( float ) ( rect . right - rect . left ) , ( float ) ( rect . bottom - rect . top ) ) ;
// Setup time step
INT64 current_time ;
QueryPerformanceCounter ( ( LARGE_INTEGER * ) & current_time ) ;
io . DeltaTime = ( float ) ( current_time - g_Time ) / g_TicksPerSecond ;
g_Time = current_time ;
// Read keyboard modifiers inputs
io . KeyCtrl = ( GetKeyState ( VK_CONTROL ) & 0x8000 ) ! = 0 ;
io . KeyShift = ( GetKeyState ( VK_SHIFT ) & 0x8000 ) ! = 0 ;
io . KeyAlt = ( GetKeyState ( VK_MENU ) & 0x8000 ) ! = 0 ;
io . KeySuper = false ;
// io.KeysDown : filled by WM_KEYDOWN/WM_KEYUP events
// io.MousePos : filled by WM_MOUSEMOVE events
// io.MouseDown : filled by WM_*BUTTON* events
// io.MouseWheel : filled by WM_MOUSEWHEEL events
// Set OS mouse position if requested last frame by io.WantMoveMouse flag (used when io.NavMovesTrue is enabled by user and using directional navigation)
if ( io . WantMoveMouse )
{
POINT pos = { ( int ) io . MousePos . x , ( int ) io . MousePos . y } ;
ClientToScreen ( g_hWnd , & pos ) ;
SetCursorPos ( pos . x , pos . y ) ;
}
// Hide OS mouse cursor if ImGui is drawing it
if ( io . MouseDrawCursor )
SetCursor ( NULL ) ;
// Start the frame. This call will update the io.WantCaptureMouse, io.WantCaptureKeyboard flag that you can use to dispatch inputs (or not) to your application.
ImGui : : NewFrame ( ) ;
}
}