|
|
@ -19,11 +19,26 @@ |
|
|
|
#include "OgreMeshManager2.h" |
|
|
|
|
|
|
|
#include "Compositor/OgreCompositorManager2.h" |
|
|
|
#include "OgreWindowEventUtilities.h" |
|
|
|
#pragma GCC diagnostic pop |
|
|
|
|
|
|
|
static Ogre::Root* root = nullptr; |
|
|
|
Ogre::Root* g_ogreRoot = nullptr; |
|
|
|
static Ogre::SceneManager* g_sceneManager = nullptr; |
|
|
|
static Ogre::Window* g_window = nullptr; |
|
|
|
|
|
|
|
bool g_graphicsIntialized = false; |
|
|
|
bool g_ogreWindowShouldQuit = false; |
|
|
|
|
|
|
|
class MyWindowEventListener : public Ogre::WindowEventListener |
|
|
|
{ |
|
|
|
public: |
|
|
|
virtual void windowClosed(Ogre::Window* window) |
|
|
|
{ |
|
|
|
g_ogreWindowShouldQuit = true; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
MyWindowEventListener g_myWindowEventListener; |
|
|
|
|
|
|
|
static void registerHlms(void) |
|
|
|
{ |
|
|
@ -118,7 +133,7 @@ static void registerHlms(void) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
void OgreInitialize() |
|
|
|
bool OgreInitialize() |
|
|
|
{ |
|
|
|
using namespace Ogre; |
|
|
|
|
|
|
@ -132,21 +147,21 @@ void OgreInitialize() |
|
|
|
const char* pluginsFile = "plugins.cfg"; |
|
|
|
#endif |
|
|
|
#endif |
|
|
|
root = OGRE_NEW Root(pluginsFolder + pluginsFile, //
|
|
|
|
writeAccessFolder + "ogre.cfg", //
|
|
|
|
writeAccessFolder + "Ogre.log"); |
|
|
|
g_ogreRoot = OGRE_NEW Root(pluginsFolder + pluginsFile, //
|
|
|
|
writeAccessFolder + "ogre.cfg", //
|
|
|
|
writeAccessFolder + "Ogre.log"); |
|
|
|
|
|
|
|
// This allows the user to configure the graphics. It's damn annoying during dev though
|
|
|
|
// TODO: Make this return false and quit the app
|
|
|
|
// if (!root->showConfigDialog())
|
|
|
|
// return; // false
|
|
|
|
// if (!g_ogreRoot->showConfigDialog())
|
|
|
|
// return false;
|
|
|
|
|
|
|
|
// Initialize Root
|
|
|
|
RenderSystem* renderSystem = root->getRenderSystemByName("OpenGL 3+ Rendering Subsystem"); |
|
|
|
RenderSystem* renderSystem = g_ogreRoot->getRenderSystemByName("OpenGL 3+ Rendering Subsystem"); |
|
|
|
if (!renderSystem) |
|
|
|
{ |
|
|
|
printf("Render system not found!\n"); |
|
|
|
return; |
|
|
|
return false; |
|
|
|
} |
|
|
|
|
|
|
|
// renderSystem->setConfigOption("Display Frequency", "N/A");
|
|
|
@ -154,8 +169,8 @@ void OgreInitialize() |
|
|
|
// renderSystem->setConfigOption("VSync", "Yes");
|
|
|
|
renderSystem->setConfigOption("Video Mode", "1920 x 1080"); |
|
|
|
renderSystem->setConfigOption("sRGB Gamma Conversion", "Yes"); |
|
|
|
root->setRenderSystem(renderSystem); |
|
|
|
Window* window = root->initialise(/*autoCreateWindow=*/true, "GameLib"); |
|
|
|
g_ogreRoot->setRenderSystem(renderSystem); |
|
|
|
g_window = g_ogreRoot->initialise(/*autoCreateWindow=*/true, "GameLib"); |
|
|
|
|
|
|
|
// Old bad attempt at Ogre within SFML (only party worked)
|
|
|
|
{ |
|
|
@ -183,20 +198,20 @@ void OgreInitialize() |
|
|
|
// int winHeight = 1080;
|
|
|
|
|
|
|
|
// Window* window =
|
|
|
|
// // root->createRenderWindow("GameLib", winWidth, winHeight, true, &windowSettings);
|
|
|
|
// root->createRenderWindow("GameLib", winWidth, winHeight, true);
|
|
|
|
// // g_ogreRoot->createRenderWindow("GameLib", winWidth, winHeight, true, &windowSettings);
|
|
|
|
// g_ogreRoot->createRenderWindow("GameLib", winWidth, winHeight, true);
|
|
|
|
|
|
|
|
// window->_setVisible(true);
|
|
|
|
// g_window->_setVisible(true);
|
|
|
|
} |
|
|
|
|
|
|
|
registerHlms(); |
|
|
|
|
|
|
|
// Create SceneManager
|
|
|
|
const size_t numThreads = 1u; |
|
|
|
SceneManager* sceneManager = root->createSceneManager(ST_GENERIC, numThreads, "SceneManager"); |
|
|
|
g_sceneManager = g_ogreRoot->createSceneManager(ST_GENERIC, numThreads, "SceneManager"); |
|
|
|
|
|
|
|
// Create & setup camera
|
|
|
|
Camera* camera = sceneManager->createCamera("Main Camera"); |
|
|
|
Camera* camera = g_sceneManager->createCamera("Main Camera"); |
|
|
|
|
|
|
|
// Position it at 500 in Z direction
|
|
|
|
camera->setPosition(Vector3(0, 5, 15)); |
|
|
@ -207,12 +222,12 @@ void OgreInitialize() |
|
|
|
camera->setAutoAspectRatio(true); |
|
|
|
|
|
|
|
// Setup a basic compositor with a blue clear colour
|
|
|
|
CompositorManager2* compositorManager = root->getCompositorManager2(); |
|
|
|
CompositorManager2* compositorManager = g_ogreRoot->getCompositorManager2(); |
|
|
|
const String workspaceName("Main Workspace"); |
|
|
|
// const IdString definitionNameId = workspaceName;
|
|
|
|
const ColourValue backgroundColour(0.2f, 0.4f, 0.6f); |
|
|
|
compositorManager->createBasicWorkspaceDef(workspaceName, backgroundColour, IdString()); |
|
|
|
compositorManager->addWorkspace(sceneManager, window->getTexture(), camera, workspaceName, |
|
|
|
compositorManager->addWorkspace(g_sceneManager, g_window->getTexture(), camera, workspaceName, |
|
|
|
true); |
|
|
|
|
|
|
|
// Mesh importing
|
|
|
@ -247,15 +262,15 @@ void OgreInitialize() |
|
|
|
// Create an Item with the model we just imported.
|
|
|
|
// Notice we use the name of the imported model. We could also use the overload
|
|
|
|
// with the mesh pointer:
|
|
|
|
// item = sceneManager->createItem( v2Mesh, Ogre::SCENE_DYNAMIC );
|
|
|
|
Ogre::Item* item = sceneManager->createItem( |
|
|
|
// item = g_sceneManager->createItem( v2Mesh, Ogre::SCENE_DYNAMIC );
|
|
|
|
Ogre::Item* item = g_sceneManager->createItem( |
|
|
|
"Chassis.mesh Imported", Ogre::ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME, |
|
|
|
Ogre::SCENE_DYNAMIC); |
|
|
|
// Ogre::SceneNode* rootSceneNode = sceneManager->getRootSceneNode(Ogre::SCENE_DYNAMIC);
|
|
|
|
Ogre::SceneNode* rootSceneNode = sceneManager->getRootSceneNode(); |
|
|
|
// Ogre::SceneNode* rootSceneNode = g_sceneManager->getRootSceneNode(Ogre::SCENE_DYNAMIC);
|
|
|
|
Ogre::SceneNode* rootSceneNode = g_sceneManager->getRootSceneNode(); |
|
|
|
if (!rootSceneNode) |
|
|
|
{ |
|
|
|
return; |
|
|
|
return false; |
|
|
|
} |
|
|
|
// WTF - this should work, but it's almost like the root scene node's vtable is wrong
|
|
|
|
// Ogre::SceneNode* sceneNode = rootSceneNode->createChildSceneNode(Ogre::SCENE_DYNAMIC);
|
|
|
@ -263,11 +278,26 @@ void OgreInitialize() |
|
|
|
rootSceneNode->createChild()); // rootSceneNode->createChildSceneNode();
|
|
|
|
if (!sceneNode) |
|
|
|
{ |
|
|
|
return; |
|
|
|
return false; |
|
|
|
} |
|
|
|
sceneNode->attachObject(item); |
|
|
|
// sceneNode->scale( 0.1f, 0.1f, 0.1f );
|
|
|
|
} |
|
|
|
|
|
|
|
Ogre::WindowEventUtilities::addWindowEventListener(g_window, &g_myWindowEventListener); |
|
|
|
|
|
|
|
g_graphicsIntialized = true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
void OgreShutdown() |
|
|
|
{ |
|
|
|
Ogre::WindowEventUtilities::removeWindowEventListener(g_window, &g_myWindowEventListener); |
|
|
|
OGRE_DELETE g_ogreRoot; |
|
|
|
g_ogreRoot = nullptr; |
|
|
|
} |
|
|
|
|
|
|
|
Ogre::SceneManager* ogreGetSceneManager() |
|
|
|
{ |
|
|
|
return g_sceneManager; |
|
|
|
} |
|
|
|