Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ConsoleApplication3.cpp : Defines the entry point for the console application.
- //
- #include "stdafx.h"
- // Includes
- #include <time.h>
- #include <d3d9.h>
- #include <d3dx9.h>
- #include <dwmapi.h>
- #include <iostream>
- // Import libraries to link with
- #pragma comment(lib, "d3d9.lib")
- #pragma comment(lib, "d3dx9.lib")
- #pragma comment(lib, "dwmapi.lib")
- #define ARGB_TRANS 0x00000000 // 100% alpha
- #define SPRITE_SIZE 128
- #define TEXTURE_PATH L"circle.png"
- // +---------+
- // | Globals |
- // +---------+
- WCHAR *g_wcpAppName = L"D3DCursor";
- INT g_iWidth = 800;
- INT g_iHeight = 600;
- MARGINS g_mgDWMMargins = { -1, -1, -1, -1 };
- IDirect3D9Ex *g_pD3D = NULL;
- IDirect3DDevice9Ex *g_pD3DDevice = NULL;
- IDirect3DVertexBuffer9 *g_pVB = NULL;
- LPD3DXSPRITE g_sprite = NULL;
- LPDIRECT3DTEXTURE9 g_circle = NULL;
- HWND hWnd = NULL;
- D3DXMATRIX Identity;
- BOOL wait = false;
- INT last_x = 0;
- INT last_y = 0;
- INT x = 0;
- INT y = 0;
- // +--------------+
- // | D3DStartup() |
- // +--------------+----------------------------------+
- // | Initialise Direct3D and perform once only tasks |
- // +-------------------------------------------------+
- HRESULT D3DStartup(HWND hWnd)
- {
- BOOL bCompOk = FALSE; // Is composition enabled?
- D3DPRESENT_PARAMETERS pp; // Presentation prefs
- DWORD msqAAQuality = 0; // Non-maskable quality
- D3DXMATRIX Ortho2D;
- // Make sure that DWM composition is enabled
- DwmIsCompositionEnabled(&bCompOk);
- if (!bCompOk) return E_FAIL;
- // Create a Direct3D object
- if (FAILED(Direct3DCreate9Ex(D3D_SDK_VERSION, &g_pD3D))) return E_FAIL;
- // Setup presentation parameters
- ZeroMemory(&pp, sizeof(pp));
- pp.Windowed = TRUE;
- pp.SwapEffect = D3DSWAPEFFECT_DISCARD; // Required for multi sampling
- pp.BackBufferFormat = D3DFMT_A8R8G8B8; // Back buffer format with alpha channel
- pp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; //Disables vsync
- // No AA
- pp.MultiSampleType = D3DMULTISAMPLE_NONE;
- // Create a Direct3D device object
- if (FAILED(g_pD3D->CreateDeviceEx(D3DADAPTER_DEFAULT,
- D3DDEVTYPE_HAL,
- hWnd,
- D3DCREATE_HARDWARE_VERTEXPROCESSING,
- &pp,
- NULL,
- &g_pD3DDevice
- ))) return E_FAIL;
- // Configure the device state
- g_pD3DDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
- g_pD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE);
- return S_OK;
- }
- // +---------------+
- // | D3DShutdown() |
- // +---------------+----------------------+
- // | Release all created Direct3D objects |
- // +--------------------------------------+
- VOID D3DShutdown(VOID)
- {
- if (g_pVB != NULL) g_pVB->Release();
- if (g_pD3DDevice != NULL) g_pD3DDevice->Release();
- if (g_pD3D != NULL) g_pD3D->Release();
- }
- // +--------------+
- // | CreateCube() |
- // +--------------+------------------------------+
- // | Populates a vertex buffer with a cube shape |
- // +---------------------------------------------+
- HRESULT InitSprites(VOID)
- {
- if (SUCCEEDED(D3DXCreateSprite(g_pD3DDevice, &g_sprite)))
- {
- // created OK
- }
- D3DXCreateTextureFromFile(g_pD3DDevice, TEXTURE_PATH, &g_circle);
- return S_OK;
- }
- // +----------+
- // | Render() |
- // +----------+-------------------------+
- // | Renders a scene to the back buffer |
- // +------------------------------------+
- VOID Render(VOID)
- {
- if (!wait)
- {
- // Sanity check
- if (g_pD3DDevice == NULL) return;
- if (g_sprite == NULL) return;
- D3DRECT clearRect;
- clearRect.x1 = last_x - (SPRITE_SIZE / 2);
- clearRect.x2 = last_x + (SPRITE_SIZE / 2);
- clearRect.y1 = last_y - (SPRITE_SIZE / 2);
- clearRect.y2 = last_y + (SPRITE_SIZE / 2);
- g_pD3DDevice->Clear(1, &clearRect, D3DCLEAR_TARGET, ARGB_TRANS, 1.0f, 0);
- // Render scene
- if (SUCCEEDED(g_pD3DDevice->BeginScene()))
- {
- D3DXMATRIX mat;
- if (SUCCEEDED(g_sprite->Begin(D3DXSPRITE_ALPHABLEND)))
- {
- D3DXMatrixTranslation(&mat, x+0.0f-(SPRITE_SIZE/2), y+0.0f-(SPRITE_SIZE/2), 0.0f);
- g_sprite->SetTransform(&mat);
- g_sprite->Draw(g_circle, NULL, NULL, NULL, 0xff000000);
- g_sprite->End();
- }
- g_pD3DDevice->EndScene();
- }
- // Update display
- g_pD3DDevice->PresentEx(NULL, NULL, NULL, NULL, NULL);
- }
- }
- // +--------------+
- // | WindowProc() |
- // +--------------+------------------+
- // | The main window message handler |
- // +---------------------------------+
- LRESULT WINAPI WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
- {
- return DefWindowProc(hWnd, uMsg, wParam, lParam);
- }
- // +-----------+
- // | WinMain() |
- // +-----------+---------+
- // | Program entry point |
- // +---------------------+
- INT WINAPI StartD3DCursorWindow(HINSTANCE hInstance, HWND hParent, int x, int y, int width, int height, bool topmost)
- {
- MSG uMsg;
- WNDCLASSEX wc = { sizeof(WNDCLASSEX), // cbSize
- NULL, // style
- WindowProc, // lpfnWndProc
- NULL, // cbClsExtra
- NULL, // cbWndExtra
- hInstance, // hInstance
- LoadIcon(NULL, IDI_APPLICATION), // hIcon
- LoadCursor(NULL, IDC_ARROW), // hCursor
- NULL, // hbrBackground
- NULL, // lpszMenuName
- g_wcpAppName, // lpszClassName
- LoadIcon(NULL, IDI_APPLICATION) };// hIconSm
- RegisterClassEx(&wc);
- g_iWidth = width;
- g_iHeight = height;
- hWnd = CreateWindowEx(WS_EX_COMPOSITED | WS_EX_LAYERED | WS_EX_TRANSPARENT, // dwExStyle
- g_wcpAppName, // lpClassName
- g_wcpAppName, // lpWindowName
- WS_POPUP, // dwStyle
- x, y, // x, y
- g_iWidth, g_iHeight, // nWidth, nHeight
- hParent, // hWndParent
- NULL, // hMenu
- hInstance, // hInstance
- NULL); // lpParam
- // Extend glass to cover whole window
- DwmExtendFrameIntoClientArea(hWnd, &g_mgDWMMargins);
- // Initialise Direct3D
- if (SUCCEEDED(D3DStartup(hWnd)))
- {
- if (SUCCEEDED(InitSprites()))
- {
- // Show the window
- ShowWindow(hWnd, SW_SHOWDEFAULT);
- UpdateWindow(hWnd);
- }
- }
- // Shutdown Direct3D
- // Exit application
- return 0;
- }
- int _tmain(int argc, _TCHAR* argv[])
- {
- StartD3DCursorWindow(GetModuleHandle(NULL),0,0,0,2560,1440,true);
- while (true)
- {
- LPPOINT point = new POINT;
- GetCursorPos(point);
- last_x = x;
- last_y = y;
- x = point->x;
- y = point->y;
- Render();
- Sleep(10);
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement