/** * WinMain function to get the thing started. */ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wndclass; HRESULT hr; HWND hWnd; MSG msg; // Set up window attributes wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS; wndclass.lpfnWndProc = MsgProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInst; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = g_szAppClass; wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if (RegisterClassEx(&wndclass) == 0) return 0; // create window if (!(hWnd = CreateWindowEx(NULL, g_szAppClass, "ZFXEngine - Demo Application", WS_OVERLAPPEDWINDOW | WS_VISIBLE, GetSystemMetrics(SM_CXSCREEN) / 2 - 400, GetSystemMetrics(SM_CYSCREEN) / 2 - 300, 800, 600, NULL, NULL, hInst, NULL))) return 0; ShowWindow(hWnd, SW_HIDE); g_hWnd = hWnd; g_hInst = hInst; int SwitchAPI = 1; std::string chAPI; switch (SwitchAPI) { case 0: chAPI.assign("Direct3D"); break; case 1: chAPI.assign("OpenGL"); break; default: chAPI.assign("Direct3D"); break; } // try to start the engine if (FAILED(hr = ProgramStartup(chAPI.c_str()))) { GetLogger().Print(LOG_DEBUG,log_file,"error: ProgramStartup() failed\n"); g_bDone = true; } else if (hr == ZFX_CANCELED) { GetLogger().Print(LOG_DEBUG,log_file,"error: ProgramStartup() canceled by user \n"); g_bDone = true; } else { GetLogger().Print(LOG_DEBUG,log_file,"ProgramStartup Success"); g_pDevice->SetClearColor(1, 1, 1); ShowWindow(hWnd, SW_SHOW); LoadModel(); } //DrawVertex(); InitTriangleExam(); InitFont(); //InitLightExam(); InitGlyphTex(); GetTimer()->Reset(); while (!g_bDone) { while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } if (g_bIsActive) { UpdateFPS(); //DrawGlyphTex(); //DrawLightExam(); //ProgramTick(); IShaderManager* sm = g_pDevice->GetShaderManager(); sm->EnableShader(false); //DrawTriangle(sm); //DrawS3DModel(); DrawString("Life is cool"); /*if (g_pDevice->IsWindowed()) { g_pDevice->UseWindow(1); g_pDevice->SetView3D(vU*-1.0f, vR, vD, vP); ProgramTick(); g_pDevice->UseWindow(2); g_pDevice->SetView3D(vR*-1.0f, vU*-1, vD, vP); ProgramTick(); g_pDevice->UseWindow(3); g_pDevice->SetView3D(vU, vR*-1, vD, vP); ProgramTick(); }*/ } } // cleanup stuff ProgramCleanup(); UnregisterClass(g_szAppClass, hInst); // return back to windows return (int)msg.wParam; } // WinMain
/** * Do one frame. */ HRESULT ProgramTick(void) { HRESULT hr = ZFX_FAIL; ZFXMatrix mWorld; mWorld.Identity(); static float fT = 0.0f; static float fA = 0.0f; // this is just fancy fadein/fadeout eyecandy //////// if (fT <= 1.0f) { fA = fT; fT += 0.01f; } else if (fT <= 2.0f) { fA = 1 - (fT - 1); fT += 0.01f; } else fT = 0.0f; // end of fancy fadein/fadeout eyecandy ////////////// // set first viewport (whole window) g_pDevice->SetMode(EMD_PERSPECTIVE, 0); IShaderManager* sm = g_pDevice->GetShaderManager(); if (g_vshader) sm->BindShader(g_vshader); if (g_fshader) sm->BindShader(g_fshader); if(g_vshader || g_fshader) sm->EnableShader(true); GLfloat f[16] = { 0.0 }; glGetFloatv(GL_MODELVIEW_MATRIX, f); glGetFloatv(GL_PROJECTION_MATRIX, f); g_pDevice->SetClearColor(0.7f, 0.7f, 1.0f); // clear buffers and start scene g_pDevice->BeginRendering(true, true, true); mWorld.Translate(-1.0f, 1.0f, 3.0f); g_pDevice->SetWorldTransform(&mWorld); hr = g_pMarder->Render(true, false); mWorld.Translate(-1.0f, -5.0f, 2.0f); g_pDevice->SetWorldTransform(&mWorld); hr = g_pLeopard2->Render(true, false); mWorld.Identity(); //mWorld.Translate(1.1f, -0.6f, 1.0f); g_pDevice->SetWorldTransform(&mWorld); hr = g_pG3->Render(true, false); g_pDevice->FadeScreen(0.0f, 0.0f, 0.0f, fA); // render into second viewport g_pDevice->SetMode(EMD_PERSPECTIVE, 1); if (g_vshader || g_fshader) sm->EnableShader(true); glGetFloatv(GL_MODELVIEW_MATRIX, f); glGetFloatv(GL_PROJECTION_MATRIX, f); g_pDevice->SetClearColor(1.0f, 0.2f, 0.2f); g_pDevice->Clear(true, true, true); mWorld.Translate(-2.0f, 1.0f, 3.0f); g_pDevice->SetWorldTransform(&mWorld); g_pMarder->Render(true, true); mWorld.Translate(-1.0f, -5.0f, 2.0f); g_pDevice->SetWorldTransform(&mWorld); g_pLeopard2->Render(true, true); mWorld.Translate(1.1f, -0.6f, 1.0f); g_pDevice->SetWorldTransform(&mWorld); g_pG3->Render(true, true); g_pDevice->FadeScreen(0.0f, 0.0f, 0.0f, 1.0f - fA); g_pDevice->SetMode(EMD_PERSPECTIVE, 0); /*if (g_pDevice->IsWindowed()) g_pDevice->DrawText(g_nFontID, 10, 10, 255, 255, 0, "ZFXEngine 2.0"); else { g_pDevice->GetResolution(&pt); g_pDevice->DrawText(g_nFontID, 10, 10, 255, 255, 0, "Screen: (%d,%d)", pt.x, pt.y); } */ // flip backbuffer to front g_pDevice->EndRendering(); return hr; } // Tick
/** * WinMain function to get the thing started. */ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WNDCLASSEX wndclass; HRESULT hr; HWND hWnd; MSG msg; // Set up window attributes wndclass.cbSize = sizeof(wndclass); wndclass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS; wndclass.lpfnWndProc = MsgProc; wndclass.cbClsExtra = 0; wndclass.cbWndExtra = 0; wndclass.hInstance = hInst; wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION); wndclass.hCursor = LoadCursor(NULL, IDC_ARROW); wndclass.hbrBackground = (HBRUSH)(COLOR_WINDOW); wndclass.lpszMenuName = NULL; wndclass.lpszClassName = g_szAppClass; wndclass.hIconSm = LoadIcon(NULL, IDI_APPLICATION); if(RegisterClassEx(&wndclass) == 0) return 0; // create window if (!(hWnd = CreateWindowEx(NULL, g_szAppClass, "Crancking up ZFXEngine...", WS_OVERLAPPEDWINDOW | WS_VISIBLE, GetSystemMetrics(SM_CXSCREEN)/2 -190, GetSystemMetrics(SM_CYSCREEN)/2 -140, 380, 280, NULL, NULL, hInst, NULL))) return 0; g_hWnd = hWnd; g_hInst = hInst; pLog = fopen("log_main.txt", "w"); // try to start the engine if (FAILED( hr = ProgramStartup("Direct3D"))) { fprintf(pLog, "error: ProgramStartup() failed\n"); g_bDone = true; } else if (hr == ZFX_CANCELED) { fprintf(pLog, "error: ProgramStartup() canceled by user \n"); g_bDone = true; } else g_pDevice->SetClearColor(0.1f, 0.3f, 0.1f); while (!g_bDone) { while(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } if (g_bIsActive) { if (g_pDevice->IsRunning()) { g_pDevice->BeginRendering(true,true,true); g_pDevice->EndRendering(); } } } // cleanup stuff ProgramCleanup(); UnregisterClass(g_szAppClass, hInst); // return back to windows return (int)msg.wParam; } // WinMain