The SDL forums have moved to discourse.libsdl.org.
This is just a read-only archive of the previous forums, to keep old links working.
SDL
Simple Directmedia Layer Forums
Sdl 2.0.3 with Ogre 1.9.0
Alexander Chaliovski
Guest
Posted: Thu Sep 11, 2014 8:30 pm
Hi guys,
I am trying to integrate SDL 2.0.3 to work Ogre 1.9.0 for window and events handling.
At the moment I cannot get any input or window events from SDL, but I can get Ogre to use the SDL window handle. I am using the wmInfo.info.uikit.window to get the handle and then I pass it to Ogre. The only thing I am not sure is if I am getting the GL context properly. I can get only one event when I start SDL with Ogre SDL_APP_DIDENTERFOREGROUND.
I would really appreciate any help as I am stuck on the problems above.
Also I am working under OSX and IOS 7.1Â simulator. The same thing with irrlicht worked like a charm.
SDL and Ogre initialization:
Quote:
//SDL
  if (SDL_Init(SDL_INIT_VIDEO) < 0)
  {
    printf("Could not initialize SDL\n");
    return 1;
  }
  SDL_GL_SetAttribute(SDL_GL_CONTEXT_EGL, 1);
  SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_ES);
  SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 2);
  SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 0);
 Â
  SDL_DisplayMode displayMode;
  SDL_GetDesktopDisplayMode(0, &displayMode);
 Â
  /* create window and renderer */
  SDL_Window* window = SDL_CreateWindow(NULL, 0, 0, displayMode.w, displayMode.h, SDL_WINDOW_OPENGL | SDL_WINDOW_FULLSCREEN | SDL_WINDOW_RESIZABLE);
 Â
  SDL_GLContext glContext = SDL_GL_CreateContext(window);
 Â
  SDL_SysWMinfo wmInfo;
  SDL_VERSION(&wmInfo.version);
  SDL_GetWindowWMInfo(window,&wmInfo);
  m_pLog = Ogre::LogManager::getSingleton().createLog("OgreLogfile.log", true, true, false);
  m_pLog->setDebugOutputEnabled(true);
  String pluginsPath;
  m_pRoot = new Ogre::Root(pluginsPath, Ogre::macBundlePath() + "/ogre.cfg");
  m_StaticPluginLoader.load();
 Â
  m_pRenderWnd = m_pRoot->initialise(false, wndTitle);
 Â
  size_t winHandle = reinterpret_cast<size_t>(wmInfo.info.uikit.window);
  size_t glHandle = reinterpret_cast<size_t>(glContext);
 Â
  Ogre::NameValuePairList params;
  params["externalWindowHandle"] = Ogre::StringConverter::toString((unsigned long)winHandle);
  params["externalGLContext"] =  Ogre::StringConverter::toString((unsigned long)glHandle);
  params["externalGLControl"] = String("True");
  m_pRenderWnd = m_pRoot->createRenderWindow("", displayMode.w/2, displayMode.h/2, false, ¶ms);My main loop: DemoApp demo;
  demo.startDemo();
  bool done = false;
 Â
  SDL_Event event;
 Â
  double mStartTime;
  double mLastFrameTime;
  while (!done)
  {
   Â
    mStartTime = OgreFramework::getSingletonPtr()->m_pTimer->getMillisecondsCPU();
    OgreFramework::getSingletonPtr()->updateOgre(mLastFrameTime);
    OgreFramework::getSingletonPtr()->m_pRoot->renderOneFrame();
    mLastFrameTime = OgreFramework::getSingletonPtr()->m_pTimer->getMillisecondsCPU() - mStartTime;
   Â
   Â
    while (SDL_PollEvent(&event))
    {
      switch (event.type)
      {
        case SDL_FINGERMOTION:
          SDL_Log("Finger Motion");
          break;
        case SDL_FINGERDOWN:
          SDL_Log("Finger Down");
          break;
     Â
        case SDL_FINGERUP:
          SDL_Log("Finger Up");
          break;
        case SDL_QUIT:
          done = true;
          break;
         Â
        case SDL_APP_DIDENTERFOREGROUND:
          SDL_Log("SDL_APP_DIDENTERFOREGROUND");
          break;
         Â
        case SDL_APP_DIDENTERBACKGROUND:
          SDL_Log("SDL_APP_DIDENTERBACKGROUND");
          break;
         Â
        case SDL_APP_LOWMEMORY:
          SDL_Log("SDL_APP_LOWMEMORY");
          break;
         Â
        case SDL_APP_TERMINATING:
          SDL_Log("SDL_APP_TERMINATING");
          break;
         Â
        case SDL_APP_WILLENTERBACKGROUND:
          SDL_Log("SDL_APP_WILLENTERBACKGROUND");
          break;
         Â
        case SDL_APP_WILLENTERFOREGROUND:
          SDL_Log("SDL_APP_WILLENTERFOREGROUND");
          break;
         Â
        case SDL_WINDOWEVENT:
        {
          switch (event.window.event)
          {
         Â
            case SDL_WINDOWEVENT_RESIZED:
            {
              SDL_Log("Window %d resized to %dx%d", event.window.windowID, event.window.data1, event.window.data2);
             Â
              break;
            }
          }
        }
      }
    }