SHOW:
|
|
- or go back to the newest paste.
| 1 | // ConsoleApplication3.cpp : Defines the entry point for the console application. | |
| 2 | // | |
| 3 | ||
| 4 | #include "stdafx.h" | |
| 5 | ||
| 6 | // Includes | |
| 7 | #include <time.h> | |
| 8 | #include <d3d9.h> | |
| 9 | #include <d3dx9.h> | |
| 10 | #include <dwmapi.h> | |
| 11 | ||
| 12 | #include <iostream> | |
| 13 | ||
| 14 | // Import libraries to link with | |
| 15 | #pragma comment(lib, "d3d9.lib") | |
| 16 | #pragma comment(lib, "d3dx9.lib") | |
| 17 | #pragma comment(lib, "dwmapi.lib") | |
| 18 | ||
| 19 | #define ARGB_TRANS 0x00000000 // 100% alpha | |
| 20 | #define SPRITE_SIZE 128 | |
| 21 | ||
| 22 | - | #define TEXTURE_PATH L"C:\\Users\\Simon\\Documents\\Visual Studio 2013\\Projects\\ConsoleApplication3\\x64\\Release\\circle.png" |
| 22 | + | #define TEXTURE_PATH L"circle.png" |
| 23 | ||
| 24 | // +---------+ | |
| 25 | // | Globals | | |
| 26 | // +---------+ | |
| 27 | WCHAR *g_wcpAppName = L"D3DCursor"; | |
| 28 | INT g_iWidth = 800; | |
| 29 | INT g_iHeight = 600; | |
| 30 | MARGINS g_mgDWMMargins = { -1, -1, -1, -1 };
| |
| 31 | IDirect3D9Ex *g_pD3D = NULL; | |
| 32 | IDirect3DDevice9Ex *g_pD3DDevice = NULL; | |
| 33 | IDirect3DVertexBuffer9 *g_pVB = NULL; | |
| 34 | LPD3DXSPRITE g_sprite = NULL; | |
| 35 | LPDIRECT3DTEXTURE9 g_circle = NULL; | |
| 36 | ||
| 37 | HWND hWnd = NULL; | |
| 38 | ||
| 39 | D3DXMATRIX Identity; | |
| 40 | ||
| 41 | BOOL wait = false; | |
| 42 | ||
| 43 | INT last_x = 0; | |
| 44 | INT last_y = 0; | |
| 45 | INT x = 0; | |
| 46 | INT y = 0; | |
| 47 | ||
| 48 | ||
| 49 | // +--------------+ | |
| 50 | // | D3DStartup() | | |
| 51 | // +--------------+----------------------------------+ | |
| 52 | // | Initialise Direct3D and perform once only tasks | | |
| 53 | // +-------------------------------------------------+ | |
| 54 | HRESULT D3DStartup(HWND hWnd) | |
| 55 | {
| |
| 56 | BOOL bCompOk = FALSE; // Is composition enabled? | |
| 57 | D3DPRESENT_PARAMETERS pp; // Presentation prefs | |
| 58 | DWORD msqAAQuality = 0; // Non-maskable quality | |
| 59 | ||
| 60 | D3DXMATRIX Ortho2D; | |
| 61 | ||
| 62 | // Make sure that DWM composition is enabled | |
| 63 | DwmIsCompositionEnabled(&bCompOk); | |
| 64 | if (!bCompOk) return E_FAIL; | |
| 65 | ||
| 66 | // Create a Direct3D object | |
| 67 | if (FAILED(Direct3DCreate9Ex(D3D_SDK_VERSION, &g_pD3D))) return E_FAIL; | |
| 68 | ||
| 69 | // Setup presentation parameters | |
| 70 | ZeroMemory(&pp, sizeof(pp)); | |
| 71 | pp.Windowed = TRUE; | |
| 72 | pp.SwapEffect = D3DSWAPEFFECT_DISCARD; // Required for multi sampling | |
| 73 | pp.BackBufferFormat = D3DFMT_A8R8G8B8; // Back buffer format with alpha channel | |
| 74 | pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; //Disables vsync | |
| 75 | ||
| 76 | // No AA | |
| 77 | pp.MultiSampleType = D3DMULTISAMPLE_NONE; | |
| 78 | ||
| 79 | // Create a Direct3D device object | |
| 80 | if (FAILED(g_pD3D->CreateDeviceEx(D3DADAPTER_DEFAULT, | |
| 81 | D3DDEVTYPE_HAL, | |
| 82 | hWnd, | |
| 83 | D3DCREATE_HARDWARE_VERTEXPROCESSING, | |
| 84 | &pp, | |
| 85 | NULL, | |
| 86 | &g_pD3DDevice | |
| 87 | ))) return E_FAIL; | |
| 88 | ||
| 89 | // Configure the device state | |
| 90 | ||
| 91 | g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE); | |
| 92 | ||
| 93 | g_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); | |
| 94 | ||
| 95 | return S_OK; | |
| 96 | } | |
| 97 | ||
| 98 | // +---------------+ | |
| 99 | // | D3DShutdown() | | |
| 100 | // +---------------+----------------------+ | |
| 101 | // | Release all created Direct3D objects | | |
| 102 | // +--------------------------------------+ | |
| 103 | VOID D3DShutdown(VOID) | |
| 104 | {
| |
| 105 | if (g_pVB != NULL) g_pVB->Release(); | |
| 106 | if (g_pD3DDevice != NULL) g_pD3DDevice->Release(); | |
| 107 | if (g_pD3D != NULL) g_pD3D->Release(); | |
| 108 | } | |
| 109 | ||
| 110 | // +--------------+ | |
| 111 | // | CreateCube() | | |
| 112 | // +--------------+------------------------------+ | |
| 113 | // | Populates a vertex buffer with a cube shape | | |
| 114 | // +---------------------------------------------+ | |
| 115 | HRESULT InitSprites(VOID) | |
| 116 | {
| |
| 117 | if (SUCCEEDED(D3DXCreateSprite(g_pD3DDevice, &g_sprite))) | |
| 118 | {
| |
| 119 | // created OK | |
| 120 | } | |
| 121 | ||
| 122 | D3DXCreateTextureFromFile(g_pD3DDevice, TEXTURE_PATH, &g_circle); | |
| 123 | ||
| 124 | return S_OK; | |
| 125 | } | |
| 126 | ||
| 127 | // +----------+ | |
| 128 | // | Render() | | |
| 129 | // +----------+-------------------------+ | |
| 130 | // | Renders a scene to the back buffer | | |
| 131 | // +------------------------------------+ | |
| 132 | VOID Render(VOID) | |
| 133 | {
| |
| 134 | if (!wait) | |
| 135 | {
| |
| 136 | ||
| 137 | // Sanity check | |
| 138 | if (g_pD3DDevice == NULL) return; | |
| 139 | if (g_sprite == NULL) return; | |
| 140 | ||
| 141 | D3DRECT clearRect; | |
| 142 | clearRect.x1 = last_x - (SPRITE_SIZE / 2); | |
| 143 | clearRect.x2 = last_x + (SPRITE_SIZE / 2); | |
| 144 | clearRect.y1 = last_y - (SPRITE_SIZE / 2); | |
| 145 | clearRect.y2 = last_y + (SPRITE_SIZE / 2); | |
| 146 | ||
| 147 | g_pD3DDevice->Clear(1, &clearRect, D3DCLEAR_TARGET, ARGB_TRANS, 1.0f, 0); | |
| 148 | ||
| 149 | // Render scene | |
| 150 | if (SUCCEEDED(g_pD3DDevice->BeginScene())) | |
| 151 | {
| |
| 152 | D3DXMATRIX mat; | |
| 153 | if (SUCCEEDED(g_sprite->Begin(D3DXSPRITE_ALPHABLEND))) | |
| 154 | {
| |
| 155 | D3DXMatrixTranslation(&mat, x+0.0f-(SPRITE_SIZE/2), y+0.0f-(SPRITE_SIZE/2), 0.0f); | |
| 156 | g_sprite->SetTransform(&mat); | |
| 157 | g_sprite->Draw(g_circle, NULL, NULL, NULL, 0xff000000); | |
| 158 | g_sprite->End(); | |
| 159 | } | |
| 160 | ||
| 161 | g_pD3DDevice->EndScene(); | |
| 162 | } | |
| 163 | ||
| 164 | // Update display | |
| 165 | g_pD3DDevice->PresentEx(NULL, NULL, NULL, NULL, NULL); | |
| 166 | } | |
| 167 | } | |
| 168 | ||
| 169 | // +--------------+ | |
| 170 | // | WindowProc() | | |
| 171 | // +--------------+------------------+ | |
| 172 | // | The main window message handler | | |
| 173 | // +---------------------------------+ | |
| 174 | LRESULT WINAPI WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) | |
| 175 | {
| |
| 176 | return DefWindowProc(hWnd, uMsg, wParam, lParam); | |
| 177 | } | |
| 178 | ||
| 179 | // +-----------+ | |
| 180 | // | WinMain() | | |
| 181 | // +-----------+---------+ | |
| 182 | // | Program entry point | | |
| 183 | // +---------------------+ | |
| 184 | INT WINAPI StartD3DCursorWindow(HINSTANCE hInstance, HWND hParent, int x, int y, int width, int height, bool topmost) | |
| 185 | {
| |
| 186 | MSG uMsg; | |
| 187 | WNDCLASSEX wc = { sizeof(WNDCLASSEX), // cbSize
| |
| 188 | NULL, // style | |
| 189 | WindowProc, // lpfnWndProc | |
| 190 | NULL, // cbClsExtra | |
| 191 | NULL, // cbWndExtra | |
| 192 | hInstance, // hInstance | |
| 193 | LoadIcon(NULL, IDI_APPLICATION), // hIcon | |
| 194 | LoadCursor(NULL, IDC_ARROW), // hCursor | |
| 195 | NULL, // hbrBackground | |
| 196 | NULL, // lpszMenuName | |
| 197 | g_wcpAppName, // lpszClassName | |
| 198 | LoadIcon(NULL, IDI_APPLICATION) };// hIconSm | |
| 199 | ||
| 200 | RegisterClassEx(&wc); | |
| 201 | ||
| 202 | g_iWidth = width; | |
| 203 | g_iHeight = height; | |
| 204 | ||
| 205 | hWnd = CreateWindowEx(WS_EX_COMPOSITED | WS_EX_LAYERED | WS_EX_TRANSPARENT, // dwExStyle | |
| 206 | g_wcpAppName, // lpClassName | |
| 207 | g_wcpAppName, // lpWindowName | |
| 208 | WS_POPUP, // dwStyle | |
| 209 | x, y, // x, y | |
| 210 | g_iWidth, g_iHeight, // nWidth, nHeight | |
| 211 | hParent, // hWndParent | |
| 212 | NULL, // hMenu | |
| 213 | hInstance, // hInstance | |
| 214 | NULL); // lpParam | |
| 215 | ||
| 216 | // Extend glass to cover whole window | |
| 217 | DwmExtendFrameIntoClientArea(hWnd, &g_mgDWMMargins); | |
| 218 | ||
| 219 | // Initialise Direct3D | |
| 220 | if (SUCCEEDED(D3DStartup(hWnd))) | |
| 221 | {
| |
| 222 | if (SUCCEEDED(InitSprites())) | |
| 223 | {
| |
| 224 | // Show the window | |
| 225 | ShowWindow(hWnd, SW_SHOWDEFAULT); | |
| 226 | UpdateWindow(hWnd); | |
| 227 | } | |
| 228 | } | |
| 229 | ||
| 230 | // Shutdown Direct3D | |
| 231 | ||
| 232 | // Exit application | |
| 233 | return 0; | |
| 234 | } | |
| 235 | ||
| 236 | int _tmain(int argc, _TCHAR* argv[]) | |
| 237 | {
| |
| 238 | StartD3DCursorWindow(GetModuleHandle(NULL),0,0,0,2560,1440,true); | |
| 239 | ||
| 240 | while (true) | |
| 241 | {
| |
| 242 | LPPOINT point = new POINT; | |
| 243 | GetCursorPos(point); | |
| 244 | last_x = x; | |
| 245 | last_y = y; | |
| 246 | x = point->x; | |
| 247 | y = point->y; | |
| 248 | Render(); | |
| 249 | Sleep(10); | |
| 250 | } | |
| 251 | ||
| 252 | return 0; | |
| 253 | } |