При этом сам объект view отвечает за создание объекта для чтения информации с клавиатуры и мыши (как это ни странно, объект View является наиболее подходящим местом для создания такого объекта, так как он уже содержит в себе привязку к оконной системе, а, кроме того, объекты Model и Controller должны быть максимально абстрагированы от знания конкретного способа организации ввода-вывода).
В нашем рендерере мы будем использовать класс OpenGlView для работы с графическим ускорителем и оконной системой. Этот класс предназначен для работы с библиотекой OpenGL в операционной системе Windows.
Ниже приводится описание класса OpenGlView, служащего для обеспечения работы с библиотекой OpenGL в Windows.
!. class OpenGlView : public View i {
i private:
bool fullscreen; HINSTANCE hlnstance; HWND hWnd;
HDC hDC;
HGLRC hRC;
bool visible; float zNear; float zFar; unsigned lastTextureld; char keys [256] ;
int mouseX; int mouseY;
int mouseLeft, mouseRight, mouseMiddle;
Camera * camera;
InputReader * reader; Queue events; public:
OpenGlView ( const char * theName, HINSTANCE hlnst, Camera * theCamera, int theWidth, int theHeight, int bpp, bool toFullScreen = true );
-OpenGlView ();
virtual bool isOk () const {
return hWnd != NULL && hDC != NULL && hRC != NULL;
}
virtual void doLock () ; virtual void doUnlock ();
virtual bool registerTexture ( Texture * );
virtual void simpleDraw ( const Polygon3D& poly,
int mask = 0 ) ; virtual void initGL ();
virtual void setFullScreen ( bool toFullScreen ); virtual void setSize ( int newWidth,
int newHeight ) ,-virtual void startOrtho () ,-virtual void endOrtho () ,-
virtual void bindTexture ( Texture * ); virtual void blendFunc ( int src, int dst );
virtual void apply ( const Transform3D& ); virtual void apply ( const Cameras );