Example 1: Setup Viewer
Setting up an osgViewer in a SFML window is very easy. Here is how I do it:
#if defined(_DEBUG)
#pragma comment(linker, "/SUBSYSTEM:\"console\"")
#else
#pragma comment(linker, "/SUBSYSTEM:\"windows\" /ENTRY:\"mainCRTStartup\"")
#endif
#if defined(_DEBUG)
#pragma comment(lib, "sfml-graphics-d.lib")
#pragma comment(lib, "sfml-window-d.lib")
#pragma comment(lib, "sfml-system-d.lib")
#else
#pragma comment(lib, "sfml-graphics.lib")
#pragma comment(lib, "sfml-window.lib")
#pragma comment(lib, "sfml-system.lib")
#endif
#if defined(_DEBUG)
#pragma comment(lib, "osgd.lib")
#pragma comment(lib, "osgViewerd.lib")
#else
#pragma comment(lib, "osg.lib")
#pragma comment(lib, "osgViewer.lib")
#endif
#include <SFML/Graphics.hpp>
#pragma warning(push)
#pragma warning(disable: 4250)
#include <osgViewer/Viewer>
#pragma warning(pop)
int main(int argc, char** argv)
{
//osg::setNotifyLevel(osg::DEBUG_INFO);
sf::RenderWindow window;
window.setVerticalSyncEnabled(true);
sf::VideoMode mode = sf::VideoMode::getDesktopMode();
mode.width = 800;
mode.height = 600;
window.create(mode, "SFML+OSG Example");
sf::Vector2u size = window.getSize();
osgViewer::Viewer viewer;
osg::ref_ptr<osgViewer::GraphicsWindowEmbedded> gw = viewer.setUpViewerAsEmbeddedInWindow(0, 0, size.x, size.y);
viewer.realize();
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
switch(event.type)
{
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyPressed:
if (event.key.code == sf::Keyboard::Escape)
{
window.close();
}
break;
case sf::Event::Resized:
gw->resized(0, 0, event.size.width, event.size.height);
break;
}
}
window.setActive();
viewer.frame();
window.display();
}
return 0;
}
The only thing to keep in mind is letting the viewer know whenever the window changes size.