virtual void * getWindow () const {
return hWnd;
}
virtual Event * getEvent ();
virtual bool getKeyboardState ( KeyboardStateS );
virtual bool getMouseState ( MouseStateS );
virtual char * getVendor () ; virtual char * getRenderer (); virtual char * getVersion ();
virtual Texture * getScreenShot () const;
bool isVisible () const {
return visible,-
}

Пишем портальный рендерер (часть I)

Camera * getCamera () const {
return camera;
}
static int getBitDepth ();
// get bit depth of current display mode
static MetaClass classlnstance;
protected:
bool changeScreenResolution ( int theWidth,
int theHeight, int bpp );
void reshape ( int theWidth,
int theHeight );
bool createWindow ( int theWidth,
int theHeight, int bpp, bool isFullScreen, int depthBits =32 );
bool destroyWindow () ;
bool done ();
// clear handles and retrun false
void getDisplayModes ();
friend static LRESULT CALLBACK windowProc ( HWND hWnd,
UINT uMsg, WPARAM wParam, LPARAM lParam );

Данный класс обеспечивает использование двойной буферизации для получения плавной анимации без артефактов. Переключение буферов осуществляется при помощи вызовов lock/unlock. Когда происходит разблоки-|рование объекта (lockCount == 0), то буферы автоматически переключаются (это реализовано в методе doUnlock).

Таким образом, процесс построения изображения может быть представлен следующим образом:

^iew -> lock () ; [nodel -> render ( view ) ; iriew -> unlock () ;

Поскольку методы lock/unlock поддерживают вложенные вызовы, о любой объект, которому необходимо что-либо нарисовать, осуществляет ^локирование объекта "Вид", производит рисование, по завершении которо-о объект "Вид" разблокируется.

Для организации ввода в операционной системе Windows можно использовать библиотеку Directlnput, "завернув" ее предварительно в соответствующий класс, приводимый ниже.


⇐ Предыдущая| |Следующая ⇒