Revan1985
Registrato: 26/01/07 20:37 Messaggi: 262 Residenza: Solbiate Olona
|
Inviato: Sab Feb 07, 2009 12:40 am Oggetto: [C++]Classizzare la struttura principale di Irrlicht |
|
|
Questo codice vi fornisce le basi per poter crare una classizzazione minima e semplicistica di Irrlicht...
L'ho fatta per mia comodità, cosi da poter riutilizzare ciò che mi serve tutte le volte, senza riscrivere da capo tutto...
Allora, iniziamo :
La classe principale, CApplication, contiene la struttura di base di un'applicazione Irrlicht
CApplication.h
| Codice: |
#pragma once
#include "stdafx.h"
using namespace irr;
using namespace io;
using namespace gui;
using namespace core;
using namespace scene;
using namespace video;
class CApplication
{
public:
CApplication();
~CApplication(){ Release(); }
bool Init(int width, int height, bool fullscreen);
void Release();
void Run();
private:
IrrlichtDevice* m_pDevice;
ISceneManager* m_pSmgr;
IGUIEnvironment* m_pEnv;
IVideoDriver* m_pDriver;
int m_iFPS;
void SetCaption();
};
|
Come potete vedere, ho inserito il minimo indispensabile per far girare Irrlicht, dall'inizializzazione [bool Init], al ciclo vero e proprio[void Run]
qui, l'implementazione
CApplication.h
| Codice: |
#include "stdafx.h"
#include "CApplication.h"
/* */
CApplication::CApplication()
{
m_pDevice = NULL;
m_pEnv = NULL;
m_pDriver = NULL;
m_pSmgr = NULL;
}
/* */
void CApplication::Release()
{
if(m_pDevice){ m_pDevice->drop(); }
}
/* */
bool CApplication::Init(int width, int height, bool fullscreen)
{
m_pDevice = createDevice(EDT_DIRECT3D9, dimension2d<s32>(width, height), 16, fullscreen);
if(m_pDevice == NULL){ return false; }
m_pEnv = m_pDevice->getGUIEnvironment();
m_pDriver = m_pDevice->getVideoDriver();
m_pSmgr = m_pDevice->getSceneManager();
m_iFPS = m_pDriver->getFPS();
return true;
}
/* */
void CApplication::Run()
{
while(m_pDevice->run())
{
if(m_pDevice->isWindowActive())
{
m_pDriver->beginScene();
m_pSmgr->drawAll();
m_pEnv->drawAll();
m_pDriver->endScene();
SetCaption();
}
else
{
m_pDevice->yield();
}
}
}
/* */
void CApplication::SetCaption()
{
int fps = m_pDriver->getFPS();
if(fps != m_iFPS)
{
stringw title = "DOM3D DriverType: ";
title += m_pDriver->getDriverType();
title += " FPS: ";
title += fps;
m_pDevice->setWindowCaption(title.c_str());
m_iFPS = fps;
}
}
|
come vedete, è davvero molto semplice, cosi da permettere il più possibile una modifica senza dolori...
sarà molto utile anche per inserire altri elementi, come la gestione degli input, la gestione di classi esterne, o altri elementi...
qui, il codice del main [sono 7 righe tipo ]
main.cpp
| Codice: |
#include "stdafx.h"
#include "CApplication.h"
int main(int argc, char** argv)
{
CApplication app;
if(!app.Init(800, 600, false)){ return false; }
app.Run();
return 0;
}
|
lo stdafx.h ha solo l'include di irrlicht ^^'
per la cronaca, il main non andrà toccato, ma andranno aggiunte cose solo al CApplication...
più avanti vi darò altre implementazioni  _________________ Processore: AMD Phenom 9950 x4 @2.6ghz Black Edition
RAM : DDR2 800Mhz PC6400 4GB CORSAIR TWIN2X KIT CL4 XMS2 DHX (2x2GB)
Scheda Video: ATI HD4870 Club3D 1024MB OC PCI-E 2xDVI/TV DDR5
HD : 1 SATA 500GB + 1 EIDE 500GB + 1 EIDE External 250gb
Scheda Madre: ASROCK AM2+ AOD790GX/128M
Alimentatore: Corsair CMPSU-850TXEU 850W
Ventola Raffreddamento: Scythe Katana 2 AM2/754/939/940/478/775
Case: Mozart TX Silver |
|