Irrlicht Italia Forum

Torna a IrrlichtItalia

Log inLog in
RegistratiRegistrati   FAQFAQ   CercaCerca   UtentiUtenti   GruppiGruppi   ProfiloProfilo   Messaggi privatiMessaggi privati

[C++]Classizzare la struttura principale di Irrlicht

 
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
Revan1985



Registrato: 26/01/07 20:37
Messaggi: 262
Residenza: Solbiate Olona

MessaggioInviato: Sab Feb 07, 2009 12:40 am    Oggetto: [C++]Classizzare la struttura principale di Irrlicht Rispondi citando

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
Top
Profilo Invia messaggio privato MSN
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi



Powered by phpBB © 2001, 2005 phpBB Group, servizio offerto da AlterVista.org
Traduzione a cura di: phpbb.it