PMG
http://forum.pmg.org.ru/

Код инициализации движка.
http://forum.pmg.org.ru/viewtopic.php?f=19&t=3339
Страница 1 из 1

Автор:  Tiger [ 29 июн 2007 11:22 ]
Заголовок сообщения:  Код инициализации движка.

Вот решил выложить код инициализации движка:
Код:
#include "win.h"
#include "video.h"

#define KEY_DOWN(vk_code) ((GetAsyncKeyState(vk_code) & 0x8000) ? 1 : 0)
#define KEY_UP(vk_code)   ((GetAsyncKeyState(vk_code) & 0x8000) ? 0 : 1)
///////////////////////////////////////////////////////////////////////////

int main()
{
WinMain(0,0,0,0);
return 0;
}
///////////////////////////////////////////////////////////////////////////

int Init_Game()
{
Init_Video(800,600);
return 0;
}
///////////////////////////////////////////////////////////////////////////

int Game_Main()
{
Begin_Draw();
End_Draw();

if(KEY_DOWN(VK_ESCAPE))
{
PostMessage(hwnd,WM_DESTROY,0,0);
}
return 0;
}
///////////////////////////////////////////////////////////////////////////

int Shutdown_Game()
{
Shutdown_Video();
return 0;
}
///////////////////////////////////////////////////////////////////////////

Все желающие могут обсудить и высказать свое мнение. =)

Автор:  Assassin [ 29 июн 2007 12:11 ]
Заголовок сообщения: 

Если писать на С++,так уже писать на С++,а ты пишеш на С,тоесть процедурами!
Цитата:
#include "win.h"
#include "video.h"

жесть... лучшеб выглядело если б так: #include "TigerEngineAPI.h" - в котором прописаны все инклуды!
Это всё моё ИМХО.

Автор:  Tiger [ 29 июн 2007 13:01 ]
Заголовок сообщения: 

Цитата:
Если писать на С++,так уже писать на С++,а ты пишеш на С,тоесть процедурами!

Я не говорил, что буду писать на C++. Это чистый си. =)
Цитата:
жесть... лучшеб выглядело если б так: #include "TigerEngineAPI.h" - в котором прописаны все инклуды!
Это всё моё ИМХО.

Я старался написать как можна проше и короче. =)

Автор:  MagicWolf [ 29 июн 2007 17:22 ]
Заголовок сообщения: 

А где чтение конфигурации?

Автор:  Tiger [ 29 июн 2007 17:48 ]
Заголовок сообщения: 

Цитата:
А где чтение конфигурации?

Какой конфигурации и зачем?

Автор:  MagicWolf [ 02 июл 2007 13:00 ]
Заголовок сообщения: 

Какой видеорежим включить, какие у проги настройки ...

Автор:  Assassin [ 02 июл 2007 18:42 ]
Заголовок сообщения: 

Не понту ради,а ради искувства! 8)
CSample01.h
Код:
#pragma once
#pragma comment(lib,"../../unnamed/debug/Unnamed.lib")
#include "../../unnamed/unnamed/UnnamedAPI.h"
using namespace unnamed;
root::CRoot* m_root = new root::CRoot(); //main engine object
core::CCore* m_window;
video::IRenderDevice* m_device;
scene::CSceneManager* m_sceneMgr;
core::CInput* m_input;

class CSample01
{
public:
   CSample01(void);
public:
   ~CSample01(void);
};

CSample01.cpp
Код:
#include "CSample01.h"

CSample01::CSample01(void)
{
}

CSample01::~CSample01(void)
{
}
void init()
{
     m_window = m_root->createCore("Unnamed",800,600);
    m_device = m_root->createRenderDevice();
    m_sceneMgr = m_root->createSceneManager();
    m_input = m_window->createInput();
}
void draw()
{
   m_input->poll();
   if(m_input->keyDown(UK_W)) exit(1);
   m_device->beginFrame();

   m_device->endFrame();
}
void cleanup()
{
   m_device->cleanup();
}
int WINAPI WinMain( HINSTANCE hInstance,
               HINSTANCE hPrevInstance,
               LPSTR lpCmdLine,
               int nCmdShow )
{
   MSG        uMsg;
    memset(&uMsg,0,sizeof(uMsg));

    init();
    m_input->createInputDevice(hInstance);
   while( uMsg.message != WM_QUIT )
   {
      if( PeekMessage( &uMsg, NULL, 0, 0, PM_REMOVE ) )
      {
         TranslateMessage( &uMsg );
         DispatchMessage( &uMsg );
      }
        else
   draw();
      
   }
   cleanup();
};

by Assassin

Автор:  MagicWolf [ 03 июл 2007 08:43 ]
Заголовок сообщения: 

А если у тебя несколько окон в приложении и еще в каждом окне по несколько графических контекстов, причем в перемешку:OGL,DX,GDI ... Как тут быть?

Автор:  Assassin [ 03 июл 2007 11:27 ]
Заголовок сообщения: 

MagicWolf, Всё предусмотренно!
Класс CRoot
Код:
#pragma once
#include "../../video/renderdevice/inc/CRenderDevice.h"
#include "../../core/inc/CCore.h"
#include "../../scene/inc/CSceneManager.h"
namespace unnamed
{
   namespace root
   {
class CRoot
{
public:
   CRoot(void);
public:
   ~CRoot(void);
public:
   core::CCore* createCore(LPCSTR name,int16 width,int16 height);
   video::IRenderDevice* createRenderDevice();
   scene::CSceneManager* createSceneManager();
private:
   scene::CSceneManager* m_SceneMgr;
   video::IRenderDevice* m_RenderDevice;
   core::CCore* m_Core;
};
   };
};

Код:
#include "../inc/CRoot.h"
namespace unnamed
{
   namespace root
   {
CRoot::CRoot(void)
{
}

CRoot::~CRoot(void)
{
}
core::CCore* CRoot::createCore(LPCSTR name,int16 width,int16 height)
{
   m_Core = new core::CCore();
   m_Core->createWindow(name,width,height);
   return m_Core;
}      
video::IRenderDevice* CRoot::createRenderDevice()
{
   m_RenderDevice = new video::CRenderDevice();
   m_RenderDevice->createDevice(m_Core);
   return m_RenderDevice;
}
scene::CSceneManager* CRoot::createSceneManager()
{
   m_SceneMgr = new scene::CSceneManager();
   m_SceneMgr->setRenderDevice(m_RenderDevice->getDevice());
   return m_SceneMgr;
}
   };
};

Тоесть если девайс создавать через CRoot то тогда он автоматически связывается с созданным в CRoot окне,если нам нужно два и больше окна/девайса,есть два варианта:
1 - Создать ещё один CRoot
2 - Установит связь(Device<-->Window) в ручную.
Код:
m_Core->createWindow(name,width,height);
m_RenderDevice->createDevice(m_Core);

ВсЁ

Автор:  MagicWolf [ 03 июл 2007 11:49 ]
Заголовок сообщения: 

А обработка сообщений от win?

Автор:  Assassin [ 03 июл 2007 13:34 ]
Заголовок сообщения: 

Как то щас неочень мне это нужно!

Автор:  MagicWolf [ 03 июл 2007 15:31 ]
Заголовок сообщения: 

Core - это все же у тебе Window, RenderDevice - это ближе в Render3D, т.е. выбор типа либы для работы с 3D, SceneManager - это понятно. Но зачем тогда Root?

Автор:  Assassin [ 03 июл 2007 15:38 ]
Заголовок сообщения: 

MagicWolf,Связывает всё это между собой!

Страница 1 из 1 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/