iDevGames Forums
Multisample AA Artifacts - Printable Version

+- iDevGames Forums (http://www.idevgames.com/forums)
+-- Forum: Development Zone (/forum-3.html)
+--- Forum: Graphics & Audio Programming (/forum-9.html)
+--- Thread: Multisample AA Artifacts (/thread-855.html)



Multisample AA Artifacts - metacollin - Aug 14, 2009 02:52 PM

Hi, I'm having a strange issue with antialiasing using multisampling extensions. It happens independent of the number of samples (tried 2x-16x, all with the same result).

Here is the screenshot, it appears as 1 pixel borders around tiles and sprites, and appears to be 'wrapping' pixels from the opposite side around to the other side.

I've figured out this much:

The viewport is 640x480 pixels, but I'm setting it up with a coordinate system of 320x240, for convenience of 'double-sized' pixel movement. However, many things, such as shadows, lighting, and scrolling, move at a per-pixel (640x480) basis.

The artifacts only appear when scrolling (using glTranslatef) with floats. If I clamp them to integers (thus clamping it to double-sized pixels), the artifacts go away, but it isn't nearly as smooth. The shadows/lighting, which are always at full resolution, never seem to have a problem, it's only full screen scrolling that's an issue.


If anyone has any quick diagnoses, it would be appreciated. However, I literally added 2 lines of code to enable this, and it's really not that big of a deal, and totally unnecessary. I'm just going to remove it if there isn't a fairly simple solution. Maybe I need some extra junk in my texture parameters?

surface is an SDL_Surface*

glTexParameterf( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
gluBuild2DMipmaps(GL_TEXTURE_2D, 4, surface->w, surface->h, GL_RGBA,GL_UNSIGNED_BYTE, surface->pixels);


Multisample AA Artifacts - Skorche - Aug 14, 2009 03:13 PM

Why not clamp to half pixels? Presumably that would also solve the problem and still give you pixel smooth scrolling.


Multisample AA Artifacts - metacollin - Aug 14, 2009 03:31 PM

Man, talk about a brain fart. I can't believe I missed that.

I just clamped it to 0.5 steps, perfectly smooth and no artifacts. Thanks for the help!

Oh, to make this thread useful:
If you're using SDL and OpenGL, here is how to enable multisampling in 2 lines (and if the card doesn't support it, it just doesn't get turned on, but you can check GL_SAMPLE_BUFFERS_ARB and GL_SAMPLE_ARB to confirm):

SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1); //1 for 1 buffer. Not sure what use more than 1 is, but the option is there.
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 4); //Number of samples. 2x, 4x, 8x, 16x if you love GPU fan noise


Multisample AA Artifacts - arekkusu - Aug 14, 2009 06:52 PM

Why are you building mipmaps?


Multisample AA Artifacts - metacollin - Aug 14, 2009 07:11 PM

I was planning on using lower-res versions of sprites for certain effects, I'm in the middle of a bunch of stuff, so that may or may not change. But yes, there is no reason right now I couldn't use glTexImage2D, but it doesn't really matter right now, I'l probably using 1MB of VRAM or something. Grin