Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <windows.h>
- #include <windowsx.h>
- #include <xnamath.h>
- #include <d3d11.h>
- #include <d3dx11.h>
- #include <d3dx10.h>
- #pragma comment (lib, "d3dx10.lib")
- #pragma comment (lib, "d3d11.lib")
- #pragma comment (lib, "d3dx11.lib")
- #define SCREEN_WIDTH 1280
- #define SCREEN_HEIGHT 720
- struct Vertex
- {
- Vertex(){}
- Vertex(float x, float y, float z) : pos(x, y, z){}
- XMFLOAT3 pos;
- //D3DXCOLOR color;
- };
- D3D11_INPUT_ELEMENT_DESC layout[] =
- {
- { "POSITION",0, DXGI_FORMAT_R32G32B32_FLOAT,0,0,D3D11_INPUT_PER_VERTEX_DATA,0 },
- //{ "COLOR",0,DXGI_FORMAT_R32G32B32A32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }
- };
- UINT numElements = ARRAYSIZE(layout);
- //GLOBALS DX11
- IDXGISwapChain* SwapChain;
- ID3D11Device* d3d11Device;
- ID3D11DeviceContext* d3d11DevCon;
- ID3D11RenderTargetView* renderTargetView;
- ID3D11Buffer* triangleVertBuffer;
- ID3D11VertexShader* VS;
- ID3D11PixelShader* PS;
- ID3D10Blob* VS_Buffer;
- ID3D10Blob* PS_Buffer;
- ID3D11InputLayout* vertLayout;
- //window handler
- HWND hWnd;
- HRESULT hr;
- //FORWARDINGS
- bool InitDX11(HINSTANCE hInstance);
- void CleanD3D(void);
- bool InitScene();
- void Update();
- void Draw();
- bool InitWindow(HINSTANCE hInstance, int ShowWnd, int width, int height, bool windowed);
- int messageloop();
- LRESULT CALLBACK WindowProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam);
- //MAIN
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
- {
- //init window
- InitWindow(hInstance, nCmdShow, (int)SCREEN_WIDTH, (int)SCREEN_HEIGHT, true);
- //init DirectX11
- InitDX11(hInstance);
- //Init Scene
- InitScene();
- //main loop
- messageloop();
- //aufräumen
- CleanD3D();
- return 0;
- }
- bool InitWindow(HINSTANCE hInstance, int ShowWnd, int width, int height, bool windowed)
- {
- //struct for information for window class
- WNDCLASSEX wc;
- ZeroMemory(&wc, sizeof(WNDCLASSEX));
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = WindowProc;
- wc.cbClsExtra = NULL;
- wc.cbWndExtra = NULL;
- wc.hInstance = hInstance;
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hbrBackground = (HBRUSH)(COLOR_WINDOW+2);
- wc.lpszClassName = L"DxGPD415";
- RegisterClassEx(&wc);
- hWnd = CreateWindowEx(NULL,
- L"DxGPD415",
- L"DirectX for GPD415",
- WS_EX_TOPMOST | WS_POPUP,
- 200, 200, SCREEN_WIDTH, SCREEN_HEIGHT,
- NULL, NULL, hInstance, NULL);
- ShowWindow(hWnd, ShowWnd);
- UpdateWindow(hWnd);
- return true;
- }
- bool InitDX11(HINSTANCE hInstance)
- {
- DXGI_MODE_DESC bufferDesc;
- ZeroMemory(&bufferDesc, sizeof(DXGI_MODE_DESC));
- bufferDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
- bufferDesc.Height = (int)SCREEN_HEIGHT;
- bufferDesc.Width = (int)SCREEN_WIDTH;
- bufferDesc.RefreshRate.Numerator = 60;
- bufferDesc.RefreshRate.Denominator = 1;
- bufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
- bufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
- DXGI_SWAP_CHAIN_DESC swapChainDesc;
- ZeroMemory(&swapChainDesc, sizeof(DXGI_SWAP_CHAIN_DESC));
- swapChainDesc.BufferCount = 1;
- swapChainDesc.SampleDesc.Count = 1;
- swapChainDesc.SampleDesc.Quality = 0;
- swapChainDesc.BufferDesc = bufferDesc;
- swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
- swapChainDesc.OutputWindow = hWnd;
- swapChainDesc.Windowed = TRUE;
- swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
- D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, NULL, NULL, NULL,
- D3D11_SDK_VERSION, &swapChainDesc, &SwapChain, &d3d11Device, NULL, &d3d11DevCon);
- //create backbuffer
- ID3D11Texture2D* BackBuffer;
- SwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (void**)&BackBuffer);
- //create renderTarget
- d3d11Device->CreateRenderTargetView(BackBuffer, NULL, &renderTargetView);
- //set Rendertarget
- d3d11DevCon->OMSetRenderTargets(1, &renderTargetView, NULL);
- return true;
- }
- bool InitScene()
- {
- //COmpile Shaders
- hr = D3DX11CompileFromFile(L"Effects.fx", 0, 0, "VS", "vs_4_0", 0, 0, 0, &VS_Buffer, 0, 0);
- hr = D3DX11CompileFromFile(L"Effects.fx", 0, 0, "PS", "ps_4_0", 0, 0, 0, &PS_Buffer, 0, 0);
- //Create Shader
- hr = d3d11Device->CreateVertexShader(VS_Buffer->GetBufferPointer(), VS_Buffer->GetBufferSize(),
- NULL, &VS);
- hr = d3d11Device->CreatePixelShader(PS_Buffer->GetBufferPointer(), PS_Buffer->GetBufferSize(),
- NULL, &PS);
- //Set VS and PS
- d3d11DevCon->VSSetShader(VS, 0, 0);
- d3d11DevCon->PSSetShader(PS, 0, 0);
- // Create VB
- Vertex v[] = {
- Vertex(0.0f, 0.5f, 0.5f),
- Vertex(0.5f, -0.5f, 0.5f),
- Vertex(-0.5f, -0.5f, 0.5f),
- };
- D3D11_BUFFER_DESC vertexBufferDesc;
- ZeroMemory(&vertexBufferDesc, sizeof(D3D11_BUFFER_DESC));
- vertexBufferDesc.Usage = D3D11_USAGE_DEFAULT;
- vertexBufferDesc.ByteWidth = sizeof(Vertex)* 3;
- vertexBufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
- vertexBufferDesc.CPUAccessFlags = 0;
- vertexBufferDesc.MiscFlags = 0;
- D3D11_SUBRESOURCE_DATA vertexBufferData;
- ZeroMemory(&vertexBufferData, sizeof(D3D11_SUBRESOURCE_DATA));
- vertexBufferData.pSysMem = v;
- hr = d3d11Device->CreateBuffer(&vertexBufferDesc, &vertexBufferData, &triangleVertBuffer);
- //set the buffer
- UINT stride = sizeof(Vertex);
- UINT offset = 0;
- d3d11DevCon->IASetVertexBuffers(0, 1, &triangleVertBuffer, &stride, &offset);
- d3d11Device->CreateInputLayout(layout, numElements, VS_Buffer->GetBufferPointer(),
- VS_Buffer->GetBufferSize(), &vertLayout);
- d3d11DevCon->IASetInputLayout(vertLayout);
- d3d11DevCon->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
- //create ViewPort
- D3D11_VIEWPORT viewport;
- ZeroMemory(&viewport, sizeof(D3D11_VIEWPORT));
- viewport.TopLeftX = 0;
- viewport.TopLeftY = 0;
- viewport.Width = (FLOAT)SCREEN_WIDTH;
- viewport.Height = (FLOAT)SCREEN_HEIGHT;
- //SET viewport
- d3d11DevCon->RSSetViewports(1, &viewport);
- return true;
- }
- int messageloop()
- {
- MSG msg;
- ZeroMemory(&msg, sizeof(MSG));
- while (TRUE)
- {
- while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
- {
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- if (msg.message == WM_QUIT) break;
- Update();
- Draw();
- }
- return msg.wParam;
- }
- void Update()
- {
- }
- void Draw()
- {
- //clear backbuffer
- float bgColor[4] = { (0.0f, 0.0f, 0.0f, 0.0f) };
- d3d11DevCon->ClearRenderTargetView(renderTargetView, bgColor);
- //DRAWEN!!!!
- d3d11DevCon->Draw(3, 0);
- //present BackBuffer to screen
- SwapChain->Present(0, 0);
- }
- LRESULT CALLBACK WindowProc(HWND hWnd, UINT Message, WPARAM wParam, LPARAM lParam)
- {
- switch (Message)
- {
- case WM_DESTROY:
- {
- PostQuitMessage(0);
- return 0;
- } break;
- }
- return DefWindowProc(hWnd, Message, wParam, lParam);
- }
- void CleanD3D(void)
- {
- SwapChain->Release();
- d3d11Device->Release();
- d3d11DevCon->Release();
- renderTargetView->Release();
- triangleVertBuffer->Release();
- VS->Release();
- PS->Release();
- VS_Buffer->Release();
- PS_Buffer->Release();
- vertLayout->Release();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement