Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2018)

Unified Diff: experimental/flocking_geese/nacl_app/flock.cc

Issue 10928195: First round of dead file removal (Closed) Base URL: https://github.com/samclegg/nativeclient-sdk.git@master
Patch Set: Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: experimental/flocking_geese/nacl_app/flock.cc
diff --git a/experimental/flocking_geese/nacl_app/flock.cc b/experimental/flocking_geese/nacl_app/flock.cc
deleted file mode 100644
index 1cc90a8a7e0b8dd731f8b1e1746b43f75372c1cc..0000000000000000000000000000000000000000
--- a/experimental/flocking_geese/nacl_app/flock.cc
+++ /dev/null
@@ -1,180 +0,0 @@
-// Copyright (c) 2011 The Native Client Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "nacl_app/flock.h"
-
-#include <algorithm>
-#include <cmath>
-#include <cstring>
-#include <string>
-
-#include "nacl_app/scoped_pixel_lock.h"
-#include "ppapi/cpp/size.h"
-#include "threading/scoped_mutex_lock.h"
-
-namespace {
-const uint32_t kBackgroundColor = 0xFFFFFFFF; // Opaque white.
-
-// Throttle the simulation to run a fixed number of ticks per Render() call.
-const int32_t kSimulationTicksPerRender = 16;
-
-// The goose sprites rotate in increments of 5 degrees.
-const double kGooseHeadingIncrement = (5.0 * M_PI) / 180.0;
-} // namespace
-
-namespace flocking_geese {
-
-Flock::Flock() : flock_simulation_thread_(NULL),
- sim_state_condition_(kSimulationStopped),
- simulation_mode_(kPaused),
- tick_counter_(0) {
- pthread_mutex_init(&flock_simulation_mutex_, NULL);
-}
-
-Flock::~Flock() {
- set_is_simulation_running(false);
- if (flock_simulation_thread_) {
- pthread_join(flock_simulation_thread_, NULL);
- }
- pthread_mutex_destroy(&flock_simulation_mutex_);
-}
-
-void Flock::StartSimulation() {
- pthread_create(&flock_simulation_thread_, NULL, FlockSimulation, this);
-}
-
-void Flock::set_simulation_mode(Flock::SimulationMode new_mode) {
- simulation_mode_.Lock();
- if (new_mode == kRunning)
- set_tick_counter(0);
- simulation_mode_.UnlockWithCondition(new_mode);
-}
-
-Flock::SimulationMode Flock::WaitForRunMode() {
- simulation_mode_.LockWhenCondition(kRunning);
- simulation_mode_.Unlock();
- return simulation_mode();
-}
-
-void Flock::SetAttractorAtIndex(const Vector2& attractor, size_t index) {
- if (index >= attractors_.size()) {
- attractors_.resize(index + 1, Vector2());
- }
- attractors_[index] = attractor;
-}
-
-void Flock::Resize(const pp::Size& size) {
- flockBounds_.SetRect(0, 0,
- std::max(size.width(), 0),
- std::max(size.height(), 0));
-}
-
-void Flock::ResetFlock(size_t size, const Vector2& initialLocation) {
- threading::ScopedMutexLock scoped_mutex(simulation_mutex());
- if (!scoped_mutex.is_valid())
- return;
- geese_.resize(size + 1);
- geese_.assign(size, Goose(initialLocation));
- frame_counter_.Reset();
-}
-
-void Flock::SimulationTick() {
- frame_counter_.BeginFrame();
- for (std::vector<Goose>::iterator goose = geese_.begin();
- goose < geese_.end();
- ++goose) {
- goose->SimulationTick(geese_, attractors_, flockBounds_);
- }
- frame_counter_.EndFrame();
-}
-
-void Flock::Render() {
- ScopedPixelLock scoped_pixel_lock(shared_pixel_buffer_);
- uint32_t* pixel_buffer = scoped_pixel_lock.pixels();
- if (pixel_buffer == NULL || goose_sprite_ == NULL) {
- // Note that if the pixel buffer never gets initialized, this won't ever
- // paint anything. Which is probably the right thing to do. Also, this
- // clause means that the image will not get the very first few sim cells,
- // since it's possible that this thread starts before the pixel buffer is
- // initialized.
- return;
- }
- // Clear out the pixel buffer, then render all the geese.
- pp::Rect canvas_bounds(pp::Point(), shared_pixel_buffer_->size());
- int32_t canvas_width = canvas_bounds.size().width();
- int32_t canvas_height = canvas_bounds.size().height();
- const size_t pixel_count = canvas_width * canvas_height;
- std::fill(pixel_buffer, pixel_buffer + pixel_count, kBackgroundColor);
- threading::ScopedMutexLock scoped_mutex(simulation_mutex());
- if (!scoped_mutex.is_valid())
- return;
-
- int32_t sprite_stamp_width = goose_sprite_->size().height();
- pp::Rect sprite_src_rect(0, 0,
- sprite_stamp_width, goose_sprite_->size().height());
- for (std::vector<Goose>::const_iterator goose = geese_.begin();
- goose < geese_.end();
- ++goose) {
- pp::Point dest_point(goose->location().x() - sprite_stamp_width / 2,
- goose->location().y() - sprite_stamp_width / 2);
- double heading = goose->velocity().Heading();
- if (heading < 0.0)
- heading = M_PI * 2.0 + heading;
- int32_t sprite_index =
- static_cast<int32_t>(heading / kGooseHeadingIncrement) *
- sprite_stamp_width;
- sprite_src_rect.set_x(sprite_index);
- goose_sprite_->CompositeFromRectToPoint(
- sprite_src_rect,
- pixel_buffer, canvas_bounds, 0,
- dest_point);
- }
-
- // Hack: draw a blue rectangle at each attractor.
- // TODO(dspringer): This is ridiculous. Fix this when a proper graphics lib
- // available.
- for (std::vector<Vector2>::const_iterator attractor = attractors_.begin();
- attractor < attractors_.end();
- ++attractor) {
- int32_t x = std::max(static_cast<int32_t>(attractor->x()) - 2, 0);
- int32_t y = std::max(static_cast<int32_t>(attractor->y()) - 2, 0);
- int32_t w = 4, h = 4;
- int32_t rw = canvas_width;
- if (x + w >= rw) { x = rw - 1 - w; }
- if (y + h >= canvas_height) { y = canvas_height - 1 - h; }
- uint32_t* rect = pixel_buffer + y * rw + x;
- for (int32_t row = 0; row < h; ++row) {
- uint32_t* scanline = rect;
- rect += rw;
- *scanline++ = 0xFF0000FF;
- *scanline++ = 0xFF0000FF;
- *scanline++ = 0xFF0000FF;
- *scanline++ = 0xFF0000FF;
- }
- }
-
- if (simulation_mode() == kRenderThrottle) {
- set_simulation_mode(kRunning);
- }
-}
-
-void* Flock::FlockSimulation(void* param) {
- Flock* flock = static_cast<Flock*>(param);
- // Run the Life simulation in an endless loop. Shut this down when
- // is_simulation_running() returns |false|.
- flock->set_is_simulation_running(true);
- flock->set_tick_counter(0);
- while (flock->is_simulation_running()) {
- flock->WaitForRunMode();
- flock->SimulationTick();
- // Throttle the simulation so it doesn't outrun the browser by too much.
- if (flock->increment_tick_counter() > kSimulationTicksPerRender) {
- flock->set_simulation_mode(kRenderThrottle);
- }
- //flock->Render();
- }
- return NULL;
-}
-} // namespace flocking_geese
-
« no previous file with comments | « experimental/flocking_geese/nacl_app/flock.h ('k') | experimental/flocking_geese/nacl_app/flocking_geese_app.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698