Simon200111

Untitled

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