Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Sep 9th, 2013  |  syntax: None  |  size: 6.48 KB  |  views: 32  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. #include <Windows.h>
  2. #include <windowsx.h>
  3. #include <iostream>
  4. #include <stdio.h>
  5. #include <io.h>
  6. #include <fcntl.h>
  7. #include <d3d9.h>
  8. #include <d3dx9.h>
  9.  
  10. #pragma comment (lib, "d3d9.lib")
  11. #pragma comment(lib, "d3dx9.lib")
  12.  
  13. //SCREEN
  14. #define SCREEN_WIDTH 800
  15. #define SCREEN_HEIGHT 600
  16.  
  17. IDirect3DTexture9 *texture;
  18.  
  19. const DWORD D3DFVF_TLVERTEX = D3DFVF_XYZRHW | D3DFVF_TEX1;
  20.  
  21. struct TLVERTEX
  22. {
  23.         float x;
  24.         float y;
  25.         float z;
  26.         float rhw;
  27.         D3DCOLOR color;
  28.         float u;
  29.         float v;
  30. };
  31.  
  32. #pragma region Variables
  33.  
  34. //Variables
  35. LPDIRECT3D9 d3d;
  36. LPDIRECT3DDEVICE9 d3dDev;
  37. LPDIRECT3DVERTEXBUFFER9 vertexBuffer;
  38.  
  39. #pragma endregion
  40.  
  41. LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
  42. void initD3D(HWND hWnd);
  43. void initGraphics();
  44. void renderFrame();
  45. void cleanD3D();
  46.  
  47.  
  48. int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstancce, LPSTR lpCmdLine, int nCmdShow)
  49. {
  50.  
  51.         AllocConsole();
  52.  
  53.     HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);
  54.     int hCrt = _open_osfhandle((long) handle_out, _O_TEXT);
  55.     FILE* hf_out = _fdopen(hCrt, "w");
  56.     setvbuf(hf_out, NULL, _IONBF, 1);
  57.     *stdout = *hf_out;
  58.  
  59.     HANDLE handle_in = GetStdHandle(STD_INPUT_HANDLE);
  60.     hCrt = _open_osfhandle((long) handle_in, _O_TEXT);
  61.     FILE* hf_in = _fdopen(hCrt, "r");
  62.     setvbuf(hf_in, NULL, _IONBF, 128);
  63.     *stdin = *hf_in;
  64.  
  65.         //=============
  66.  
  67.         HWND hWnd;
  68.         WNDCLASSEX wc;
  69.  
  70.         ZeroMemory(&wc, sizeof(WNDCLASSEX));
  71.  
  72.         wc.cbSize = sizeof(WNDCLASSEX);
  73.         wc.style = CS_HREDRAW | CS_VREDRAW;
  74.         wc.lpfnWndProc = WindowProc;
  75.         wc.hInstance = hInstance;
  76.         wc.hCursor = LoadCursor(NULL, IDC_ARROW);
  77.         wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
  78.         wc.lpszClassName = "Window";
  79.  
  80.         RegisterClassEx(&wc);
  81.  
  82.         hWnd = CreateWindowEx(NULL,
  83.                                 "Window",
  84.                                 "Test Window",
  85.                                 WS_OVERLAPPEDWINDOW,
  86.                                 400,
  87.                                 150,
  88.                                 SCREEN_WIDTH,
  89.                                 SCREEN_HEIGHT,
  90.                                 NULL,
  91.                                 NULL,
  92.                                 hInstance,
  93.                                 NULL);
  94.  
  95.         ShowWindow(hWnd, nCmdShow);
  96.         initD3D(hWnd);
  97.  
  98.         bool run = true;
  99.         MSG msg;
  100.  
  101.         while(run)
  102.         {
  103.  
  104.                 #pragma region Messages
  105.  
  106.                 while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
  107.                 {
  108.                         //Handle Windows messages
  109.                         TranslateMessage(&msg);
  110.                         DispatchMessage(&msg);
  111.                 }
  112.  
  113.                 if(msg.message == WM_QUIT)
  114.                         break;
  115.  
  116.                 #pragma endregion
  117.  
  118.                 //Game Code
  119.                 renderFrame();
  120.                
  121.         }
  122.  
  123.         //Clean up directX
  124.         cleanD3D();
  125.  
  126.         return msg.wParam;
  127. }
  128.  
  129. LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
  130. {
  131.         switch(message)
  132.         {
  133.                 case WM_DESTROY:
  134.                 {
  135.                         PostQuitMessage(0);
  136.                         return 0;
  137.                 }break;
  138.         }
  139.  
  140.         return DefWindowProc(hWnd, message, wParam, lParam);
  141. }
  142.  
  143. void initD3D(HWND hWnd)
  144. {
  145.         d3d = Direct3DCreate9(D3D_SDK_VERSION);
  146.  
  147.         D3DPRESENT_PARAMETERS d3dpp;
  148.  
  149.         ZeroMemory(&d3dpp, sizeof(d3dpp));
  150.         d3dpp.Windowed = true;
  151.         d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
  152.         d3dpp.hDeviceWindow = hWnd;
  153.  
  154.         d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &d3dDev);
  155.  
  156.         initGraphics();
  157. }
  158.  
  159. void initGraphics()
  160. {
  161.         d3dDev->CreateVertexBuffer(2 * 3 * sizeof(TLVERTEX), 0, D3DFVF_TLVERTEX, D3DPOOL_MANAGED, &vertexBuffer, NULL);
  162.  
  163.         d3dDev->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
  164.         d3dDev->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
  165.         d3dDev->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE);
  166.         d3dDev->SetFVF(D3DFVF_TLVERTEX);
  167.        
  168.         //Load the texture
  169.         if(FAILED(D3DXCreateTextureFromFile(d3dDev, "img.png", &texture)))
  170.         {
  171.                 TCHAR pwd[MAX_PATH];
  172.                 std::cout<<"Could not load texture;"<<std::endl;
  173.         }
  174.  
  175.         d3dDev->SetTexture(0, texture);
  176. }
  177.  
  178. void renderFrame()
  179. {
  180.         TLVERTEX *verts;
  181.         vertexBuffer->Lock(0, 0, (void **)&verts, NULL);
  182.        
  183.         //vert 1
  184.         verts[0].color = D3DCOLOR_ARGB(255, 50, 255, 255);
  185.         verts[0].x = 50;
  186.         verts[0].y = 100;
  187.         verts[0].z = 1.0f;
  188.         verts[0].rhw = 1.0f;
  189.         verts[0].u = 0.0f;
  190.         verts[0].v = 1.0f;
  191.  
  192.         //Vert 2
  193.         verts[1].color = D3DCOLOR_ARGB(255, 255, 50, 255);
  194.         verts[1].x = 50;
  195.         verts[1].y = 50;
  196.         verts[1].z = 1.0f;
  197.         verts[1].rhw = 1.0f;
  198.         verts[1].u = 0.0f;
  199.         verts[1].v = 0.0f;
  200.  
  201.         //vert 3
  202.         verts[2].color = D3DCOLOR_ARGB(255, 255, 255, 50);
  203.         verts[2].x = 100;
  204.         verts[2].y = 50;
  205.         verts[2].z = 1.0f;
  206.         verts[2].rhw = 1.0f;
  207.         verts[2].u = 1.0f;
  208.         verts[2].v = 0.0f;
  209.  
  210.         //vert4
  211.         verts[3].color = D3DCOLOR_ARGB(255, 50, 255, 255);
  212.         verts[3].x = 50;
  213.         verts[3].y = 100;
  214.         verts[3].z = 1.0f;
  215.         verts[3].rhw = 1.0f;
  216.         verts[3].u = 0.0f;
  217.         verts[3].v = 1.0f;
  218.  
  219.         //vert 5
  220.         verts[4].color = D3DCOLOR_ARGB(255, 255, 50, 255);
  221.         verts[4].x = 100;
  222.         verts[4].y = 50;
  223.         verts[4].z = 1.0f;
  224.         verts[4].rhw = 1.0f;
  225.         verts[4].u = 1.0f;
  226.         verts[4].v = 0.0f;
  227.  
  228.         //Vert 6
  229.         verts[5].color = D3DCOLOR_ARGB(255, 255, 255, 50);
  230.         verts[5].x = 100;
  231.         verts[5].y = 100;
  232.         verts[5].z = 1.0f;
  233.         verts[5].rhw = 1.0f;
  234.         verts[5].u = 1.0f;
  235.         verts[5].v = 1.0f;
  236.  
  237.         //==================================================================================================
  238.  
  239.         /*
  240.         //vert 0
  241.         verts[6].color = D3DCOLOR_ARGB(255, 50, 255, 255);
  242.         verts[6].x = 150;
  243.         verts[6].y = 200;
  244.         verts[6].z = 0.0f;
  245.         verts[6].rhw = 1.0f;
  246.         verts[6].u = 0.0f;
  247.         verts[6].v = 0.0f;
  248.  
  249.         verts[7].color = D3DCOLOR_ARGB(255, 255, 50, 255);
  250.         verts[7].x = 150;
  251.         verts[7].y = 150;
  252.         verts[7].z = 0.0f;
  253.         verts[7].rhw = 1.0f;
  254.         verts[7].u = 0.0f;
  255.         verts[7].v = 0.0f;
  256.  
  257.         verts[8].color = D3DCOLOR_ARGB(255, 255, 255, 50);
  258.         verts[8].x = 200;
  259.         verts[8].y = 150;
  260.         verts[8].z = 0.0f;
  261.         verts[8].rhw = 1.0f;
  262.         verts[8].u = 0.0f;
  263.         verts[8].v = 0.0f;
  264.  
  265.         verts[9].color = D3DCOLOR_ARGB(255, 50, 255, 255);
  266.         verts[9].x = 150;
  267.         verts[9].y = 200;
  268.         verts[9].z = 0.0f;
  269.         verts[9].rhw = 1.0f;
  270.         verts[9].u = 0.0f;
  271.         verts[9].v = 0.0f;
  272.  
  273.         verts[10].color = D3DCOLOR_ARGB(255, 255, 50, 255);
  274.         verts[10].x = 200;
  275.         verts[10].y = 150;
  276.         verts[10].z = 0.0f;
  277.         verts[10].rhw = 1.0f;
  278.         verts[10].u = 0.0f;
  279.         verts[10].v = 0.0f;
  280.  
  281.         verts[11].color = D3DCOLOR_ARGB(255, 255, 255, 50);
  282.         verts[11].x = 200;
  283.         verts[11].y = 200;
  284.         verts[11].z = 0.0f;
  285.         verts[11].rhw = 1.0f;
  286.         verts[11].u = 0.0f;
  287.         verts[11].v = 0.0f;
  288.         */
  289.  
  290.  
  291.         vertexBuffer->Unlock();
  292.  
  293.         d3dDev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(40, 150, 255), 1.0f, 0);
  294.         d3dDev->BeginScene();
  295.  
  296.         d3dDev->SetStreamSource(0, vertexBuffer, 0, sizeof(TLVERTEX));
  297.         d3dDev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
  298.  
  299.         d3dDev->EndScene();
  300.         d3dDev->Present(NULL, NULL, NULL, NULL);
  301. }
  302.  
  303. void cleanD3D()
  304. {
  305.         texture->Release();
  306.         texture = NULL;
  307.  
  308.         vertexBuffer->Release();
  309.         vertexBuffer = NULL;
  310.  
  311.         d3dDev->Release();
  312.         d3dDev = NULL;
  313.  
  314.  
  315.         d3d->Release();
  316.         d3d = NULL;
  317. }
clone this paste RAW Paste Data