rendered paste body/* xForce BasicWindow Example 1.0.1 Kamil 'Drazek' Drazkiewicz Data : 13.01.07 Przyklad uzycia obiektu okna.*/// Pliki naglowkowe#pragma comment( lib, "../../../libs/xfcore.lib" )#include "../../../projects/Core/includes/xForceCore.h"// pomijamy xforceusing namespace xforce;/*Mimo ze standardowo jest mozliwosc stworzenia okna na bazie klasy BasicWindowjednak takie dzilanie jest bezcelowe gdyz nie bedziemy miec kontroli na glownymifunkcjami okna (OnRender(), OnResize() itp.), tak wiec nalezy stworzyx własnaklase dziedziczna do klasy BasicWindow stworzyc kod dla poszczegolnych funkcji.*/ GLuint GLTexture; struct Vertex{ float tex[2]; float xyz[3];}; TextureManager *TextureMgr = new TextureManager; Vertex cube[] ={ // sciana gorna { 0.0f, 0.0f, 1.0f, 1.0f,-1.0f }, { 1.0f, 0.0f, -1.0f, 1.0f,-1.0f }, { 1.0f, 1.0f, -1.0f, 1.0f, 1.0f }, { 0.0f, 1.0f, 1.0f, 1.0f, 1.0f }, // sciana dolna { 1.0f, 0.0f, 1.0f,-1.0f, 1.0f }, { 1.0f, 1.0f, -1.0f,-1.0f, 1.0f }, { 0.0f, 1.0f, -1.0f,-1.0f,-1.0f }, { 0.0f, 0.0f, 1.0f,-1.0f,-1.0f }, // sciana przednia { 0.0f, 3.0f, 1.0f, 1.0f, 1.0f }, { 0.0f, 0.0f, -1.0f, 1.0f, 1.0f }, { 3.0f, 0.0f, -1.0f,-1.0f, 1.0f }, { 3.0f, 3.0f, 1.0f,-1.0f, 1.0f }, // sciana tylna { 1.0f, 1.0f, 1.0f,-1.0f,-1.0f }, { 0.0f, 1.0f, -1.0f,-1.0f,-1.0f }, { 0.0f, 0.0f, -1.0f, 1.0f,-1.0f }, { 1.0f, 0.0f, 1.0f, 1.0f,-1.0f }, // sciana lewa { 1.0f, 0.0f, -1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, -1.0f, 1.0f,-1.0f }, { 0.0f, 1.0f, -1.0f,-1.0f,-1.0f }, { 0.0f, 0.0f, -1.0f,-1.0f, 1.0f }, // sciana prawa { 0.0f, 0.0f, 1.0f, 1.0f,-1.0f }, { 1.0f, 0.0f, 1.0f, 1.0f, 1.0f }, { 1.0f, 1.0f, 1.0f,-1.0f, 1.0f }, { 0.0f, 1.0f, 1.0f,-1.0f,-1.0f }};String ToString(int value) // Int{ String temp; char result[256]; sprintf(result,"%.i", value); temp = result; return temp;}class CWindow : public RenderWindow{public: CWindow() {} void windowClose(); // zamykanie void sceneRender(); // rendering void sceneCreate(); void windowResize(int w, int h) { if (h == 0) h = 1; float newAspect = (float)w / (float)h; this->getViewport(0)->setAspect(newAspect); this->getViewport(0)->setViewRectangle(0, 0, w, h); this->getViewport(0)->makeCurrentToRender(); }};void CWindow::sceneCreate(){ Texture wood; TextureMgr->loadFromFile( "data\wood.bmp", &wood, OGL::TEXTURE2D ); TextureMgr->GenerateTextures(); glInterleavedArrays(GL_T2F_V3F, 0, cube); glEnable( GL_DEPTH_TEST ); glDepthFunc( GL_LEQUAL );}void CWindow::sceneRender(){ glClearColor( 0.7f, 0.7f, 0.7f, 0.0f ); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear The Screen And The Depth Buffer glLoadIdentity(); // Reset The matrix // Position View Up Vector gluLookAt(0, 0, 6, 0, 0, 0, 0, 1, 0); // This determines where the camera's position and view is// OpenGLAPI->Enable(OGL::TEXTURE2D);// glBindTexture(GL_TEXTURE_2D, GLTexture); TextureMgr->get("wood")->Bind(); static float theta = 0.0f; float size = 1.75;/* glPushMatrix(); glBegin (GL_QUADS); // This is our BEGIN to draw glTexCoord2f(0,0); glVertex3f(-size, -size, -0); glTexCoord2f(0,1); glVertex3f(-size, size, -0); glTexCoord2f(1,1); glVertex3f(size, size, -0); glTexCoord2f(1,0); glVertex3f(size, -size, -0); glEnd(); glPopMatrix();*/ theta += 0.325f; glRotatef( theta, 1.0f, 1.0f, 1.0f ); glDrawArrays(GL_QUADS, 0, 24); glFlush();}void CWindow::windowClose(){ /* Blokujemy standarowa mozliwosc zamykaniecia sie aplikacji poprzez kombinacje klawisz ALT + F4 oraz przycisk 'x'. Dzieki temu mamy mozliwosc pokazania np okna potwierdzajacego zamkniecie lub calkowite zablokowanie i kontrolowanie zamkniecia okna klawiszami. */ if(MessageBox(*this->getHWND(),"Czy chcesz zamknąć aplikacje ?", "Zamykanie", MB_YESNO | MB_ICONQUESTION) == IDNO) { setQuitMessage(0); }}// Obiekt naszej własnej klasyCWindow *Window = new CWindow();// zmienna pomocniczastatic bool inited = false;static int test = 0;// xForce Simple Keyboard InputKeyboard *Input = new Keyboard();/* Standardowa funkcja main() w win32. Jest ona konieczna do obslugi oknagdyz przekazuje komunikaty miedzy oknem a systemem.*/int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { BMPImage screenshot; Colour m_grey(1.0f, 0.0f, 0.0f, 1.0f); if (!inited) { Window->create("xForce Sample", 400, 400, 32); inited = true; } Viewport* main_vp = Window->getViewport(0); main_vp->setBackgroundColour(m_grey); main_vp->makeCurrentToRender(); while (Window->loop()) { Input->update(); if (Input->keyPressed(keys::KEY_ESCAPE)) { Window->terminate(); // Window->close(); } if (Input->keyPressed(keys::KEY_F1)) { Window->enableFullscreen(1024, 768, 32);/* ImageData pxData; pxData.width = Window->width; pxData.height = Window->height; pxData.allocateMemory(Window->width * Window->height * 3); glPixelStorei(GL_PACK_ALIGNMENT, 1); glReadPixels(0, 0, Window->width, Window->height, GL_RGB, GL_UNSIGNED_BYTE, pxData.p_data); screenshot.saveFromDataObject("screenshot.bmp", &pxData);*/ } if (Input->keyDown()) { int key = Input->getKeyDown(); if (key == keys::KEY_NULL) { Window->setTitle("NULL KEY"); } else { Window->setTitle("Key : " + ToString(key)); } } Window->winAPIParms(hInstance, hPrevInstance, lpCmdLine, nCmdShow); } Window->release();}