Advertisement
Guest User

MyDemo

a guest
Aug 5th, 2013
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 15.24 KB | None | 0 0
  1. //RenderSystem.hpp
  2. #ifndef RENDERSYSTEM_HPP
  3. #define RENDERSYSTEM_HPP
  4.  
  5. #include <d3d11.h>
  6. #include <d3dcompiler.h>
  7. #include <DirectXMath.h>
  8.  
  9. #include "Sprite.hpp"
  10.  
  11. using namespace DirectX;
  12.  
  13. class RenderSystem
  14. {
  15. public:
  16.     RenderSystem();
  17.     ~RenderSystem();
  18.  
  19.     bool Initialize(HINSTANCE hInstance, HWND hWnd, LPCWSTR shaderFileName);
  20.  
  21.     void Clear();
  22.     void Present();
  23.  
  24.     ID3D11Device *GetDevice() {return d3dDevice;};
  25.     ID3D11DeviceContext *GetDeviceContext() {return d3dDeviceContext;};
  26.     ID3D11VertexShader *GetVertexShader() {return vertexShader;};
  27.     ID3D11PixelShader *GetPixelShader() {return pixelShader;};
  28.     ID3D11InputLayout *GetInputLayout() {return inputLayout;};
  29.     ID3D11Buffer *GetModelViewProjectionBuffer() {return modelViewProjectionBuffer;};
  30.  
  31.     void DrawSprite(Sprite *sprite);
  32.  
  33. private:
  34.     D3D_FEATURE_LEVEL featureLevel;
  35.  
  36.     ID3D11Device *d3dDevice;
  37.     ID3D11DeviceContext *d3dDeviceContext;
  38.     IDXGISwapChain *swapChain;
  39.     ID3D11RenderTargetView *backBufferTarget;
  40.  
  41.     ID3D11VertexShader *vertexShader;
  42.     ID3D11PixelShader *pixelShader;
  43.     ID3D11InputLayout *inputLayout;
  44.  
  45.     ID3D11Buffer *modelViewProjectionBuffer;
  46.     XMMATRIX viewProjectionMatrix;
  47. };
  48.  
  49. #endif
  50.  
  51. //RenderSystem.cpp
  52. #include "RenderSystem.hpp"
  53.  
  54. RenderSystem::RenderSystem()
  55. {
  56.     featureLevel = D3D_FEATURE_LEVEL_11_1;
  57.  
  58.     d3dDevice = NULL;
  59.     d3dDeviceContext = NULL;
  60.     swapChain = NULL;
  61.     backBufferTarget = NULL;
  62.  
  63.     vertexShader = NULL;
  64.     pixelShader = NULL;
  65.     inputLayout = NULL;
  66.  
  67.     modelViewProjectionBuffer = NULL;
  68. }
  69.  
  70. bool RenderSystem::Initialize(HINSTANCE hInstance, HWND hWnd, LPCWSTR shaderFileName)
  71. {
  72.     D3D_FEATURE_LEVEL featureLevels[] =
  73.     {
  74.         D3D_FEATURE_LEVEL_11_1,
  75.         D3D_FEATURE_LEVEL_11_0,
  76.         D3D_FEATURE_LEVEL_10_1,
  77.         D3D_FEATURE_LEVEL_10_0
  78.     };
  79.  
  80.     UINT totalFeatureLevels = ARRAYSIZE(featureLevels);
  81.  
  82.     DXGI_SWAP_CHAIN_DESC swapChainDesc;
  83.     ZeroMemory( &swapChainDesc, sizeof( swapChainDesc ) );
  84.     swapChainDesc.BufferCount = 1;
  85.     swapChainDesc.BufferDesc.Width = 800;
  86.     swapChainDesc.BufferDesc.Height = 600;
  87.     swapChainDesc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
  88.     swapChainDesc.BufferDesc.RefreshRate.Numerator = 60;
  89.     swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
  90.     swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
  91.     swapChainDesc.OutputWindow = hWnd;
  92.     swapChainDesc.Windowed = true;
  93.     swapChainDesc.SampleDesc.Count = 1;
  94.     swapChainDesc.SampleDesc.Quality = 0;
  95.  
  96.     HRESULT result;
  97.    
  98.     result = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, NULL, featureLevels, totalFeatureLevels, D3D11_SDK_VERSION,
  99.                                            &swapChainDesc, &swapChain, &d3dDevice, &featureLevel, &d3dDeviceContext);
  100.  
  101.     if(FAILED(result))
  102.         return false;
  103.  
  104.     ID3D11Texture2D* backBufferTexture;
  105.  
  106.     result = swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&backBufferTexture);
  107.  
  108.     if(FAILED(result ))
  109.     {
  110.         return false;
  111.     }
  112.  
  113.     result = d3dDevice->CreateRenderTargetView(backBufferTexture, 0, &backBufferTarget);
  114.  
  115.     if(backBufferTexture)
  116.         backBufferTexture->Release();
  117.  
  118.     if(FAILED(result))
  119.     {
  120.         return false;
  121.     }
  122.  
  123.     d3dDeviceContext->OMSetRenderTargets(1, &backBufferTarget, 0);
  124.  
  125.     D3D11_VIEWPORT viewport;
  126.     viewport.Width = static_cast<float>(800);
  127.     viewport.Height = static_cast<float>(600);
  128.     viewport.MinDepth = 0.0f;
  129.     viewport.MaxDepth = 1.0f;
  130.     viewport.TopLeftX = 0.0f;
  131.     viewport.TopLeftY = 0.0f;
  132.  
  133.     d3dDeviceContext->RSSetViewports( 1, &viewport );
  134.  
  135.     //Shader Buffers
  136.     ID3DBlob *vertexShaderBuffer = NULL;
  137.     ID3DBlob *pixelShaderBuffer = NULL;
  138.  
  139.     //Compile and create the vertex shader
  140.     result = D3DCompileFromFile(shaderFileName, NULL, NULL, "VSMain", "vs_5_0", NULL, NULL, &vertexShaderBuffer, NULL);
  141.  
  142.     if(FAILED(result))
  143.         return false;
  144.    
  145.     result = d3dDevice->CreateVertexShader(vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), NULL, &vertexShader);
  146.  
  147.     if(FAILED(result))
  148.         return false;
  149.  
  150.     //Create the input layout
  151.     D3D11_INPUT_ELEMENT_DESC simpleShaderLayout[] =
  152.     {
  153.         { "POSITION", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
  154.         { "TEXCOORD", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 }
  155.     };
  156.  
  157.     result = d3dDevice->CreateInputLayout(simpleShaderLayout, ARRAYSIZE(simpleShaderLayout), vertexShaderBuffer->GetBufferPointer(), vertexShaderBuffer->GetBufferSize(), &inputLayout);
  158.  
  159.     if(FAILED(result))
  160.         return false;
  161.  
  162.     vertexShaderBuffer->Release();
  163.  
  164.     //Compile and create the pixel shader
  165.     result = D3DCompileFromFile(shaderFileName, NULL, NULL, "PSMain", "ps_5_0", NULL, NULL, &pixelShaderBuffer, NULL);
  166.  
  167.     if(FAILED(result))
  168.         return false;
  169.  
  170.     result = d3dDevice->CreatePixelShader(pixelShaderBuffer->GetBufferPointer(), pixelShaderBuffer->GetBufferSize(), NULL, &pixelShader);
  171.  
  172.     if(FAILED(result))
  173.         return false;
  174.  
  175.     pixelShaderBuffer->Release();
  176.  
  177.     //Create the constant buffer
  178.     D3D11_BUFFER_DESC constantBufferDesc;
  179.     ZeroMemory(&constantBufferDesc, sizeof(constantBufferDesc));
  180.     constantBufferDesc.BindFlags = D3D11_BIND_CONSTANT_BUFFER;
  181.     constantBufferDesc.ByteWidth = sizeof(XMMATRIX);
  182.     constantBufferDesc.Usage = D3D11_USAGE_DEFAULT;
  183.  
  184.     result = d3dDevice->CreateBuffer(&constantBufferDesc, NULL, &modelViewProjectionBuffer);
  185.  
  186.     if(FAILED(result))
  187.         return false;
  188.  
  189.     XMMATRIX view = XMMatrixIdentity();
  190.     XMMATRIX projection = XMMatrixOrthographicOffCenterLH(0.0f, 800.0f, 0.0f, 600.0f, 0.1f, 100.0f);
  191.  
  192.     viewProjectionMatrix = XMMatrixMultiply(view, projection);
  193.  
  194.     return true;
  195. }
  196.  
  197. void RenderSystem::DrawSprite(Sprite *sprite)
  198. {
  199.     d3dDeviceContext->IASetInputLayout(inputLayout);
  200.     sprite->SetVertexBuffer(d3dDeviceContext);
  201.     d3dDeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
  202.  
  203.     d3dDeviceContext->VSSetShader(vertexShader, NULL, NULL);
  204.     d3dDeviceContext->PSSetShader(pixelShader, NULL, NULL);
  205.     sprite->SetShaderResourceAndSampler(d3dDeviceContext);
  206.  
  207.     XMMATRIX world = sprite->GetWorldMatrix();
  208.     XMMATRIX modelViewProjectionMatrix = XMMatrixMultiply(world, viewProjectionMatrix);
  209.     modelViewProjectionMatrix = XMMatrixTranspose(modelViewProjectionMatrix);
  210.  
  211.     d3dDeviceContext->UpdateSubresource(modelViewProjectionBuffer, 0, 0, &modelViewProjectionMatrix, 0, 0);
  212.     d3dDeviceContext->VSSetConstantBuffers(0, 1, &modelViewProjectionBuffer);
  213.  
  214.     d3dDeviceContext->Draw(6, 0);
  215. }
  216.  
  217. void RenderSystem::Clear()
  218. {
  219.     float clearColor[4] = { 0.0f, 0.0f, 0.25f, 1.0f };
  220.     d3dDeviceContext->ClearRenderTargetView(backBufferTarget, clearColor);
  221. }
  222.  
  223. void RenderSystem::Present()
  224. {
  225.     swapChain->Present(0, 0);
  226. }
  227.  
  228. RenderSystem::~RenderSystem()
  229. {
  230.     d3dDevice->Release();
  231.     d3dDeviceContext->Release();
  232.     swapChain->Release();
  233.     backBufferTarget->Release();
  234. }
  235.  
  236. //Sprite.hpp
  237. #include <d3d11.h>
  238. #include <DirectXMath.h>
  239. #include "FreeImage.h"
  240.  
  241. using namespace DirectX;
  242.  
  243. class RenderSystem;
  244.  
  245. class Sprite
  246. {
  247. public:
  248.     Sprite();
  249.     ~Sprite();
  250.  
  251.     bool Load(ID3D11Device *d3dDevice, ID3D11DeviceContext *d3dDeviceContext, char* filename);
  252.  
  253.     XMMATRIX GetWorldMatrix();
  254.  
  255.     void SetPosition(XMFLOAT2 position_);
  256.     void SetRotation(float rotation_);
  257.     void SetScale(XMFLOAT2 scale_);
  258.  
  259.     void SetVertexBuffer(ID3D11DeviceContext *d3dDeviceContext);
  260.     void SetShaderResourceAndSampler(ID3D11DeviceContext *d3dDeviceContext);
  261.  
  262. private:
  263.     XMFLOAT2 position;
  264.     float rotation;
  265.     XMFLOAT2 scale;
  266.  
  267.     ID3D11Buffer *vertexBuffer;
  268.     ID3D11Texture2D *texture;
  269.  
  270.     ID3D11ShaderResourceView *shaderResourceView;
  271.     ID3D11SamplerState *samplerState;
  272.     ID3D11BlendState *alphaBlendState;
  273. };
  274.  
  275. #endif
  276.  
  277. //Sprite.cpp
  278. #include "Sprite.hpp"
  279.  
  280. struct Vertex
  281. {
  282.     XMFLOAT3 pos;
  283.     XMFLOAT2 tex0;
  284. };
  285.  
  286. Sprite::Sprite()
  287. {
  288.     texture = NULL;
  289.     vertexBuffer = NULL;
  290.     shaderResourceView = NULL;
  291.     samplerState = NULL;
  292.  
  293.     scale.x = scale.y = 1;
  294.     rotation = 0;
  295. }
  296.  
  297. bool Sprite::Load(ID3D11Device *d3dDevice, ID3D11DeviceContext *d3dDeviceContext, char* filename)
  298. {
  299.     HRESULT result;
  300.  
  301.     //Load the image
  302.     FREE_IMAGE_FORMAT fif = FIF_UNKNOWN;
  303.     FIBITMAP *dib = NULL;
  304.     BYTE *bits = NULL;
  305.     unsigned int width, height;
  306.  
  307.     fif = FreeImage_GetFileType(filename, 0);
  308.  
  309.     if(fif == FIF_UNKNOWN)
  310.         fif = FreeImage_GetFIFFromFilename(filename);
  311.  
  312.     if(fif == FIF_UNKNOWN)
  313.         return false;
  314.  
  315.     if(FreeImage_FIFSupportsReading(fif))
  316.         dib = FreeImage_Load(fif, filename);
  317.  
  318.     if(!dib)
  319.         return false;
  320.  
  321.     bits = FreeImage_GetBits(dib);
  322.  
  323.     width = FreeImage_GetWidth(dib);
  324.     height = FreeImage_GetHeight(dib);
  325.  
  326.     if((bits == 0) || (width == 0) || (height == 0))
  327.         return false;
  328.  
  329.     //Create the texture
  330.     D3D11_TEXTURE2D_DESC textureDesc;
  331.     textureDesc.Width = width;
  332.     textureDesc.Height = height;
  333.     textureDesc.MipLevels = 1;
  334.     textureDesc.ArraySize = 1;
  335.     textureDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
  336.     textureDesc.SampleDesc.Count = 1;
  337.     textureDesc.SampleDesc.Quality = 0;
  338.     textureDesc.Usage = D3D11_USAGE_IMMUTABLE;
  339.     textureDesc.BindFlags = D3D11_BIND_SHADER_RESOURCE;
  340.     textureDesc.CPUAccessFlags = 0;
  341.     textureDesc.MiscFlags = 0;
  342.  
  343.     D3D11_SUBRESOURCE_DATA textureResourceData;
  344.     textureResourceData.pSysMem = bits;
  345.     textureResourceData.SysMemPitch = width * 4;
  346.     textureResourceData.SysMemSlicePitch = 0;
  347.  
  348.     result = d3dDevice->CreateTexture2D(&textureDesc, &textureResourceData, &texture);
  349.  
  350.     if(FAILED(result))
  351.         return false;
  352.  
  353.     float halfWidth = width/2;
  354.     float halfHeight = height/2;
  355.  
  356.     //Create the geometry
  357.     Vertex vertices[] =
  358.     {
  359.         {XMFLOAT3(halfWidth, halfHeight, 1.0f), XMFLOAT2(1.0f, 0.0f)},
  360.         {XMFLOAT3(halfWidth, -halfHeight, 1.0f), XMFLOAT2(1.0f, 1.0f)},
  361.         {XMFLOAT3(-halfWidth, -halfHeight, 1.0f), XMFLOAT2(0.0f, 1.0f)},
  362.         {XMFLOAT3(-halfWidth, -halfHeight, 1.0f), XMFLOAT2(0.0f, 1.0f)},
  363.         {XMFLOAT3(-halfWidth, halfHeight, 1.0f), XMFLOAT2(0.0f, 0.0f)},
  364.         {XMFLOAT3(halfWidth, halfHeight, 1.0f), XMFLOAT2(1.0f, 0.0f)}
  365.     };
  366.  
  367.     D3D11_BUFFER_DESC vertexDesc;
  368.     ZeroMemory(&vertexDesc, sizeof(vertexDesc));
  369.     vertexDesc.Usage = D3D11_USAGE_DEFAULT;
  370.     vertexDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
  371.     vertexDesc.ByteWidth = sizeof(Vertex) * 6;
  372.  
  373.     D3D11_SUBRESOURCE_DATA resourceData;
  374.     ZeroMemory( &resourceData, sizeof(resourceData));
  375.     resourceData.pSysMem = vertices;
  376.  
  377.     result = d3dDevice->CreateBuffer(&vertexDesc, &resourceData, &vertexBuffer);
  378.    
  379.     if(FAILED(result))
  380.         return false;
  381.  
  382.     //Create the shader resource view
  383.     D3D11_SHADER_RESOURCE_VIEW_DESC shaderResourceViewDesc;
  384.     shaderResourceViewDesc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
  385.     shaderResourceViewDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
  386.     shaderResourceViewDesc.Texture2D.MipLevels = -1;
  387.     shaderResourceViewDesc.Texture2D.MostDetailedMip = 0;
  388.  
  389.     result = d3dDevice->CreateShaderResourceView(texture, &shaderResourceViewDesc, &shaderResourceView);
  390.  
  391.     if(FAILED(result))
  392.         return false;
  393.  
  394.     //Create the sampler state
  395.     D3D11_SAMPLER_DESC samplerDesc;
  396.     samplerDesc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR;
  397.     samplerDesc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP;
  398.     samplerDesc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP;
  399.     samplerDesc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP;
  400.     samplerDesc.MipLODBias = 0;
  401.     samplerDesc.MaxAnisotropy = 1;
  402.     samplerDesc.ComparisonFunc = D3D11_COMPARISON_NEVER;
  403.     samplerDesc.MinLOD = 0;
  404.     samplerDesc.MaxLOD = D3D11_FLOAT32_MAX;
  405.  
  406.     result = d3dDevice->CreateSamplerState(&samplerDesc, &samplerState);
  407.  
  408.     if(FAILED(result))
  409.         return false;
  410.  
  411.     D3D11_BLEND_DESC blendDesc;
  412.     ZeroMemory( &blendDesc, sizeof( blendDesc ) );
  413.     blendDesc.RenderTarget[0].BlendEnable = TRUE;
  414.     blendDesc.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
  415.     blendDesc.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
  416.     blendDesc.RenderTarget[0].DestBlend = D3D11_BLEND_ONE;
  417.     blendDesc.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
  418.     blendDesc.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ZERO;
  419.     blendDesc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_ZERO;
  420.     blendDesc.RenderTarget[0].RenderTargetWriteMask = 0x0F;
  421.  
  422.     float blendFactor[4] = {0.0f, 0.0f, 0.0f, 0.0f};
  423.  
  424.     d3dDevice->CreateBlendState(&blendDesc, &alphaBlendState);
  425.     d3dDeviceContext->OMSetBlendState(alphaBlendState, blendFactor, 0xFFFFFFFF);
  426.  
  427.     return true;
  428. }
  429.  
  430. XMMATRIX Sprite::GetWorldMatrix()
  431. {
  432.     XMMATRIX translation_ = XMMatrixTranslation(position.x, position.y, 0.0f);
  433.     XMMATRIX rotation_ = XMMatrixRotationZ(rotation);
  434.     XMMATRIX scale_ = XMMatrixScaling(scale.x, scale.y, 0.0f);
  435.  
  436.     return translation_ * rotation_ * scale_;
  437. }
  438.  
  439. void Sprite::SetPosition(XMFLOAT2 position_)
  440. {
  441.     position = position_;
  442. }
  443. void Sprite::SetRotation(float rotation_)
  444. {
  445.     rotation = rotation_;
  446. }
  447. void Sprite::SetScale(XMFLOAT2 scale_)
  448. {
  449.     scale = scale_;
  450. }
  451.  
  452. void Sprite::SetVertexBuffer(ID3D11DeviceContext *d3dDeviceContext)
  453. {
  454.     UINT stride = sizeof(Vertex);
  455.     UINT offset = 0;
  456.  
  457.     d3dDeviceContext->IAGetVertexBuffers(0, 1, &vertexBuffer, &stride, &offset);
  458. }
  459.  
  460. void Sprite::SetShaderResourceAndSampler(ID3D11DeviceContext *d3dDeviceContext)
  461. {
  462.     d3dDeviceContext->PSSetShaderResources(0, 1, &shaderResourceView);
  463.     d3dDeviceContext->PSSetSamplers(0, 1, &samplerState);
  464. }
  465.  
  466. Sprite::~Sprite()
  467. {
  468.     vertexBuffer->Release();
  469.     delete texture;
  470.     shaderResourceView->Release();
  471.     samplerState->Release();
  472. }
  473.  
  474. //main.cpp
  475. #include <Windows.h>
  476.  
  477. #include "RenderSystem.hpp"
  478. #include "Sprite.hpp"
  479.  
  480. LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam );
  481.  
  482.  
  483. int WINAPI wWinMain( HINSTANCE hInstance, HINSTANCE prevInstance, LPWSTR cmdLine, int cmdShow )
  484. {
  485. #pragma region WindowStuff
  486.     WNDCLASSEX wndClass = { 0 };
  487.     wndClass.cbSize = sizeof( WNDCLASSEX ) ;
  488.     wndClass.style = CS_HREDRAW | CS_VREDRAW;
  489.     wndClass.lpfnWndProc = WndProc;
  490.     wndClass.hInstance = hInstance;
  491.     wndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
  492.     wndClass.hbrBackground = ( HBRUSH )( COLOR_WINDOW + 1 );
  493.     wndClass.lpszMenuName = NULL;
  494.     wndClass.lpszClassName = L"WindowClass";
  495.  
  496.     if(!RegisterClassEx(&wndClass ))
  497.         return -1;
  498.  
  499.     HWND hWnd = CreateWindowA( "WindowClass", "My Demo", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 800, 600, NULL, NULL, hInstance, NULL );
  500.  
  501.     if(!hWnd)
  502.         return -1;
  503.  
  504.     ShowWindow(hWnd, cmdShow);
  505. #pragma endregion
  506.  
  507.     RenderSystem *renderSystem = new RenderSystem;
  508.     if(!renderSystem->Initialize(hInstance, hWnd, L"simpleShader.hlsl"))
  509.     {
  510.         MessageBox(NULL, L"Failed to initialize the render sytem!", L"Error", MB_ICONWARNING);
  511.         return 0;
  512.     }
  513.  
  514.     Sprite *sprite = new Sprite;
  515.     if(!sprite->Load(renderSystem->GetDevice(), renderSystem->GetDeviceContext(), "Stickman.png"))
  516.     {
  517.         MessageBox(NULL, L"Failed to load a sprite!", L"Error", MB_ICONWARNING);
  518.         return 0;
  519.     }
  520.  
  521.     sprite->SetPosition(XMFLOAT2(100.0f, 400.0f));
  522.  
  523.     //MainLoop
  524.     MSG msg = {0};
  525.  
  526.     while(msg.message != WM_QUIT)
  527.     {
  528.         if(PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
  529.         {
  530.             TranslateMessage(&msg);
  531.             DispatchMessage(&msg);
  532.         }
  533.        
  534.         //Update
  535.         //Render
  536.         renderSystem->Clear();
  537.         renderSystem->DrawSprite(sprite);
  538.         renderSystem->Present();
  539.     }
  540. }
  541.  
  542.  
  543. LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  544. {
  545.     switch(message)
  546.     {
  547.         case WM_DESTROY:
  548.             PostQuitMessage(0);
  549.             break;
  550.  
  551.         default:
  552.             return DefWindowProc(hWnd, message, wParam, lParam);
  553.     }
  554.  
  555.     return 0;
  556. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement