Simon200111

Untitled

Aug 6th, 2025 (edited)
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.58 KB | None | 0 0
  1. #include <windows.h>
  2. #include <d3d11.h>
  3. #include <dxgi.h>
  4. #include <d3dcompiler.h>
  5.  
  6. #pragma comment(lib, "d3d11.lib")
  7. #pragma comment(lib, "d3dcompiler.lib")
  8.  
  9. LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
  10. {
  11.     return DefWindowProc(hwnd, msg, wParam, lParam);
  12. }
  13.  
  14. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
  15. {
  16.     // Hidden window
  17.     WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WindowProc, 0L, 0L,
  18.                       GetModuleHandle(NULL), NULL, NULL, NULL, NULL,
  19.                       L"VRAMKeepWindow", NULL };
  20.  
  21.     RegisterClassEx(&wc);
  22.  
  23.     HWND hwnd = CreateWindowW(L"VRAMKeepWindow", L"", WS_OVERLAPPEDWINDOW,
  24.                               0, 0, 1920, 1080, NULL, NULL, wc.hInstance, NULL);
  25.  
  26.     ShowWindow(hwnd, SW_HIDE);
  27.  
  28.     // D3D11 init
  29.     DXGI_SWAP_CHAIN_DESC sd = {};
  30.     sd.BufferCount = 1;
  31.     sd.BufferDesc.Width = 1920;
  32.     sd.BufferDesc.Height = 1080;
  33.     sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
  34.     sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
  35.     sd.OutputWindow = hwnd;
  36.     sd.SampleDesc.Count = 1;
  37.     sd.Windowed = TRUE;
  38.     sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
  39.  
  40.     ID3D11Device* device = nullptr;
  41.     ID3D11DeviceContext* context = nullptr;
  42.     IDXGISwapChain* swapchain = nullptr;
  43.     D3D_FEATURE_LEVEL featureLevel;
  44.  
  45.     if (FAILED(D3D11CreateDeviceAndSwapChain(
  46.         nullptr, D3D_DRIVER_TYPE_HARDWARE, nullptr, 0,
  47.         nullptr, 0, D3D11_SDK_VERSION, &sd, &swapchain,
  48.         &device, &featureLevel, &context)))
  49.     {
  50.         return 1;
  51.     }
  52.  
  53.     // Render target
  54.     ID3D11Texture2D* backBuffer = nullptr;
  55.     ID3D11RenderTargetView* rtv = nullptr;
  56.     swapchain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&backBuffer);
  57.     device->CreateRenderTargetView(backBuffer, nullptr, &rtv);
  58.     if (backBuffer) backBuffer->Release();
  59.  
  60.     // Fullscreen triangle
  61.     float vertices[] = {
  62.         -1.0f, -1.0f, 0, 1,
  63.          3.0f, -1.0f, 0, 1,
  64.         -1.0f,  3.0f, 0, 1
  65.     };
  66.  
  67.     D3D11_BUFFER_DESC vbDesc = {};
  68.     vbDesc.ByteWidth = sizeof(vertices);
  69.     vbDesc.Usage = D3D11_USAGE_DEFAULT;
  70.     vbDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
  71.  
  72.     D3D11_SUBRESOURCE_DATA vbData = {};
  73.     vbData.pSysMem = vertices;
  74.  
  75.     ID3D11Buffer* vertexBuffer = nullptr;
  76.     device->CreateBuffer(&vbDesc, &vbData, &vertexBuffer);
  77.  
  78.     // Input layout + vertex shader
  79.     D3D11_INPUT_ELEMENT_DESC layout[] =
  80.     {
  81.         { "POSITION", 0, DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 0,
  82.           D3D11_INPUT_PER_VERTEX_DATA, 0 }
  83.     };
  84.  
  85.     const char* vsCode =
  86.         "float4 main(float4 pos : POSITION) : SV_POSITION { return pos; }";
  87.  
  88.     ID3DBlob* vsBlob = nullptr;
  89.     D3DCompile(vsCode, strlen(vsCode), nullptr, nullptr, nullptr,
  90.                "main", "vs_5_0", 0, 0, &vsBlob, nullptr);
  91.  
  92.     ID3D11VertexShader* vertexShader = nullptr;
  93.     device->CreateVertexShader(vsBlob->GetBufferPointer(),
  94.                                vsBlob->GetBufferSize(), nullptr, &vertexShader);
  95.  
  96.     ID3D11InputLayout* inputLayout = nullptr;
  97.     device->CreateInputLayout(layout, 1,
  98.                               vsBlob->GetBufferPointer(),
  99.                               vsBlob->GetBufferSize(),
  100.                               &inputLayout);
  101.  
  102.     vsBlob->Release();
  103.  
  104.     // Pixel shader (dark color)
  105.     const char* psCode =
  106.         "float4 main() : SV_Target { return float4(0.01, 0.01, 0.01, 1.0); }";
  107.  
  108.     ID3DBlob* psBlob = nullptr;
  109.     D3DCompile(psCode, strlen(psCode), nullptr, nullptr, nullptr,
  110.                "main", "ps_5_0", 0, 0, &psBlob, nullptr);
  111.  
  112.     ID3D11PixelShader* pixelShader = nullptr;
  113.     device->CreatePixelShader(psBlob->GetBufferPointer(),
  114.                               psBlob->GetBufferSize(), nullptr, &pixelShader);
  115.  
  116.     psBlob->Release();
  117.  
  118.     // Main loop
  119.     MSG msg = {};
  120.     UINT stride = 16;
  121.     UINT offset = 0;
  122.  
  123.     while (true)
  124.     {
  125.         while (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
  126.         {
  127.             TranslateMessage(&msg);
  128.             DispatchMessage(&msg);
  129.         }
  130.  
  131.         context->OMSetRenderTargets(1, &rtv, nullptr);
  132.         context->IASetInputLayout(inputLayout);
  133.         context->IASetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
  134.         context->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
  135.         context->VSSetShader(vertexShader, nullptr, 0);
  136.         context->PSSetShader(pixelShader, nullptr, 0);
  137.         context->Draw(3, 0);
  138.  
  139.         swapchain->Present(0, 0);
  140.         Sleep(1); // Sleep(0) = maximale GPU-Last, Sleep(1) = VRAM hoch ohne 100% Load
  141.     }
  142.  
  143.     return 0;
  144. }
  145.  
  146.  
Advertisement
Add Comment
Please, Sign In to add comment