All pastes #473852 Raw Edit

Drazek

public cpp v1 · immutable
·published 2007-05-06 13:33 UTC
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();}