I've used SFML 2.x (fetched and compiled today)
to reproduce compile the following code, run it.
press seval times (about 10 times) Tab and then quit with esc.
There are no errors on my PC (GTX 470, Ubuntu x64), but on my notebook (intel GM45, Ubuntu x64) this gets a sigsev.
#include <GL/glew.h>
#include <SFML/Window.hpp>
#include <iostream>
void init_states()
{
// Set color and depth clear value
glClearDepth(1.f);
glClearColor(0.f, 0.f, 0.f, 0.f);
// Enable Z-buffer read and write
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
// Setup a perspective projection
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.f, 1.f, 1.f, 500.f);
}
int main()
{
sf::ContextSettings Settings;
Settings.DepthBits = 32; // Request a 24 bits depth buffer
Settings.StencilBits = 8; // Request a 8 bits stencil buffer
Settings.AntialiasingLevel = 4; // Request 2 levels of antialiasing
sf::Window App(sf::VideoMode(800, 600, 32), "SFML OpenGL", sf::Style::Close, Settings);
// Create a clock for me
sf::Clock Clock;
init_states();
App.SetFramerateLimit(640);
// Start game loop
while (App.IsOpened())
{
// Process events
sf::Event Event;
while (App.PollEvent(Event))
{
// Close window : exit
if (Event.Type == sf::Event::Closed)
App.Close();
// Escape key : exit
if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Keyboard::Escape))
App.Close();
if((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Keyboard::Tab))
{
App.Create(sf::VideoMode(800, 600, 32), "SFML OpenGL", sf::Style::Close);
init_states();
}
// Resize event : adjust viewport
if (Event.Type == sf::Event::Resized)
glViewport(0, 0, Event.Size.Width, Event.Size.Height);
}
// Set the active window before using OpenGL commands
// It's useless here because active window is always the same,
// but don't forget it if you use multiple windows or controls
App.SetActive();
// Clear color and depth buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Apply some transformations
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.f, 0.f, -200.f);
//a += 0.1f;
glRotatef(Clock.GetElapsedTime() * 0.001f * 50.f, 1.f, 0.f, 0.f);
glRotatef(Clock.GetElapsedTime() * 0.001f * 30.f, 0.f, 1.f, 0.f);
glRotatef(Clock.GetElapsedTime() * 0.001f * 90.f, 0.f, 0.f, 1.f);
// Draw a cube
glBegin(GL_QUADS);
glVertex3f(-50.f, -50.f, -50.f);
glVertex3f(-50.f, 50.f, -50.f);
glVertex3f( 50.f, 50.f, -50.f);
glVertex3f( 50.f, -50.f, -50.f);
glVertex3f(-50.f, -50.f, 50.f);
glVertex3f(-50.f, 50.f, 50.f);
glVertex3f( 50.f, 50.f, 50.f);
glVertex3f( 50.f, -50.f, 50.f);
glVertex3f(-50.f, -50.f, -50.f);
glVertex3f(-50.f, 50.f, -50.f);
glVertex3f(-50.f, 50.f, 50.f);
glVertex3f(-50.f, -50.f, 50.f);
glVertex3f(50.f, -50.f, -50.f);
glVertex3f(50.f, 50.f, -50.f);
glVertex3f(50.f, 50.f, 50.f);
glVertex3f(50.f, -50.f, 50.f);
glVertex3f(-50.f, -50.f, 50.f);
glVertex3f(-50.f, -50.f, -50.f);
glVertex3f( 50.f, -50.f, -50.f);
glVertex3f( 50.f, -50.f, 50.f);
glVertex3f(-50.f, 50.f, 50.f);
glVertex3f(-50.f, 50.f, -50.f);
glVertex3f( 50.f, 50.f, -50.f);
glVertex3f( 50.f, 50.f, 50.f);
glEnd();
static int i=0;
std::cout<<"rendered frame "<<i++<<"\n";
// Finally, display rendered frame on screen
App.Display();
}
return EXIT_SUCCESS;
}
This is the callstack:
#0 0x00007ffff3d993c6 in ?? () from /lib/x86_64-linux-gnu/libdrm_intel.so.1
#1 0x00007ffff4924ace in ?? () from /usr/lib/dri/i965_dri.so
#2 0x00007ffff450f91c in _mesa_reference_buffer_object ()
from /usr/lib/dri/libdricore.so
#3 0x00007ffff457da4e in ?? () from /usr/lib/dri/libdricore.so
#4 0x00007ffff454c59f in _mesa_HashDeleteAll ()
from /usr/lib/dri/libdricore.so
#5 0x00007ffff457dd50 in _mesa_release_shared_state ()
from /usr/lib/dri/libdricore.so
#6 0x00007ffff4518749 in _mesa_free_context_data ()
from /usr/lib/dri/libdricore.so
#7 0x00007ffff492774e in intelDestroyContext () from /usr/lib/dri/i965_dri.so
#8 0x00007ffff491cc30 in ?? () from /usr/lib/dri/i965_dri.so
#9 0x00007ffff6c53655 in ?? () from /usr/lib/mesa/libGL.so.1
#10 0x00007ffff7bcd485 in sf::priv::GlxContext::~GlxContext (this=0x969fe0,
__in_chrg=<value optimized out>)
at /home/robert/FLOSS/SFML/src/SFML/Window/Linux/GlxContext.cpp:118
#11 0x00007ffff7bcd544 in sf::priv::GlxContext::~GlxContext (this=0x969fe0,
__in_chrg=<value optimized out>)
at /home/robert/FLOSS/SFML/src/SFML/Window/Linux/GlxContext.cpp:131
#12 0x00007ffff7bc5aaf in sf::priv::GlContext::GlobalCleanup ()
---Type <return> to continue, or q <return> to quit---
at /home/robert/FLOSS/SFML/src/SFML/Window/GlContext.cpp:128
#13 0x00007ffff7bc7021 in sf::GlResource::~GlResource (this=0x7fffffffe060,
__in_chrg=<value optimized out>)
at /home/robert/FLOSS/SFML/src/SFML/Window/GlResource.cpp:78
#14 0x00007ffff7bca1d3 in sf::Window::~Window (this=0x7fffffffe060,
__in_chrg=<value optimized out>)
at /home/robert/FLOSS/SFML/src/SFML/Window/Window.cpp:80
#15 0x0000000000401b61 in main ()