-typedef void (* PFN_GETCAMERA) ( vec3_t origin, vec3_t angles );
-typedef void (* PFN_SETCAMERA) ( vec3_t origin, vec3_t angles );
-typedef void (* PFN_GETCAMWINDOWEXTENTS) ( int *x, int *y, int *width, int *height );
+class Matrix4;
+
+class CameraView
+{
+public:
+virtual void setModelview( const Matrix4& modelview ) = 0;
+virtual void setFieldOfView( float fieldOfView ) = 0;
+};
+
+class CameraModel
+{
+public:
+STRING_CONSTANT( Name, "CameraModel" );
+virtual void setCameraView( CameraView* view, const Callback<void()>& disconnect ) = 0;
+};
+
+template<typename Element> class BasicVector3;
+typedef BasicVector3<float> Vector3;
+
+typedef void ( *PFN_GETCAMERA )( Vector3& origin, Vector3& angles );
+typedef void ( *PFN_SETCAMERA )( const Vector3& origin, const Vector3& angles );
+typedef void ( *PFN_GETCAMWINDOWEXTENTS )( int *x, int *y, int *width, int *height );