Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <Windows.h>
- #include <windowsx.h>
- #include <iostream>
- #include <stdio.h>
- #include <io.h>
- #include <fcntl.h>
- #include <d3d9.h>
- #include <d3dx9.h>
- #pragma comment (lib, "d3d9.lib")
- #pragma comment(lib, "d3dx9.lib")
- //SCREEN
- #define SCREEN_WIDTH 800
- #define SCREEN_HEIGHT 600
- IDirect3DTexture9 *texture;
- const DWORD D3DFVF_TLVERTEX = D3DFVF_XYZRHW | D3DFVF_TEX1;
- struct TLVERTEX
- {
- float x;
- float y;
- float z;
- float rhw;
- D3DCOLOR color;
- float u;
- float v;
- };
- #pragma region Variables
- //Variables
- LPDIRECT3D9 d3d;
- LPDIRECT3DDEVICE9 d3dDev;
- LPDIRECT3DVERTEXBUFFER9 vertexBuffer;
- #pragma endregion
- LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
- void initD3D(HWND hWnd);
- void initGraphics();
- void renderFrame();
- void cleanD3D();
- int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstancce, LPSTR lpCmdLine, int nCmdShow)
- {
- AllocConsole();
- HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);
- int hCrt = _open_osfhandle((long) handle_out, _O_TEXT);
- FILE* hf_out = _fdopen(hCrt, "w");
- setvbuf(hf_out, NULL, _IONBF, 1);
- *stdout = *hf_out;
- HANDLE handle_in = GetStdHandle(STD_INPUT_HANDLE);
- hCrt = _open_osfhandle((long) handle_in, _O_TEXT);
- FILE* hf_in = _fdopen(hCrt, "r");
- setvbuf(hf_in, NULL, _IONBF, 128);
- *stdin = *hf_in;
- //=============
- HWND hWnd;
- WNDCLASSEX wc;
- ZeroMemory(&wc, sizeof(WNDCLASSEX));
- wc.cbSize = sizeof(WNDCLASSEX);
- wc.style = CS_HREDRAW | CS_VREDRAW;
- wc.lpfnWndProc = WindowProc;
- wc.hInstance = hInstance;
- wc.hCursor = LoadCursor(NULL, IDC_ARROW);
- wc.hbrBackground = (HBRUSH)COLOR_WINDOW;
- wc.lpszClassName = "Window";
- RegisterClassEx(&wc);
- hWnd = CreateWindowEx(NULL,
- "Window",
- "Test Window",
- WS_OVERLAPPEDWINDOW,
- 400,
- 150,
- SCREEN_WIDTH,
- SCREEN_HEIGHT,
- NULL,
- NULL,
- hInstance,
- NULL);
- ShowWindow(hWnd, nCmdShow);
- initD3D(hWnd);
- bool run = true;
- MSG msg;
- while(run)
- {
- #pragma region Messages
- while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
- {
- //Handle Windows messages
- TranslateMessage(&msg);
- DispatchMessage(&msg);
- }
- if(msg.message == WM_QUIT)
- break;
- #pragma endregion
- //Game Code
- renderFrame();
- }
- //Clean up directX
- cleanD3D();
- return msg.wParam;
- }
- 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 initD3D(HWND hWnd)
- {
- d3d = Direct3DCreate9(D3D_SDK_VERSION);
- D3DPRESENT_PARAMETERS d3dpp;
- ZeroMemory(&d3dpp, sizeof(d3dpp));
- d3dpp.Windowed = true;
- d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
- d3dpp.hDeviceWindow = hWnd;
- d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, &d3dpp, &d3dDev);
- initGraphics();
- }
- void initGraphics()
- {
- d3dDev->CreateVertexBuffer(2 * 3 * sizeof(TLVERTEX), 0, D3DFVF_TLVERTEX, D3DPOOL_MANAGED, &vertexBuffer, NULL);
- d3dDev->SetTextureStageState(0,D3DTSS_COLOROP,D3DTOP_SELECTARG1);
- d3dDev->SetTextureStageState(0,D3DTSS_COLORARG1,D3DTA_TEXTURE);
- d3dDev->SetTextureStageState(0,D3DTSS_COLORARG2,D3DTA_DIFFUSE);
- d3dDev->SetFVF(D3DFVF_TLVERTEX);
- //Load the texture
- if(FAILED(D3DXCreateTextureFromFile(d3dDev, "img.png", &texture)))
- {
- TCHAR pwd[MAX_PATH];
- std::cout<<"Could not load texture;"<<std::endl;
- }
- d3dDev->SetTexture(0, texture);
- }
- void renderFrame()
- {
- TLVERTEX *verts;
- vertexBuffer->Lock(0, 0, (void **)&verts, NULL);
- //vert 1
- verts[0].color = D3DCOLOR_ARGB(255, 50, 255, 255);
- verts[0].x = 50;
- verts[0].y = 100;
- verts[0].z = 1.0f;
- verts[0].rhw = 1.0f;
- verts[0].u = 0.0f;
- verts[0].v = 1.0f;
- //Vert 2
- verts[1].color = D3DCOLOR_ARGB(255, 255, 50, 255);
- verts[1].x = 50;
- verts[1].y = 50;
- verts[1].z = 1.0f;
- verts[1].rhw = 1.0f;
- verts[1].u = 0.0f;
- verts[1].v = 0.0f;
- //vert 3
- verts[2].color = D3DCOLOR_ARGB(255, 255, 255, 50);
- verts[2].x = 100;
- verts[2].y = 50;
- verts[2].z = 1.0f;
- verts[2].rhw = 1.0f;
- verts[2].u = 1.0f;
- verts[2].v = 0.0f;
- //vert4
- verts[3].color = D3DCOLOR_ARGB(255, 50, 255, 255);
- verts[3].x = 50;
- verts[3].y = 100;
- verts[3].z = 1.0f;
- verts[3].rhw = 1.0f;
- verts[3].u = 0.0f;
- verts[3].v = 1.0f;
- //vert 5
- verts[4].color = D3DCOLOR_ARGB(255, 255, 50, 255);
- verts[4].x = 100;
- verts[4].y = 50;
- verts[4].z = 1.0f;
- verts[4].rhw = 1.0f;
- verts[4].u = 1.0f;
- verts[4].v = 0.0f;
- //Vert 6
- verts[5].color = D3DCOLOR_ARGB(255, 255, 255, 50);
- verts[5].x = 100;
- verts[5].y = 100;
- verts[5].z = 1.0f;
- verts[5].rhw = 1.0f;
- verts[5].u = 1.0f;
- verts[5].v = 1.0f;
- //==================================================================================================
- /*
- //vert 0
- verts[6].color = D3DCOLOR_ARGB(255, 50, 255, 255);
- verts[6].x = 150;
- verts[6].y = 200;
- verts[6].z = 0.0f;
- verts[6].rhw = 1.0f;
- verts[6].u = 0.0f;
- verts[6].v = 0.0f;
- verts[7].color = D3DCOLOR_ARGB(255, 255, 50, 255);
- verts[7].x = 150;
- verts[7].y = 150;
- verts[7].z = 0.0f;
- verts[7].rhw = 1.0f;
- verts[7].u = 0.0f;
- verts[7].v = 0.0f;
- verts[8].color = D3DCOLOR_ARGB(255, 255, 255, 50);
- verts[8].x = 200;
- verts[8].y = 150;
- verts[8].z = 0.0f;
- verts[8].rhw = 1.0f;
- verts[8].u = 0.0f;
- verts[8].v = 0.0f;
- verts[9].color = D3DCOLOR_ARGB(255, 50, 255, 255);
- verts[9].x = 150;
- verts[9].y = 200;
- verts[9].z = 0.0f;
- verts[9].rhw = 1.0f;
- verts[9].u = 0.0f;
- verts[9].v = 0.0f;
- verts[10].color = D3DCOLOR_ARGB(255, 255, 50, 255);
- verts[10].x = 200;
- verts[10].y = 150;
- verts[10].z = 0.0f;
- verts[10].rhw = 1.0f;
- verts[10].u = 0.0f;
- verts[10].v = 0.0f;
- verts[11].color = D3DCOLOR_ARGB(255, 255, 255, 50);
- verts[11].x = 200;
- verts[11].y = 200;
- verts[11].z = 0.0f;
- verts[11].rhw = 1.0f;
- verts[11].u = 0.0f;
- verts[11].v = 0.0f;
- */
- vertexBuffer->Unlock();
- d3dDev->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(40, 150, 255), 1.0f, 0);
- d3dDev->BeginScene();
- d3dDev->SetStreamSource(0, vertexBuffer, 0, sizeof(TLVERTEX));
- d3dDev->DrawPrimitive(D3DPT_TRIANGLELIST, 0, 2);
- d3dDev->EndScene();
- d3dDev->Present(NULL, NULL, NULL, NULL);
- }
- void cleanD3D()
- {
- texture->Release();
- texture = NULL;
- vertexBuffer->Release();
- vertexBuffer = NULL;
- d3dDev->Release();
- d3dDev = NULL;
- d3d->Release();
- d3d = NULL;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement