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 Forum Index
SDL
Simple Directmedia Layer Forums
Sdl 2.0.3 with Ogre 1.9.0
Alexander Chaliovski
Guest

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,  &params);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;
                        }
                    }
                }
            }
        }