//----------------------------------------------------------------------------- // Name: Run() // Desc: //----------------------------------------------------------------------------- INT CXBApplication::Run() { // OUTPUT_DEBUG_STRING( "XBApp: Running the application...\n" ); // Get the frequency of the timer LARGE_INTEGER qwTicksPerSec; QueryPerformanceFrequency( &qwTicksPerSec ); FLOAT fSecsPerTick = 1.0f / (FLOAT)qwTicksPerSec.QuadPart; // Save the start time LARGE_INTEGER qwTime, qwLastTime, qwElapsedTime; QueryPerformanceCounter( &qwTime ); qwLastTime.QuadPart = qwTime.QuadPart; LARGE_INTEGER qwAppTime, qwElapsedAppTime; qwAppTime.QuadPart = 0; qwElapsedTime.QuadPart = 0; qwElapsedAppTime.QuadPart = 0; // Run the game loop, animating and rendering frames for( ;; ) { //----------------------------------------- // Animate and render a frame //----------------------------------------- // Frame move the scene FrameMove(); // Render the scene Render(); } }
HRESULT CEngine::Render3D() { if( NULL == m_pd3dDevice ) return E_FAIL; //시간 업데이트 GetTimer().Tick(); Update(GetTimer().GetElapsedTime()); FrameMove(GetTimer().GetElapsedTime()); Render(); return S_OK; }
INT CAppGame::Proc(LC_HANDLE) { if(LC_FAILED(FrameMove())) return LC_EFAIL; if(LC_FAILED(Render())) return LC_EFAIL; m_pDev->Present(0,0,0,0); UpdateStatus(); return LC_OK; }
int Render3DEnvironment() { int ret; ret = FrameMove(); if( ret ){ _ASSERT( 0 ); return 1; } ret = Render(); if( ret ){ _ASSERT( 0 ); return 1; } return 0; }
//----------------------------------------------------------------------------- // Name: Run() // Desc: Handles the message loop and calls FrameMove() and Render() when // idle. //----------------------------------------------------------------------------- INT CMyApplication::Run() { MSG msg; // Message loop to run the app while( TRUE ) { if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ) { // Skip WM_KEYDOWN so they aren't handled by the dialog if( msg.message == WM_KEYDOWN ) continue; if( !IsDialogMessage( m_hWnd, &msg ) ) { TranslateMessage( &msg ); DispatchMessage( &msg ); } if( msg.message == WM_QUIT ) { DestroyWindow( m_hWnd ); break; } } else { // Update the time variables m_fTime = DXUtil_Timer( TIMER_GETAPPTIME ); m_fElapsedTime = DXUtil_Timer( TIMER_GETELAPSEDTIME ); // This app uses idle time processing for the game loop if( FAILED( FrameMove() ) ) SendMessage( m_hWnd, WM_DESTROY, 0, 0 ); if( FAILED( Render() ) ) SendMessage( m_hWnd, WM_DESTROY, 0, 0 ); Sleep( 20 ); } } FinalCleanup(); return (INT)msg.wParam; }
INT CGpApp::Proc(LC_HANDLE) { //LOGE("Proc-----------------------------------------------------------\n"); if(LC_FAILED(FrameMove())) return LC_EFAIL; if(LC_FAILED(Render())) return LC_EFAIL; #if !defined(__ANDROID__) m_pDev->Present(0,0,0,0); #endif UpdateStatus(); return LC_OK; }
void main(void) { // 內定使用DirectX 9來繪圖 char *device = "dx9"; void (*render)(void) = RenderFrameDX9; bool (*init_resource)(void) = InitResourceDX9; bool (*release_resource)(void) = ReleaseResourceDX9; void (*resize_func)(int width, int height) = ResizeWindowDX9; printf("Press\n(1) for Direct3D9\n(2) for OpenGL\n"); int c = getche(); switch(c) { default: case '1': render = RenderFrameDX9; init_resource = InitResourceDX9; release_resource = ReleaseResourceDX9; resize_func = ResizeWindowDX9; break; case '2': device = "opengl"; init_resource = InitResourceOpenGL; release_resource = ReleaseResourceOpenGL; render = RenderFrameOpenGL; resize_func = ResizeWindowOpenGL; break; } GutResizeFunc( resize_func ); // 在(100,100)的位置開啟一個大小為(512x512)的視窗 GutCreateWindow(100, 100, 512, 512, device); // 做OpenGL或DirectX初始化 if ( !GutInitGraphicsDevice(device) ) { printf("Failed to initialize %s device\n", device); exit(0); } // 設定方向光 g_Light.m_Position.Set(-3.0f, 0.0f, 5.0f); g_Light.m_Direction.Set(0.0f, 1.0f, 1.0f, 0.0f); g_Light.m_Direction.Normalize(); g_Light.m_Diffuse.Set(0.6f, 0.6f, 0.6f, 1.0f); //g_Light.m_Specular.Set(1.0f, 1.0f, 1.0f, 1.0f); g_Light.m_Specular.Set(0.0f, 0.0f, 0.0f, 1.0f); g_light_pos_x = g_Light.m_Position[0]; GutInputInit(); g_Control.SetCamera(Vector4(0.0f, 0.0f, 10.0f), Vector4(0.0f, 0.0f, 0.0f), Vector4(0.0f, 1.0f, 0.0f) ); g_Model.Load_ASCII("..\\..\\models\\teapot.gma"); // 載入shader if ( !init_resource() ) { release_resource(); printf("Failed to load resources\n"); exit(0); } // 主回圈 while( GutProcessMessage() ) { GetUserInput(); FrameMove(); render(); } // 卸載shader release_resource(); // 關閉OpenGL/DirectX繪圖裝置 GutReleaseGraphicsDevice(); }
HRESULT KG3DRotationCoordinateOld::Render() { HRESULT hResult = E_FAIL; /*if (!m_EntityList.GetSize()) return E_FAIL;*/ if (0 == m_pAttachScene->GetSelectionTool().GetSelectionCount()) { return E_FAIL; } D3DXMATRIX matWorldSave; D3DXMATRIX matWorld; D3DXMATRIX matParent; D3DXMATRIX matLocalIv; D3DXMATRIX matWorldMatrix; D3DXMATRIX matMatrix; IEKG3DSceneOutputWnd* pCurWnd = NULL; IEKG3DSceneOutputWnd* pRedWnd = NULL; m_pAttachScene->GetCurRenderWnd(&pRedWnd); m_pAttachScene->GetCurOutputWnd(&pCurWnd); if (pRedWnd != pCurWnd || pRedWnd == NULL) return S_OK; if(g_Switch.bNewSelection) return S_OK; FrameMove(); D3DXMatrixIdentity(&matWorld); KG3DRenderState R; R.SetRenderState(D3DRS_AMBIENT, 0xffffffff); R.SetRenderState(D3DRS_ZENABLE, D3DZB_FALSE); g_pd3dDevice->GetTransform(D3DTS_WORLD, &matWorldSave); R.SetRenderState(D3DRS_ALPHABLENDENABLE, TRUE); R.SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA); R.SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA); R.SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE); R.SetRenderState(D3DRS_SPECULARENABLE, TRUE); g_pd3dDevice->SetTexture(0, NULL); g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorld); D3DXVECTOR3 vCenter = D3DXVECTOR3(m_matCoord._41, m_matCoord._42, m_matCoord._43); D3DXVECTOR3 vNormal = D3DXVECTOR3(0.f, 1.f, 0.f); FLOAT fRadiu = 59.f * m_fZoom * GetScalingFactor(); D3DXVECTOR3 vCoordX = D3DXVECTOR3(m_matCoord._11, m_matCoord._12, m_matCoord._13); D3DXVECTOR3 vCoordY = D3DXVECTOR3(m_matCoord._21, m_matCoord._22, m_matCoord._23); D3DXVECTOR3 vCoordZ = D3DXVECTOR3(m_matCoord._31, m_matCoord._32, m_matCoord._33); D3DXMATRIX matProjSave; D3DXMATRIX matProj; KG3DCamera* pCamera = g_cGraphicsTool.GetCamera(); ASSERT(pCamera); FLOAT fFovY = 0.f; FLOAT fAspe = 0.f; FLOAT fNear = 0.f; FLOAT fFar = 0.f; pCamera->GetPerspective(&fFovY, &fAspe, &fNear, &fFar); fFar = D3DXVec3Length(&(pCamera->GetPosition() - vCenter)); D3DXMatrixPerspectiveFovLH(&matProj, fFovY, fAspe, fNear, fFar); g_pd3dDevice->GetTransform(D3DTS_PROJECTION, &matProjSave); if (pCamera->IsPerspective()) g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProj); // y if (m_dwCurrSelCoord == 0) g_cGraphicsTool.DrawCircle(vCenter, vCoordY, fRadiu, 0xfff2d900); else g_cGraphicsTool.DrawCircle(vCenter, vCoordY, fRadiu, 0xffc80000); // x if (m_dwCurrSelCoord == 1) g_cGraphicsTool.DrawCircle(vCenter, vCoordX, fRadiu, 0xfff2d900); else g_cGraphicsTool.DrawCircle(vCenter, vCoordX, fRadiu, 0xff0000c3); // z if (m_dwCurrSelCoord == 2) g_cGraphicsTool.DrawCircle(vCenter, vCoordZ, fRadiu, 0xfff2d900); else g_cGraphicsTool.DrawCircle(vCenter, vCoordZ, fRadiu, 0xff00cc00); g_pd3dDevice->SetTransform(D3DTS_PROJECTION, &matProjSave); //画出从开始到结束的三角扇形 if (m_dwCurrSelCoord == 0) g_cGraphicsTool.DrawFan(vCenter, vCoordY, fRadiu - 1.f, m_vBeginCross, m_fAngelY, 0x50000000); else if (m_dwCurrSelCoord == 1) g_cGraphicsTool.DrawFan(vCenter, vCoordX, fRadiu - 1.f, m_vBeginCross, m_fAngelX, 0x50000000); else if (m_dwCurrSelCoord == 2) g_cGraphicsTool.DrawFan(vCenter, vCoordZ, fRadiu - 1.f, m_vBeginCross, m_fAngelZ, 0x50000000); else ; g_pd3dDevice->SetTransform(D3DTS_WORLD, &matWorldSave); hResult = S_OK; return hResult; }
HRESULT RacorX5::Frame() { FrameMove(1.1f); Render(); return S_OK; }
/* Function that runs the application */ INT CXBApplicationEx::Run(CFileItemList &playlist) { CLog::Log(LOGNOTICE, "Running the application..." ); unsigned int lastFrameTime = 0; unsigned int frameTime = 0; const unsigned int noRenderFrameTime = 15; // Simulates ~66fps if (playlist.Size() > 0) { g_playlistPlayer.Add(0, playlist); g_playlistPlayer.SetCurrentPlaylist(0); KODI::MESSAGING::CApplicationMessenger::GetInstance().PostMsg(TMSG_PLAYLISTPLAYER_PLAY, -1); } // Run xbmc while (!m_bStop) { #ifdef HAS_PERFORMANCE_SAMPLE CPerformanceSample sampleLoop("XBApplicationEx-loop"); #endif //----------------------------------------- // Animate and render a frame //----------------------------------------- #ifdef XBMC_TRACK_EXCEPTIONS try { #endif lastFrameTime = XbmcThreads::SystemClockMillis(); Process(); //reset exception count #ifdef XBMC_TRACK_EXCEPTIONS } catch (const XbmcCommons::UncheckedException &e) { e.LogThrowMessage("CApplication::Process()"); throw; } catch (...) { CLog::Log(LOGERROR, "exception in CApplication::Process()"); throw; } #endif // Frame move the scene #ifdef XBMC_TRACK_EXCEPTIONS try { #endif if (!m_bStop) { FrameMove(true, m_renderGUI); } //reset exception count #ifdef XBMC_TRACK_EXCEPTIONS } catch (const XbmcCommons::UncheckedException &e) { e.LogThrowMessage("CApplication::FrameMove()"); throw; } catch (...) { CLog::Log(LOGERROR, "exception in CApplication::FrameMove()"); throw; } #endif // Render the scene #ifdef XBMC_TRACK_EXCEPTIONS try { #endif if (m_renderGUI && !m_bStop) { Render(); } else if (!m_renderGUI) { frameTime = XbmcThreads::SystemClockMillis() - lastFrameTime; if(frameTime < noRenderFrameTime) Sleep(noRenderFrameTime - frameTime); } #ifdef XBMC_TRACK_EXCEPTIONS } catch (const XbmcCommons::UncheckedException &e) { e.LogThrowMessage("CApplication::Render()"); throw; } catch (...) { CLog::Log(LOGERROR, "exception in CApplication::Render()"); throw; } #endif } // while (!m_bStop) Destroy(); CLog::Log(LOGNOTICE, "application stopped..." ); return m_ExitCode; }
HRESULT HelloShadowVolume::Frame() { FrameMove(0.0f); Render(); return S_OK; }
HRESULT RacorX4::Frame() { FrameMove(0.0f); Render(); return S_OK; }
//----------------------------------------------------------------------------- // Name: Run() // Desc: //----------------------------------------------------------------------------- INT CXBApplicationEx::Run() { CLog::Log(LOGNOTICE, "Running the application..." ); // Get the frequency of the timer LARGE_INTEGER qwTicksPerSec; QueryPerformanceFrequency( &qwTicksPerSec ); FLOAT fSecsPerTick = 1.0f / (FLOAT)qwTicksPerSec.QuadPart; // Save the start time LARGE_INTEGER qwTime, qwLastTime, qwElapsedTime; QueryPerformanceCounter( &qwTime ); qwLastTime.QuadPart = qwTime.QuadPart; LARGE_INTEGER qwAppTime, qwElapsedAppTime; qwAppTime.QuadPart = 0; qwElapsedTime.QuadPart = 0; qwElapsedAppTime.QuadPart = 0; BYTE processExceptionCount = 0; BYTE frameMoveExceptionCount = 0; BYTE renderExceptionCount = 0; #ifndef _DEBUG const BYTE MAX_EXCEPTION_COUNT = 10; #endif // Run the game loop, animating and rendering frames while (!m_bStop) { #ifdef HAS_PERFORMANCE_SAMPLE CPerformanceSample sampleLoop("XBApplicationEx-loop"); #endif //----------------------------------------- // Perform app timing //----------------------------------------- // Check Start button #ifdef HAS_GAMEPAD if ( m_DefaultGamepad.wPressedButtons & XINPUT_GAMEPAD_START ) #endif m_bPaused = !m_bPaused; // Get the current time (keep in LARGE_INTEGER format for precision) QueryPerformanceCounter( &qwTime ); qwElapsedTime.QuadPart = qwTime.QuadPart - qwLastTime.QuadPart; qwLastTime.QuadPart = qwTime.QuadPart; if ( m_bPaused ) qwElapsedAppTime.QuadPart = 0; else qwElapsedAppTime.QuadPart = qwElapsedTime.QuadPart; qwAppTime.QuadPart += qwElapsedAppTime.QuadPart; // Store the current time values as floating point m_fTime = fSecsPerTick * ((FLOAT)(qwTime.QuadPart)); m_fElapsedTime = fSecsPerTick * ((FLOAT)(qwElapsedTime.QuadPart)); m_fAppTime = fSecsPerTick * ((FLOAT)(qwAppTime.QuadPart)); m_fElapsedAppTime = fSecsPerTick * ((FLOAT)(qwElapsedAppTime.QuadPart)); //----------------------------------------- // Animate and render a frame //----------------------------------------- #ifndef _DEBUG try { #endif Process(); //reset exception count processExceptionCount = 0; #ifndef _DEBUG } catch (...) { CLog::Log(LOGERROR, "exception in CApplication::Process()"); processExceptionCount++; //MAX_EXCEPTION_COUNT exceptions in a row? -> bail out if (processExceptionCount > MAX_EXCEPTION_COUNT) { CLog::Log(LOGERROR, "CApplication::Process(), too many exceptions"); throw; } } #endif // Frame move the scene #ifndef _DEBUG try { #endif if (!m_bStop) FrameMove(); //reset exception count frameMoveExceptionCount = 0; #ifndef _DEBUG } catch (...) { CLog::Log(LOGERROR, "exception in CApplication::FrameMove()"); frameMoveExceptionCount++; //MAX_EXCEPTION_COUNT exceptions in a row? -> bail out if (frameMoveExceptionCount > MAX_EXCEPTION_COUNT) { CLog::Log(LOGERROR, "CApplication::FrameMove(), too many exceptions"); throw; } } #endif // Render the scene #ifndef _DEBUG try { #endif if (!m_bStop) Render(); //reset exception count renderExceptionCount = 0; #ifndef _DEBUG } catch (...) { CLog::Log(LOGERROR, "exception in CApplication::Render()"); renderExceptionCount++; //MAX_EXCEPTION_COUNT exceptions in a row? -> bail out if (renderExceptionCount > MAX_EXCEPTION_COUNT) { CLog::Log(LOGERROR, "CApplication::Render(), too many exceptions"); throw; } } #endif } Destroy(); CLog::Log(LOGNOTICE, "application stopped..." ); return 0; }
void CRenderDevice::on_idle () { if (!b_is_Ready) { Sleep (100); return; } #ifdef DEDICATED_SERVER u32 FrameStartTime = TimerGlobal.GetElapsed_ms(); #endif if (psDeviceFlags.test(rsStatistic)) g_bEnableStatGather = TRUE; else g_bEnableStatGather = FALSE; if(g_loading_events.size()) { if( g_loading_events.front()() ) g_loading_events.pop_front(); pApp->LoadDraw (); return; }else { if ( (!Device.dwPrecacheFrame) && (!g_SASH.IsBenchmarkRunning()) && g_bLoaded) g_SASH.StartBenchmark(); FrameMove ( ); } // Precache if (dwPrecacheFrame) { float factor = float(dwPrecacheFrame)/float(dwPrecacheTotal); float angle = PI_MUL_2 * factor; vCameraDirection.set (_sin(angle),0,_cos(angle)); vCameraDirection.normalize (); vCameraTop.set (0,1,0); vCameraRight.crossproduct (vCameraTop,vCameraDirection); mView.build_camera_dir (vCameraPosition,vCameraDirection,vCameraTop); } // Matrices mFullTransform.mul ( mProject,mView ); m_pRender->SetCacheXform(mView, mProject); //RCache.set_xform_view ( mView ); //RCache.set_xform_project ( mProject ); D3DXMatrixInverse ( (D3DXMATRIX*)&mInvFullTransform, 0, (D3DXMATRIX*)&mFullTransform); // *** Resume threads // Capture end point - thread must run only ONE cycle // Release start point - allow thread to run mt_csLeave.Enter (); mt_csEnter.Leave (); #ifdef ECO_RENDER // ECO_RENDER START static u32 time_frame = 0; u32 time_curr = timeGetTime(); u32 time_diff = time_curr - time_frame; time_frame = time_curr; u32 optimal = 10; if (Device.Paused() || IsMainMenuActive()) optimal = 32; if (time_diff < optimal) Sleep(optimal - time_diff); #else Sleep (0); #endif // ECO_RENDER END #ifdef SPAWN_ANTIFREEZE frame_timer.Start(); #endif #ifndef DEDICATED_SERVER Statistic->RenderTOTAL_Real.FrameStart (); Statistic->RenderTOTAL_Real.Begin (); if (b_is_Active) { if (Begin()) { seqRender.Process (rp_Render); if (psDeviceFlags.test(rsCameraPos) || psDeviceFlags.test(rsStatistic) || Statistic->errors.size()) Statistic->Show (); // TEST!!! //Statistic->RenderTOTAL_Real.End (); // Present goes here End (); } } Statistic->RenderTOTAL_Real.End (); Statistic->RenderTOTAL_Real.FrameEnd (); Statistic->RenderTOTAL.accum = Statistic->RenderTOTAL_Real.accum; #endif // #ifndef DEDICATED_SERVER // *** Suspend threads // Capture startup point // Release end point - allow thread to wait for startup point mt_csEnter.Enter (); mt_csLeave.Leave (); // Ensure, that second thread gets chance to execute anyway if (dwFrame!=mt_Thread_marker) { for (u32 pit=0; pit<Device.seqParallel.size(); pit++) Device.seqParallel[pit] (); Device.seqParallel.clear_not_free (); seqFrameMT.Process (rp_Frame); } #ifdef DEDICATED_SERVER u32 FrameEndTime = TimerGlobal.GetElapsed_ms(); u32 FrameTime = (FrameEndTime - FrameStartTime); /* string1024 FPS_str = ""; string64 tmp; strcat(FPS_str, "FPS Real - "); if (dwTimeDelta != 0) strcat(FPS_str, ltoa(1000/dwTimeDelta, tmp, 10)); else strcat(FPS_str, "~~~"); strcat(FPS_str, ", FPS Proj - "); if (FrameTime != 0) strcat(FPS_str, ltoa(1000/FrameTime, tmp, 10)); else strcat(FPS_str, "~~~"); */ u32 DSUpdateDelta = 1000/g_svDedicateServerUpdateReate; if (FrameTime < DSUpdateDelta) { Sleep(DSUpdateDelta - FrameTime); // Msg("sleep for %d", DSUpdateDelta - FrameTime); // strcat(FPS_str, ", sleeped for "); // strcat(FPS_str, ltoa(DSUpdateDelta - FrameTime, tmp, 10)); } // Msg(FPS_str); #endif // #ifdef DEDICATED_SERVER if (!b_is_Active) Sleep (1); }
/* Function that runs the application */ INT CXBApplicationEx::Run() { CLog::Log(LOGNOTICE, "Running the application..." ); unsigned int lastFrameTime = 0; unsigned int frameTime = 0; const unsigned int noRenderFrameTime = 15; // Simulates ~66fps #ifdef XBMC_TRACK_EXCEPTIONS BYTE processExceptionCount = 0; BYTE frameMoveExceptionCount = 0; BYTE renderExceptionCount = 0; const BYTE MAX_EXCEPTION_COUNT = 10; #endif // Run xbmc while (!m_bStop) { #ifdef HAS_PERFORMANCE_SAMPLE CPerformanceSample sampleLoop("XBApplicationEx-loop"); #endif //----------------------------------------- // Animate and render a frame //----------------------------------------- #ifdef XBMC_TRACK_EXCEPTIONS try { #endif lastFrameTime = XbmcThreads::SystemClockMillis(); Process(); //reset exception count #ifdef XBMC_TRACK_EXCEPTIONS processExceptionCount = 0; } catch (const XbmcCommons::UncheckedException &e) { e.LogThrowMessage("CApplication::Process()"); processExceptionCount++; //MAX_EXCEPTION_COUNT exceptions in a row? -> bail out if (processExceptionCount > MAX_EXCEPTION_COUNT) { CLog::Log(LOGERROR, "CApplication::Process(), too many exceptions"); throw; } } catch (...) { CLog::Log(LOGERROR, "exception in CApplication::Process()"); processExceptionCount++; //MAX_EXCEPTION_COUNT exceptions in a row? -> bail out if (processExceptionCount > MAX_EXCEPTION_COUNT) { CLog::Log(LOGERROR, "CApplication::Process(), too many exceptions"); throw; } } #endif // Frame move the scene #ifdef XBMC_TRACK_EXCEPTIONS try { #endif if (!m_bStop) FrameMove(true, m_renderGUI); //reset exception count #ifdef XBMC_TRACK_EXCEPTIONS frameMoveExceptionCount = 0; } catch (const XbmcCommons::UncheckedException &e) { e.LogThrowMessage("CApplication::FrameMove()"); frameMoveExceptionCount++; //MAX_EXCEPTION_COUNT exceptions in a row? -> bail out if (frameMoveExceptionCount > MAX_EXCEPTION_COUNT) { CLog::Log(LOGERROR, "CApplication::FrameMove(), too many exceptions"); throw; } } catch (...) { CLog::Log(LOGERROR, "exception in CApplication::FrameMove()"); frameMoveExceptionCount++; //MAX_EXCEPTION_COUNT exceptions in a row? -> bail out if (frameMoveExceptionCount > MAX_EXCEPTION_COUNT) { CLog::Log(LOGERROR, "CApplication::FrameMove(), too many exceptions"); throw; } } #endif // Render the scene #ifdef XBMC_TRACK_EXCEPTIONS try { #endif if (m_renderGUI && !m_bStop) Render(); else if (!m_renderGUI) { frameTime = XbmcThreads::SystemClockMillis() - lastFrameTime; if(frameTime < noRenderFrameTime) Sleep(noRenderFrameTime - frameTime); } #ifdef XBMC_TRACK_EXCEPTIONS //reset exception count renderExceptionCount = 0; } catch (const XbmcCommons::UncheckedException &e) { e.LogThrowMessage("CApplication::Render()"); renderExceptionCount++; //MAX_EXCEPTION_COUNT exceptions in a row? -> bail out if (renderExceptionCount > MAX_EXCEPTION_COUNT) { CLog::Log(LOGERROR, "CApplication::Render(), too many exceptions"); throw; } } catch (...) { CLog::Log(LOGERROR, "exception in CApplication::Render()"); renderExceptionCount++; //MAX_EXCEPTION_COUNT exceptions in a row? -> bail out if (renderExceptionCount > MAX_EXCEPTION_COUNT) { CLog::Log(LOGERROR, "CApplication::Render(), too many exceptions"); throw; } } #endif } // while (!m_bStop) Destroy(); CLog::Log(LOGNOTICE, "application stopped..." ); return m_ExitCode; }
void XViewSpline::Draw() { // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다. if( GetChain() ) { LPDIRECT3DSURFACE9 pBackBuffer = nullptr; GetChain()->GetBackBuffer( 0, D3DBACKBUFFER_TYPE_MONO, &pBackBuffer ); if( pBackBuffer ) { D3DDEVICE->SetRenderTarget( 0, pBackBuffer ); D3DDEVICE->Clear( 0, nullptr, D3DCLEAR_TARGET, XCOLOR_GRAY, 1.0f, 0 ); RECT rect; GetClientRect( &rect ); XE::SetProjection( rect.right-rect.left, rect.bottom-rect.top ); if(SUCCEEDED(D3DDEVICE->BeginScene())) { // FrameMove FrameMove(); // D3DXVECTOR2 v( 0, 0 ); // D3DXMATRIX mWorld, mRot, mTrans, mLocal; D3DXMatrixIdentity( &mWorld ); D3DXMatrixTranslation( &mWorld, vCenter.x, vCenter.y, 0 ); for( int i = 0; i < MAX_JOINT; ++i ) { JOINT *j = &m_listJoint[i]; // 관절부위에 원을 그림 D3DCOLOR col = XCOLOR_WHITE; if( m_idxSelected == i ) col = XCOLOR_RED; GRAPHICS->DrawCircle( j->m_vEnd.x, j->m_vEnd.y, 5.f, col ); // 관절끝 부위에 원을 그림 GRAPHICS->DrawLine( j->m_vStart.x, j->m_vStart.y, j->m_vEnd.x, j->m_vEnd.y, col ); // 관절 그림 // test { D3DXVECTOR2 vA; vA = D3DXVECTOR2( m_vMouse.x, m_vMouse.y ) - s_vC; float rDist = GetAngle( s_vB ) - GetAngle( vA ); if( rDist > D2R(180.f) ) rDist -= D2R(360.f); else if( rDist < D2R(-180.f) ) rDist += D2R(360.f); // draw GRAPHICS->DrawLine( s_vC.x - 100.f, s_vC.y, s_vC.x + 100.f, s_vC.y, XCOLOR_BLUE ); GRAPHICS->DrawLine( s_vC.x, s_vC.y - 100.f, s_vC.x, s_vC.y + 100.f, XCOLOR_BLUE ); // 십자선 GRAPHICS->DrawLine( s_vC.x, s_vC.y, s_vC.x + s_vB.x, s_vC.y + s_vB.y, XCOLOR_RED ); // 목표벡터 GRAPHICS->DrawLine( s_vC.x, s_vC.y, s_vC.x + vA.x, s_vC.y + vA.y, XCOLOR_WHITE ); // 시작 벡터 SE::g_pFDBasic->DrawString( s_vC.x + 5.f, s_vC.y + 5.f, XCOLOR_WHITE, _T("%f(%f)"), R2D(rDist), rDist ); } // info SE::g_pFDBasic->DrawString( 5.f, 5.f, XCOLOR_WHITE, _T("%d-%d"), (int)m_vMouse.x, (int)m_vMouse.y ); /* D3DXMatrixRotationZ( &mRot, j->m_rAngle ); D3DXMatrixTranslation( &mTrans, j->m_vLocal.x, j->m_vLocal.y, 0 ); mLocal = mRot * mTrans; mWorld = mLocal * mWorld; j->m_mWorld = mWorld; D3DXVECTOR2 v0 = D3DXVECTOR2( 0, 0 ); // 관절원점 D3DXVECTOR2 v1 = D3DXVECTOR2( LEN_JOINT, 0 ); // 관절끝위치 D3DXVECTOR2 v0T, v1T; D3DXVec2TransformCoord( &v0T, &v0, &mWorld ); D3DXVec2TransformCoord( &v1T, &v1, &mWorld ); // 관절부위에 원을 그림 D3DCOLOR col = XCOLOR_WHITE; if( m_idxSelected == i ) col = XCOLOR_RED; GRAPHICS->DrawCircle( v1T.x, v1T.y, 5.f, col ); // 관절부위에 원을 그림 GRAPHICS->DrawLine( v0T.x, v0T.y, v1T.x, v1T.y, col ); // 관절 그림 if( m_bDrawDebug ) { // SE::g_pFDBasic->DrawString( v1T.x + 20.f, v1T.y - 20.f, XCOLOR_WHITE, _T("%f"), j->dot ); // normal D3DXVECTOR2 v2T; v1 = j->m_vNormal * 50.f + v0T; // D3DXVec2TransformCoord( &v2T, &v1, &mWorld ); GRAPHICS->DrawLine( v0T.x, v0T.y, v1.x, v1.y, XCOLOR_BLUE ); // 노말벡터 // 힘벡터 v1 = j->m_vForce * 300.f; v2T = v1T + v1; GRAPHICS->DrawLine( v1T.x, v1T.y, v2T.x, v2T.y, XCOLOR_GREEN ); // 노말벡터 } */ } // D3DDEVICE->EndScene(); } GetChain()->Present( nullptr, nullptr, GetSafeHwnd(), nullptr, 0 ); pBackBuffer->Release(); } } }
/** call this function to advance using delta time return the desired elapsed time */ double CFrameRateController::FrameMoveDelta(double deltatime) { return FrameMove(m_fLastTime + deltatime); }
/* Function that runs the application */ INT CXBApplicationEx::Run() { CLog::Log(LOGNOTICE, "Running the application..." ); BYTE processExceptionCount = 0; BYTE frameMoveExceptionCount = 0; BYTE renderExceptionCount = 0; #ifndef _DEBUG const BYTE MAX_EXCEPTION_COUNT = 10; #endif // Run xbmc while (!m_bStop) { #ifdef HAS_PERFORMANCE_SAMPLE CPerformanceSample sampleLoop("XBApplicationEx-loop"); #endif //----------------------------------------- // Animate and render a frame //----------------------------------------- #ifndef _DEBUG try { #endif Process(); //reset exception count processExceptionCount = 0; #ifndef _DEBUG } catch (...) { CLog::Log(LOGERROR, "exception in CApplication::Process()"); processExceptionCount++; //MAX_EXCEPTION_COUNT exceptions in a row? -> bail out if (processExceptionCount > MAX_EXCEPTION_COUNT) { CLog::Log(LOGERROR, "CApplication::Process(), too many exceptions"); throw; } } #endif // Frame move the scene #ifndef _DEBUG try { #endif if (!m_bStop) FrameMove(); //reset exception count frameMoveExceptionCount = 0; #ifndef _DEBUG } catch (...) { CLog::Log(LOGERROR, "exception in CApplication::FrameMove()"); frameMoveExceptionCount++; //MAX_EXCEPTION_COUNT exceptions in a row? -> bail out if (frameMoveExceptionCount > MAX_EXCEPTION_COUNT) { CLog::Log(LOGERROR, "CApplication::FrameMove(), too many exceptions"); throw; } } #endif // Render the scene #ifndef _DEBUG try { #endif if (!m_bStop) Render(); //reset exception count renderExceptionCount = 0; #ifndef _DEBUG } catch (...) { CLog::Log(LOGERROR, "exception in CApplication::Render()"); renderExceptionCount++; //MAX_EXCEPTION_COUNT exceptions in a row? -> bail out if (renderExceptionCount > MAX_EXCEPTION_COUNT) { CLog::Log(LOGERROR, "CApplication::Render(), too many exceptions"); throw; } } #endif } // while (!m_bStop) Destroy(); CLog::Log(LOGNOTICE, "application stopped..." ); return 0; }