2009-12-30 8 views
5

जब मैं SDL के साथ OGRE का उपयोग करने के लिए जाता हूं (जैसा कि this article में वर्णित है), मुझे लगता है कि मेरी मुख्य रेंडर विंडो के पीछे दिखाई देने वाली दूसरी विंडो में समस्या हो रही है।ओजीआरई के साथ एसडीएल का उपयोग कैसे करें?

SDL_init(SDL_INIT_VIDEO); 
SDL_Surface *screen = SDL_SetVideoMode(640, 480, 0, SDL_OPENGL); 

Ogre::Root *root = new Ogre::Root(); 
root->restoreConfig(); 
root->initialise(false); 

Ogre::NameValuePairList windowSettings; 
windowSettings["currentGLContext"] = Ogre::String("True"); 
Ogre::RenderWindow *window = root->createRenderWindow("MainRenderWindow", 640, 480, false, &windowSettings); 
window->setVisible(true); 

सवाल है, मैं कैसे अतिरिक्त खिड़की से कैसे छुटकारा पाऊँ है: मूल रूप से, कोड मैं का उपयोग कर रहा है?

सिर्फ पोस्टरिटी के लिए, मैं ओजीआरई 1.6.4, मैक ओएस एक्स 10.6.2, और एसडीएल 1.2.14 का उपयोग कर रहा हूं।

उत्तर

7

मैं इसे अपने आप से बाहर निकालना समाप्त कर दिया। समस्या यह साबित होती है कि ओजीआरई मैक जीएल बैकएंड currentGLContext विकल्प का सम्मान नहीं करता है, इसलिए सबसे अच्छा समाधान एसडीएल 1.3 (सीधे सबवर्सन से, लेखन के समय के रूप में) में बदलना है और विंडो से ईवेंट प्राप्त करने के लिए SDL_CreateWindowFrom कॉल का उपयोग करना है ओजीआरई द्वारा निर्मित यह भी ध्यान दिया जाना चाहिए कि ओजीआरई विंडो को macAPIcocoa पर सेट करने की आवश्यकता है, या फिर एसडीएल विंडो हैंडल को पहचान नहीं पाएगा।

2

मुझे लगता है कि आपने पहले से ही अपनी समस्या का समाधान किया है, लेकिन सभी उपयोगकर्ता एसडीएल को 1.3 से कम करने के साथ संतुष्ट नहीं होंगे। आप एसडीएल 2 और एक एसडीएल 2 विंडो का उपयोग एसडीएल_CreateWindow के माध्यम से ओजीआरई के साथ कर सकते हैं। कोड इस तरह कुछ दिखाई देगा:

if (SDL_Init(SDL_INIT_VIDEO) != 0) { 
    OGRE_EXCEPT(Ogre::Exception::ERR_INTERNAL_ERROR, "Cannot initialize SDL2!", 
     "BaseApplication::setup"); 
} 

Ogre::Root *root = new Ogre::Root(); 
root->restoreConfig(); 
root->initialise(false); 

Ogre::NameValuePairList params; // ogre window/render system params 
SDL_Window *sdlWindow = SDL_CreateWindow("myWindow", posX, posY, width, height, vflags); 
// see SDL_CreateWindow docs/examples for how to populate posX, posY, width, height, and vflags according to your needs 

SDL_SysWMinfo wmInfo; 
SDL_VERSION(&wmInfo.version); 
if (SDL_GetWindowWMInfo(sdlWindow, &wmInfo) == SDL_FALSE) { 
    OGRE_EXCEPT(Ogre::Exception::ERR_INTERNAL_ERROR, 
     "Couldn't get WM Info! (SDL2)", 
     "BaseApplication::setup"); 
} 

params.insert(std::make_pair("macAPI", "cocoa")); 
params.insert(std::make_pair("macAPICocoaUseNSView", "true")); 

// grab a string representing the NSWindow pointer 
Ogre::String winHandle = Ogre::StringConverter::toString((unsigned long)wmInfo.info.cocoa.window); 

// assign the NSWindow pointer to the parentWindowHandle parameter 
params.insert(std::make_pair("parentWindowHandle", winHandle)); 

Ogre::RenderWindow *ogreWindow = root->createRenderWindow("myWindowTitle", width, height, isFullscreen, &params); 
// see OGRE documentation on how to populate width, height, and isFullscreen to suit your needs 

// create OGRE scene manager, camera, viewports, etc 
संबंधित मुद्दे