//----------------------------------------------------------------------------- // Name: Render() // Desc: Draws the scene //----------------------------------------------------------------------------- VOID Render() { PROFILE_FUNCTION(); ONCE( LOG_PRINT( " Entered" ) ); LPDIRECT3DDEVICE9 pd3dDevice = DIRECT3D9.GetDevice(); D3DXMATRIX matWorld; D3DXMatrixIdentity( &matWorld ); pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld ); g_Camera.SetPose( g_CameraController.GetPose() ); ShaderManagerHub.PushViewAndProjectionMatrices( g_Camera ); D3DXMATRIX mat; g_Camera.GetCameraMatrix( mat ); // g_pTest->UpdateViewTransform( mat ); g_Camera.GetProjectionMatrix( mat ); // g_pTest->UpdateProjectionTransform( mat ); // clear the backbuffer to a blue color pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET|D3DCLEAR_ZBUFFER, 0xFF303030, 1.0f, 0 ); // begin the scene pd3dDevice->BeginScene(); if( g_pTest ) g_pTest->Render( g_Camera ); // rendering char acStr[256]; sprintf( acStr, "%f", GlobalTimer().GetFPS() ); g_pFont->DrawText( acStr, Vector2(20,20), 0xFFFFFFFF ); // g_pFont->DrawText( to_string(GlobalTimer().GetFPS()), D3DXVECTOR2(20,20), 0xFFFFFFFF ); int i=0; const vector<string>& vecProfileResults = GetProfileText(); BOOST_FOREACH( const string& text, vecProfileResults ) { g_pFont->DrawText( text.c_str(), Vector2( 20, 40 + i*16 ), 0xF0F0F0FF ); i++; }
void ribi::DrawCanvas::Test() noexcept { { static bool is_tested = false; if (is_tested) return; is_tested = true; } TRACE("Starting ribi::DrawCanvas::Test"); //Drawing text { const int maxx = 90; const int maxy = 18; const boost::shared_ptr<DrawCanvas> canvas(new DrawCanvas(maxx,maxy,CanvasColorSystem::invert)); std::stringstream s_before; s_before << (*canvas); const std::string str_before {s_before.str() }; assert(static_cast<int>(str_before.size()) - maxy == maxx * maxy); //-maxy, as newlines are added assert(std::count(str_before.begin(),str_before.end(),' ') == maxx * maxy); //Only spaces canvas->DrawText(1,1,"Hello world"); std::stringstream s_after; s_after << (*canvas); const std::string str_after {s_after.str() }; assert(std::count(str_after.begin(),str_after.end(),' ') != maxx * maxy); //Line trly drawn } //Is a line that starts and ends beyond the canvas drawn? { const int maxx = 3; const int maxy = 4; const boost::shared_ptr<DrawCanvas> canvas(new DrawCanvas(maxx,maxy,CanvasColorSystem::invert)); std::stringstream s_before; s_before << (*canvas); const std::string str_before {s_before.str() }; assert(static_cast<int>(str_before.size()) - maxy == maxx * maxy); //-maxy, as newlines are added assert(std::count(str_before.begin(),str_before.end(),' ') == maxx * maxy); //Only spaces canvas->DrawLine(-maxx,-maxy,maxx*2.0,maxy*2.0); std::stringstream s_after; s_after << (*canvas); const std::string str_after {s_after.str() }; assert(std::count(str_after.begin(),str_after.end(),' ') != maxx * maxy); //Line trly drawn } //Draw a smiley is all coordinat- and colorsystem combinations, Clear for (int i=0; i!=4; ++i) { const int maxx = 79; const int maxy = 23; const boost::shared_ptr<DrawCanvas> canvas(new DrawCanvas(maxx,maxy)); canvas->SetColorSystem( i % 2 ? CanvasColorSystem::normal : CanvasColorSystem::invert); canvas->SetCoordinatSystem( i / 2 ? CanvasCoordinatSystem::screen : CanvasCoordinatSystem::graph); //Determine and calculate dimensions and coordinats of smiley const double maxxD = static_cast<double>(maxx); const double maxyD = static_cast<double>(maxy); const double midX = 0.50 * maxxD; const double midY = 0.50 * maxyD; const double headRay = 0.50 * maxyD; const double eyeLeftX = 0.50 * maxxD - (0.35 * headRay) ; const double eyeLeftY = 0.50 * maxyD - (0.25 * headRay) ; const double eyeRightX = 0.50 * maxxD + (0.35 * headRay) ; const double eyeRightY = 0.50 * maxyD - (0.25 * headRay) ; const double eyeRay = 0.30 * headRay; const double mouthLeftX = 0.50 * maxxD - (0.7 * headRay) ; const double mouthMidX = 0.50 * maxxD; const double mouthRightX = 0.50 * maxxD + (0.7 * headRay) ; const double mouthLeftY = 0.50 * maxyD + (0.2 * headRay) ; const double mouthMidY = 0.50 * maxyD + (0.7 * headRay) ; const double mouthRightY = 0.50 * maxyD + (0.2 * headRay) ; //Draw the image on DrawCanvas canvas->DrawCircle(midX, midY, headRay); canvas->DrawCircle(eyeLeftX, eyeLeftY, eyeRay); canvas->DrawDot(eyeLeftX, eyeLeftY); canvas->DrawCircle(eyeRightX, eyeRightY, eyeRay); canvas->DrawDot(eyeRightX, eyeRightY); canvas->DrawLine(mouthLeftX, mouthLeftY, mouthMidX, mouthMidY); canvas->DrawLine(mouthMidX, mouthMidY, mouthRightX, mouthRightY); canvas->DrawLine(mouthRightX, mouthRightY, mouthLeftX, mouthLeftY); { std::stringstream s; s << (*canvas); assert(!s.str().empty()); } canvas->Clear(); { canvas->SetColorSystem(CanvasColorSystem::invert); //Background = Black std::stringstream s; s << (*canvas); const std::string t { s.str() }; assert(std::count(t.begin(),t.end(),' ') == canvas->GetWidth() * canvas->GetHeight()); } } //Saving and loading { const int maxx = 2; const int maxy = 3; const boost::shared_ptr<DrawCanvas> canvas(new DrawCanvas(maxx,maxy,CanvasColorSystem::invert)); canvas->DrawLine(-maxx,-maxy,maxx*2.0,maxy*2.0); const boost::shared_ptr<const DrawCanvas> old_canvas { new DrawCanvas(canvas->GetGreynesses(),canvas->GetColorSystem(),canvas->GetCoordinatSystem()) }; assert( old_canvas != canvas); assert(*old_canvas == *canvas); const std::string temp_filename { fileio::GetTempFileName() }; canvas->Save(temp_filename); canvas->Clear(); assert(*old_canvas != *canvas); const boost::shared_ptr<const DrawCanvas> new_canvas { new DrawCanvas(temp_filename) }; assert(*old_canvas == *new_canvas); } TRACE("Finished ribi::DrawCanvas::Test successfully"); }