Skip to main content
GameDev.net gamedev.net
🔒 Locked

OpenGL/SDL Multisampling crashes

Started by anstmich Jun 11, 2011 at 5:08 PM 0 replies 800+ views
Original Post
anstmich
anstmich
Hi all,

I am trying to add multisampling in order to smooth out lines/polygons. From what I have read, using:


SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);



in between SDL_Init and SDL_SetVideoMode and enabling line hinting/smoothing should be enough to produce some nice antialiasing. Unfortunately, when the two lines above are added, my program segfaults on the first call to glGenBuffers(). I have glew set up to load the extensions and everything works fine without these two lines.

The two relevant methods:

init():


int init(int width, int height, bool fullscreen)
{

if(SDL_Init(SDL_INIT_VIDEO) != 0) {
printf("Unable to initialize SDL: %s\n", SDL_GetError());
return 1;
}


SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4);

//SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
screen = SDL_SetVideoMode(width, height, 32, fullscreen? SDL_OPENGL | SDL_FULLSCREEN : SDL_OPENGL);

// set up 2D drawing
glEnable(GL_TEXTURE_2D);
glClearColor(MAIN_BG_COLOR, MAIN_BG_COLOR, MAIN_BG_COLOR, 1.0f);

glViewport(0, 0, width, height);
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0.0f, width, height, 0.0f, -1.0f, 1.0f);

glEnable(GL_MULTISAMPLE);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST );
glHint(GL_POLYGON_SMOOTH_HINT, GL_NICEST );
glEnable(GL_LINE_SMOOTH);
glEnable(GL_POLYGON_SMOOTH);

glEnable(GL_BLEND); // Enable Blending
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

GLenum err = glewInit();

WinAttributes::WIN_WIDTH = width;
WinAttributes::WIN_HEIGHT = height;
WinAttributes::V_PIX = 1.0f/double(height)*2;
WinAttributes::H_PIX = 1.0f/double(width)*2;

return err;

}


and
The object initialization:


void Button::addToScene()
{

// store the vertex data in memory
glGenBuffers(1, getVertexBuffer());
glBindBuffer(GL_ARRAY_BUFFER, *getVertexBuffer());
glBufferData(GL_ARRAY_BUFFER, getNumVertices()*sizeof(GLfloat)*3, getVertexData().get(), GL_STREAM_DRAW);

// store the color data in memory
glGenBuffers(1, getColorBuffer());
glBindBuffer(GL_ARRAY_BUFFER, *getColorBuffer());
glBufferData(GL_ARRAY_BUFFER, getNumVertices()*sizeof(GLfloat)*4, getColorData().get(), GL_STREAM_DRAW);

}





getVertexData().get() returns


returns a GLfloat array that contains 360 vertices that constitute a button shape (two separated hemispheres).

I have tried searching for other cases of this occuring, however I haven't found anything relevant. Also, excluding the calls to SDL_GL_SetAttribute() eliminates the error, however line and polygon smoothing appear to have no effect (the lines are all jagged).

Any ideas?

Thanks a lot!
Andy

Topic Locked

This topic has been locked by a moderator. New replies are not allowed.

Sign in to reply to this topic.