blob: 919ab530fbd4ec0888263279c8e5ad5756a7bb68 (
plain) (
tree)
|
|
/******************************************************************/
/* This file is part of the homework assignments for CSCI-427/527 */
/* at The College of William & Mary and authored by Pieter Peers. */
/* No part of this file, whether altered or in original form, can */
/* be distributed or used outside the context of CSCI-427/527 */
/* without consent of either the College of William & Mary or */
/* Pieter Peers. */
/******************************************************************/
#ifndef _TEXTURE_BASE_H_
#define _TEXTURE_BASE_H_
#include "vec2d.h"
#include "image.h"
class texture_base : public image {
public:
//////////////////
// Constructors //
//////////////////
texture_base(bool repeat=true);
texture_base(const texture_base& src);
///////////////
// Operators //
///////////////
texture_base& operator=(const texture_base& src);
virtual image::value_type operator()(const vec2d& textureCoord) const = 0;
////////////////
// Inspectors //
////////////////
bool repeatEdge(void) const { return _repeat; }
bool wrapEdge(void) const { return !_repeat; }
/////////////
// Friends //
/////////////
friend void swap(texture_base& a, texture_base& b) { a._swap(b); }
friend std::ostream& operator<<(std::ostream& s, const texture_base& t)
{
t._print(s);
return s;
}
protected:
///////////////////////
// Protected Methods //
///////////////////////
virtual void _assign(const texture_base& src);
color& _at(signed int x, signed int y);
const color& _at(signed int x, signed int y) const;
private:
/////////////////////
// Private Methods //
/////////////////////
virtual void _print(std::ostream& s) const=0;
//////////////////
// Data Members //
//////////////////
bool _repeat;
};
#endif /* _TEXTURE_BASE_H_ */
|