c++ - SFML & OpenGL(glew) Why does my program fail when drawing to new window? -
i have problem regarding sfml windows, contexts , opengl drawing follows:
when create new window draw (because need fullscreen or changed delicate context settings @ runtime) use sf::window::create(args...)
create new window, old 1 vanishes. understanding not affect opengl calls, because "active" states of contexts windows hold set automatically (so new window active).
so why opengl fail draw new window or stops working ?
i use wrappers sfmlcontents(sfmlhandler) , hide opengl calls in class(graphics). here's code: constructor of mainapp:
mainapp::mainapp() { imediahandle::contextsettings settings; settings.depth = 24; settings.stencil = 8; settings.antialiasing = 0; settings.openglmajor = 3; settings.openglminor = 3; sfmlhandle.createwindow("test", 800, 600, settings); graphics.init(); //i want able following line sfmlhandle.createwindow("test", 200, 400, settings); }
this code works fine old window gets destroyed , new 1 comes up. when start rendering in apploop later programm crashes @ call of glbindvertexarray(0);
if leave out additional line rendering works of course.
what have apply old drawing mechanism new window ? can initialize graphics again have ? not point of setting context active or inactive ?:
sfmlhandle.createwindow("test", 800, 600, settings); graphics.init(); sfmlhandle.createwindow("test", 200, 400, settings); // unnecessary ? graphics.init();
this code works, too, no crashes later.
i thank clearing 1 !
when create new window, new opengl context made. sfml made context shares resources old (or other) context. means textures, buffers , shaders still valid.
there are, however, opengl objects cannot shared between opengl contexts. vertex array objects among , afaik framebuffer objects too. have recreate these before start drawing in new context.
see this page.
Comments
Post a Comment