Jump to content

  • Log In with Google      Sign In   
  • Create Account

Banner advertising on our site currently available from just $5!


1. Learn about the promo. 2. Sign up for GDNet+. 3. Set up your advert!


anstmich

Member Since 11 Jun 2011
Offline Last Active Jan 16 2012 01:15 PM

Topics I've Started

Rendering Efficiency: Many matrices vs. resubmitting points

16 January 2012 - 01:51 AM

Hi all,

I have a quick question regarding the computational costs of different methods of rendering a large set of points. Consider, for example, that you were trying to deform a solid on a per-point basis. I can think of two options for managing the deformation:

1) render each point one at a time, pushing and popping a new matrix containing the necessary translation information for each individual, pre-allocated point, or

2) calculate the new point positions, generate values locally, and then resubmit the vertex data to the gpu.

Which of these methods would ultimately yield the best performance? My gut feeling is that the second method is more likely to be "correct" however I fear that resubmitting a large number of points regularly could be bad. Are there any other methods for manipulating vertex data efficiently?

OpenGL/SDL Multisampling crashes

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

PARTNERS