Jump to content

  • Log In with Google      Sign In   
  • Create Account


OpenGL/SDL Multisampling crashes


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
No replies to this topic

#1 anstmich   Members   -  Reputation: 100

Like
0Likes
Like

Posted 11 June 2011 - 11:08 AM

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

Sponsor:



Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS