root/native_client_sdk/src/examples/demo/flock/sprite.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SPRITE_H_
#define SPRITE_H_

#include <vector>
#include "ppapi/cpp/point.h"
#include "ppapi/cpp/rect.h"
#include "ppapi/cpp/size.h"


// A Sprite is a simple container of a pixel buffer.  It knows how to
// composite itself to another pixel buffer of the same format.
class Sprite {
 public:
  // Initialize a Sprite to use the attached pixel buffer.  The Sprite takes
  // ownership of the pixel buffer, deleting it in the dtor.  The pixel
  // buffer is assumed to be 32-bit ARGB-8-8-8-8 pixel format, with pre-
  // multiplied alpha.  If |row_bytes| is 0, then the number of bytes per row
  // is assumed to be size.width() * sizeof(uint32_t).
  Sprite(uint32_t* pixel_buffer, const pp::Size& size, int32_t stride = 0);

  // Delete the pixel buffer.  It is assumed that the pixel buffer was created
  // using malloc().
  ~Sprite();

  // Reset the internal pixel buffer to a new one.  Deletes the old pixel
  // buffer.  Sprite takes ownership of the new pixel buffer.  If |row_bytes|
  // is 0, then the number of bytes per row is assumed to be size.width() *
  // sizeof(uint32_t).
  void SetPixelBuffer(uint32_t* pixel_buffer,
                      const pp::Size& size,
                      int32_t row_bytes);

  // Composite the section of the Sprite contained in |src_rect| into the given
  // pixel buffer at |dest_point|.  Performs an average of the source and
  // dest pixel, and all necessary clipping.
  void CompositeFromRectToPoint(const pp::Rect& src_rect,
                                uint32_t* dest_pixel_buffer,
                                const pp::Rect& dest_bounds,
                                int32_t dest_row_bytes,
                                const pp::Point& dest_point) const;

  // Accessors.
  const pp::Size& size() const {
    return pixel_buffer_size_;
  }

 private:
  uint32_t* pixel_buffer_;
  pp::Size pixel_buffer_size_;
  int32_t row_bytes_;
};

#endif  // SPRITE_H_

/* [<][>][^][v][top][bottom][index][help] */