1
Window / Significant memory leak in SFML when creating multiple windows
« on: November 14, 2013, 03:05:38 pm »
I'm using SFML in a scenario where I need to spawn multiple windows (never simultaneously). SFML is being used inside a video player control inside a wider application and whenever a user goes to play a video, a new SFML window is created.
However, this seems to create a memory leak and I suspect it might be related to opengl contexts being created. I've attached both a C# and C++ version to demonstrate the issue.
int _tmain(int argc, _TCHAR* argv[])
{
sf::RenderWindow window;
while (true)
{
window.create(sf::VideoMode(800, 600), "leak");
sf::Texture texture;
texture.create(1920, 1080);
sf::Sprite sprite(texture);
window.draw(sprite);
window.display();
Sleep(1000);
window.clear();
window.close();
Sleep(1000);
}
}
However, this seems to create a memory leak and I suspect it might be related to opengl contexts being created. I've attached both a C# and C++ version to demonstrate the issue.
private RenderWindow SFMLWindow = null;
private void RenderLoop()
{
//SFMLWindow = new RenderWindow(new VideoMode(400, 300), "SFML doesn't work(s)");
while(true)
{
SFMLWindow = new RenderWindow(new VideoMode(800, 600), "hello");
SFML.Graphics.Texture texture = new Texture(1920, 1080);
SFML.Graphics.Sprite sprite = new Sprite(texture);
SFMLWindow.Draw(sprite);
SFMLWindow.Display();
SFMLWindow.Clear();
System.Threading.Thread.Sleep(1000);
SFMLWindow.Close();
SFMLWindow.Dispose();
System.Threading.Thread.Sleep(1000);
texture.Dispose();
sprite.Dispose();
}
}
private void RenderLoop()
{
//SFMLWindow = new RenderWindow(new VideoMode(400, 300), "SFML doesn't work(s)");
while(true)
{
SFMLWindow = new RenderWindow(new VideoMode(800, 600), "hello");
SFML.Graphics.Texture texture = new Texture(1920, 1080);
SFML.Graphics.Sprite sprite = new Sprite(texture);
SFMLWindow.Draw(sprite);
SFMLWindow.Display();
SFMLWindow.Clear();
System.Threading.Thread.Sleep(1000);
SFMLWindow.Close();
SFMLWindow.Dispose();
System.Threading.Thread.Sleep(1000);
texture.Dispose();
sprite.Dispose();
}
}
int _tmain(int argc, _TCHAR* argv[])
{
sf::RenderWindow window;
while (true)
{
window.create(sf::VideoMode(800, 600), "leak");
sf::Texture texture;
texture.create(1920, 1080);
sf::Sprite sprite(texture);
window.draw(sprite);
window.display();
Sleep(1000);
window.clear();
window.close();
Sleep(1000);
}
}