Advertisement
Guest User

Untitled

a guest
May 4th, 2016
49
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.  
  2. #include <windows.h>
  3. #include <windowsx.h>
  4. #include <xnamath.h>
  5. #include <d3d11.h>
  6. #include <d3dx11.h>
  7. #include <d3dx10.h>
  8.  
  9. #pragma comment (lib, "d3dx10.lib")
  10. #pragma comment (lib, "d3d11.lib")
  11. #pragma comment (lib, "d3dx11.lib")
  12.  
  13. #define SCREEN_WIDTH 1280
  14. #define SCREEN_HEIGHT 720
  15.  
  16. struct Vertex
  17. {
  18.     Vertex(){}
  19.     Vertex(float x, float y, float z) : pos(x, y, z){}
  20.     XMFLOAT3 pos;
  21.     //D3DXCOLOR color;
  22. };
  23.  
  24. D3D11_INPUT_ELEMENT_DESC layout[] =
  25. {
  26.     { "POSITION",0, DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0 },
  27.     //{ "COLOR",0,DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }
  28. };
  29. UINT numElements = ARRAYSIZE(layout);
  30.  
  31. //GLOBALS DX11
  32. IDXGISwapChain* SwapChain;
  33. ID3D11Device* d3d11Device;
  34. ID3D11DeviceContext* d3d11DevCon;
  35. ID3D11RenderTargetView* renderTargetView;
  36.  
  37. ID3D11Buffer* triangleVertBuffer;
  38. ID3D11VertexShader* VS;
  39. ID3D11PixelShader* PS;
  40. ID3D10Blob* VS_Buffer;
  41. ID3D10Blob* PS_Buffer;
  42. ID3D11InputLayout* vertLayout;
  43.  
  44. //window handler
  45. HWND hWnd;
  46. HRESULT hr;
  47.  
  48. //FORWARDINGS
  49. bool InitDX11(HINSTANCE hInstance);
  50. void CleanD3D(void);
  51. bool InitScene();
  52. void Update();
  53. void Draw();
  54. bool InitWindow(HINSTANCE hInstance, int ShowWnd, int width, int height, bool windowed);
  55. int messageloop();
  56. LRESULT CALLBACK WindowProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam);
  57.  
  58. //MAIN
  59. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
  60. {
  61.     //init window
  62.     InitWindow(hInstance, nCmdShow, (int)SCREEN_WIDTH, (int)SCREEN_HEIGHT, true);
  63.     //init DirectX11
  64.     InitDX11(hInstance);
  65.     //Init Scene
  66.     InitScene();
  67.     //main loop
  68.     messageloop();
  69.     //aufräumen
  70.     CleanD3D();
  71.  
  72.     return 0;
  73.  
  74. }
  75. bool InitWindow(HINSTANCE hInstance, int ShowWnd, int width, int height, bool windowed)
  76. {
  77.  
  78.  
  79.     //struct for information for window class
  80.     WNDCLASSEX wc;
  81.  
  82.     ZeroMemory(&wc, sizeof(WNDCLASSEX));
  83.  
  84.     wc.cbSize = sizeof(WNDCLASSEX);
  85.     wc.style = CS_HREDRAW | CS_VREDRAW;
  86.     wc.lpfnWndProc = WindowProc;
  87.     wc.cbClsExtra = NULL;
  88.     wc.cbWndExtra = NULL;
  89.     wc.hInstance = hInstance;
  90.     wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  91.     wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+2);
  92.     wc.lpszClassName = L"DxGPD415";
  93.  
  94.     RegisterClassEx(&wc);
  95.  
  96.     hWnd = CreateWindowEx(NULL,
  97.         L"DxGPD415",
  98.         L"DirectX for GPD415",
  99.         WS_EX_TOPMOST | WS_POPUP,
  100.         200, 200, SCREEN_WIDTH, SCREEN_HEIGHT,
  101.         NULL, NULL, hInstance, NULL);
  102.  
  103.     ShowWindow(hWnd, ShowWnd);
  104.     UpdateWindow(hWnd);
  105.  
  106.     return true;
  107. }
  108.  
  109. bool InitDX11(HINSTANCE hInstance)
  110. {
  111.     DXGI_MODE_DESC bufferDesc;
  112.     ZeroMemory(&bufferDesc, sizeof(DXGI_MODE_DESC));
  113.  
  114.     bufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
  115.     bufferDesc.Height = (int)SCREEN_HEIGHT;
  116.     bufferDesc.Width = (int)SCREEN_WIDTH;
  117.     bufferDesc.RefreshRate.Numerator = 60;
  118.     bufferDesc.RefreshRate.Denominator = 1;
  119.     bufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
  120.     bufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
  121.  
  122.     DXGI_SWAP_CHAIN_DESC swapChainDesc;
  123.     ZeroMemory(&swapChainDesc, sizeof(DXGI_SWAP_CHAIN_DESC));
  124.  
  125.     swapChainDesc.BufferCount = 1;
  126.     swapChainDesc.SampleDesc.Count = 1;
  127.     swapChainDesc.SampleDesc.Quality = 0;
  128.     swapChainDesc.BufferDesc = bufferDesc;
  129.     swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
  130.     swapChainDesc.OutputWindow = hWnd;
  131.     swapChainDesc.Windowed = TRUE;
  132.     swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
  133.  
  134.     D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, NULL, NULL, NULL,
  135.         D3D11_SDK_VERSION, &swapChainDesc, &SwapChain, &d3d11Device, NULL, &d3d11DevCon);
  136.  
  137.     //create backbuffer
  138.     ID3D11Texture2D* BackBuffer;
  139.     SwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&BackBuffer);
  140.  
  141.     //create renderTarget
  142.     d3d11Device->CreateRenderTargetView(BackBuffer, NULL, &renderTargetView);
  143.  
  144.     //set Rendertarget
  145.     d3d11DevCon->OMSetRenderTargets(1, &renderTargetView, NULL);
  146.  
  147.     return true;
  148.  
  149.  
  150. }
  151.  
  152.  
  153. bool InitScene()
  154. {
  155.     //COmpile Shaders
  156.     hr = D3DX11CompileFromFile(L"Effects.fx", 0, 0, "VS", "vs_4_0", 0, 0, 0, &VS_Buffer, 0, 0);
  157.     hr = D3DX11CompileFromFile(L"Effects.fx", 0, 0, "PS", "ps_4_0", 0, 0, 0, &PS_Buffer, 0, 0);
  158.     //Create Shader
  159.     hr = d3d11Device->CreateVertexShader(VS_Buffer->GetBufferPointer(), VS_Buffer->GetBufferSize(),
  160.         NULL, &VS);
  161.     hr = d3d11Device->CreatePixelShader(PS_Buffer->GetBufferPointer(), PS_Buffer->GetBufferSize(),
  162.         NULL, &PS);
  163.     //Set VS and PS
  164.     d3d11DevCon->VSSetShader(VS, 0, 0);
  165.     d3d11DevCon->PSSetShader(PS, 0, 0);
  166.     // Create VB
  167.     Vertex v[] = {
  168.         Vertex(0.0f, 0.5f, 0.5f),
  169.         Vertex(0.5f, -0.5f, 0.5f),
  170.         Vertex(-0.5f, -0.5f, 0.5f),
  171.     };
  172.  
  173.     D3D11_BUFFER_DESC vertexBufferDesc;
  174.     ZeroMemory(&vertexBufferDesc, sizeof(D3D11_BUFFER_DESC));
  175.  
  176.     vertexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
  177.     vertexBufferDesc.ByteWidth = sizeof(Vertex)* 3;    
  178.     vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
  179.     vertexBufferDesc.CPUAccessFlags = 0;
  180.     vertexBufferDesc.MiscFlags = 0;
  181.  
  182.     D3D11_SUBRESOURCE_DATA vertexBufferData;
  183.     ZeroMemory(&vertexBufferData, sizeof(D3D11_SUBRESOURCE_DATA));
  184.  
  185.     vertexBufferData.pSysMem = v;
  186.     hr = d3d11Device->CreateBuffer(&vertexBufferDesc, &vertexBufferData, &triangleVertBuffer);
  187.  
  188.     //set the buffer
  189.     UINT stride = sizeof(Vertex);
  190.     UINT offset = 0;
  191.     d3d11DevCon->IASetVertexBuffers(0, 1, &triangleVertBuffer, &stride, &offset);
  192.  
  193.     d3d11Device->CreateInputLayout(layout, numElements, VS_Buffer->GetBufferPointer(),
  194.         VS_Buffer->GetBufferSize(), &vertLayout);
  195.  
  196.     d3d11DevCon->IASetInputLayout(vertLayout);
  197.     d3d11DevCon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
  198.  
  199.     //create ViewPort
  200.     D3D11_VIEWPORT viewport;
  201.     ZeroMemory(&viewport, sizeof(D3D11_VIEWPORT));
  202.  
  203.     viewport.TopLeftX = 0;
  204.     viewport.TopLeftY = 0;
  205.     viewport.Width = (FLOAT)SCREEN_WIDTH;
  206.     viewport.Height = (FLOAT)SCREEN_HEIGHT;
  207.  
  208.     //SET viewport
  209.     d3d11DevCon->RSSetViewports(1, &viewport);
  210.  
  211.  
  212.     return true;
  213. }
  214.  
  215. int messageloop()
  216. {
  217.     MSG msg;
  218.     ZeroMemory(&msg, sizeof(MSG));
  219.  
  220.  
  221.     while (TRUE)
  222.     {
  223.         while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  224.         {
  225.             TranslateMessage(&msg);
  226.             DispatchMessage(&msg);
  227.         }
  228.  
  229.         if (msg.message == WM_QUIT) break;
  230.  
  231.         Update();
  232.         Draw();
  233.     }
  234.     return msg.wParam;
  235. }
  236.  
  237. void Update()
  238. {
  239.  
  240. }
  241. void Draw()
  242. {
  243.     //clear backbuffer
  244.     float bgColor[4] = { (0.0f, 0.0f, 0.0f, 0.0f) };
  245.     d3d11DevCon->ClearRenderTargetView(renderTargetView, bgColor);
  246.  
  247.     //DRAWEN!!!!
  248.     d3d11DevCon->Draw(3, 0);
  249.  
  250.     //present BackBuffer to screen
  251.     SwapChain->Present(0, 0);
  252. }
  253.  
  254.  
  255.  
  256.  
  257. LRESULT CALLBACK WindowProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
  258. {
  259.     switch (Message)
  260.     {
  261.         case WM_DESTROY:
  262.             {
  263.               PostQuitMessage(0);
  264.               return 0;
  265.             } break;
  266.  
  267.     }
  268.     return DefWindowProc(hWnd, Message, wParam, lParam);
  269. }
  270.  
  271.  
  272. void CleanD3D(void)
  273. {
  274.     SwapChain->Release();
  275.     d3d11Device->Release();
  276.     d3d11DevCon->Release();
  277.     renderTargetView->Release();
  278.     triangleVertBuffer->Release();
  279.     VS->Release();
  280.     PS->Release();
  281.     VS_Buffer->Release();
  282.     PS_Buffer->Release();
  283.     vertLayout->Release();
  284.  
  285. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement