
#ifndef _JL_JLFilm_H_
#define _JL_JLFilm_H_

#include <stdlib.h>
#include <iostream.h>

#include "vec4.h"
#include "glpic.h"

class JLFilm {

	private:
		Vec4	_c00;	// bottom left
		Vec4	_c10;	// bottom right
		Vec4	_c01;	// upper left
		Vec4	_c11;	// upper right

		int		_x_pixels;
		int		_y_pixels;

		GLPic	*_pic;

	public: 
		JLFilm();
		JLFilm(const JLFilm &J) { CopyFrom(J); }
		virtual ~JLFilm();

		JLFilm& CopyFrom(const JLFilm&);
		JLFilm& operator=(const JLFilm &J) { return CopyFrom(J); }

		friend ostream& operator<<(ostream&, const JLFilm&);

		Vec4& c00() { return _c00; }
		Vec4& c10() { return _c10; }
		Vec4& c01() { return _c01; }
		Vec4& c11() { return _c11; }

		const Vec4& c00() const { return _c00; }
		const Vec4& c10() const { return _c10; }
		const Vec4& c01() const { return _c01; }
		const Vec4& c11() const { return _c11; }

		void SetPosition(Vec4 &c00, Vec4 &c10, Vec4 &c01, Vec4 &c11) {
				_c00 = c00;
				_c10 = c10;
				_c01 = c01;
				_c11 = c11;
			}

		void SetPosition(Vec4 &Eye, Vec4 &LookAt, Vec4 &Up,
				 float x_degrees, float y_degrees);

		void SetResolution(int x, int y) {
				_x_pixels = x;
				_y_pixels = y;
			}

		void CreatePicture() {
				if (!_pic)
					_pic = new GLPic();
				_pic->New(_x_pixels, _y_pixels);
			}

		GLPic* GetPicture() { return _pic; }

		void CalcSamplePoint(float s, float t, Vec4 &v);
		void CalcPixelPoint(int x, int y, Vec4 &v);

		void CalcPixelPointWithJitter(int x, int y, Vec4 &v);
};

#endif
