wiesel / src / common / wiesel / screen.h

/**
 * Copyright (C) 2012
 * Christian Fischer
 *
 * https://bitbucket.org/baldur/wiesel/
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 3 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General
 * Public License along with this library; if not, write to the
 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
 * Boston, MA 02110-1301 USA
 */
#ifndef __WIESEL_SCREEN_H__
#define __WIESEL_SCREEN_H__

#include <wiesel/wiesel-common.def>

#include <wiesel/geometry.h>
#include <wiesel/math/matrix.h>

namespace wiesel {

	/**
	 * @brief An abstract interface to the current screen.
	 */
	class WIESEL_COMMON_EXPORT Screen {
	public:
		Screen();
		virtual ~Screen();

		/// get the current screen size in pixels
		inline const dimension& getSize() const {
			return size;
		}

		/// get the current aspect ratio of the screen
		inline float getAspectRatio() const {
			return size.width / size.height;
		}

		/// get the renderer's projection matrix
		inline const matrix4x4& getProjectionMatrix() const {
			return projection;
		}

	// overridables
	public:
		/// called before rendering a frame
		virtual void preRender() = 0;

		/// called after rendering a frame
		virtual void postRender() = 0;

	// member functions
	protected:
		virtual void updateScreenSize(float w, float h);

	protected:
		matrix4x4	projection;
		dimension	size;
	};

}

#endif /* __WIESEL_SCREEN_H__ */
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.