Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //msys2 mingw64: gcc -O3 -march=native -Wall -Wextra -pedantic test.cpp -o test.exe -O3 -mconsole -DUNICODE -ld3d9
- #define WINVER 0x0501
- #define _WIN32_WINNT 0x0501
- #include <windows.h>
- #include <d3d9.h>
- #include <stdio.h>
- #include <stdlib.h>
- #define WIDTH 800
- #define HEIGHT 600
- #define REFRESH_RATE 160
- int move = 0;
- int click = 0;
- int stop = 0;
- LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
- {
- switch(message) {
- case WM_CLOSE:
- DestroyWindow(hWnd);
- stop = 1;
- break;
- case WM_DESTROY:
- PostQuitMessage(0);
- stop = 1;
- break;
- case WM_INPUT: {
- UINT dwSize;
- GetRawInputData((HRAWINPUT)lParam, RID_INPUT, NULL, &dwSize, sizeof(RAWINPUTHEADER));
- LPBYTE lpb = (LPBYTE)malloc(dwSize * sizeof(BYTE)); //new BYTE[dwSize];
- if (lpb == NULL) return 0;
- GetRawInputData((HRAWINPUT)lParam, RID_INPUT, lpb, &dwSize, sizeof(RAWINPUTHEADER));
- RAWINPUT* raw = (RAWINPUT*)lpb;
- if (raw->header.dwType == RIM_TYPEMOUSE) {
- LONG x = raw->data.mouse.lLastX;
- LONG y = raw->data.mouse.lLastY;
- //if (x || y) move = 1;
- USHORT b = raw->data.mouse.usButtonFlags;
- if (b & RI_MOUSE_LEFT_BUTTON_DOWN)
- stop = 1;
- #define THRESH (0)
- if (x > THRESH)
- move = 1;
- else if (x < -THRESH)
- move = 0;
- }
- free(lpb);//delete[] lpb;
- }
- default:
- return DefWindowProc(hWnd, message, wParam, lParam);
- }
- return 0;
- }
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- HWND hWnd;
- WNDCLASSEX wc;
- MSG msg;
- UINT width, height, refresh_rate;
- sscanf(lpCmdLine, "%u %u %u", &width, &height, &refresh_rate);
- if (!width || !height || !refresh_rate) {
- printf("run from command line: test.exe <width> <height> <refresh rate>\npress enter to exit\n");
- fflush(stdout);
- getchar();
- return 0;
- }
- ZeroMemory(&wc, sizeof(WNDCLASSEX));
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = WindowProc;
- wc.hInstance = hInstance;
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.lpszClassName = L"somewindowclass";
- RegisterClassEx(&wc);
- hWnd = CreateWindowEx(0, L"somewindowclass", L"test",
- WS_EX_TOPMOST | WS_POPUP,
- 0, 0, width, height,
- NULL, NULL, hInstance, NULL);
- ShowWindow(hWnd, nCmdShow);
- LPDIRECT3D9 d3d;
- LPDIRECT3DDEVICE9 d3ddev;
- d3d = Direct3DCreate9(D3D_SDK_VERSION);
- D3DPRESENT_PARAMETERS d3dpp;
- ZeroMemory(&d3dpp, sizeof(d3dpp));
- d3dpp.Windowed = FALSE;
- d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
- d3dpp.hDeviceWindow = hWnd;
- d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8;
- d3dpp.BackBufferWidth = width;
- d3dpp.BackBufferHeight = height;
- d3dpp.FullScreen_RefreshRateInHz = refresh_rate;
- d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
- D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev);
- RAWINPUTDEVICE Rid[1];
- Rid[0].usUsagePage = 0x01;
- Rid[0].usUsage = 0x02;
- Rid[0].dwFlags = RIDEV_NOLEGACY;
- Rid[0].hwndTarget = 0;
- RegisterRawInputDevices(Rid, 1, sizeof(Rid[0]));
- SetCursor( NULL );
- d3ddev->ShowCursor( FALSE );
- int fps = 0;
- DWORD n, p;
- p = (1 + GetTickCount()/1000) * 1000;
- while(!stop) {
- while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- if(msg.message == WM_QUIT)
- stop = 1;
- d3ddev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(move * 255, move * 255, move * 255), 1.0f, 0);
- d3ddev->Present(NULL, NULL, NULL, NULL);
- //move = 0;
- //Sleep(20);
- fps++;
- if ((n=GetTickCount()) > p) {
- p = (1 + n/1000) * 1000;
- printf("%d\n", fps);
- fps = 0;
- }
- }
- d3ddev->Release();
- d3d->Release();
- return msg.wParam;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement