#include #include #include #include #include #include #include #include #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;"<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; }