|  |  | @ -30,33 +30,58 @@ | 
			
		
	
		
		
			
				
					
					|  |  |  | //========================================================================
 |  |  |  | //========================================================================
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <GL/glfw3.h> |  |  |  | #include <GL/glfw3.h> | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | #include <GL/glext.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <stdio.h> |  |  |  | #include <stdio.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | #include <stdlib.h> |  |  |  | #include <stdlib.h> | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | #ifndef GL_ARB_multisample |  |  |  | #include "getopt.h" | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | #define GL_MULTISAMPLE_ARB 0x809D |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | #endif |  |  |  |  | 
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | static void window_size_callback(GLFWwindow window, int width, int height) |  |  |  | static void window_size_callback(GLFWwindow window, int width, int height) | 
			
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |     glViewport(0, 0, width, height); |  |  |  |     glViewport(0, 0, width, height); | 
			
		
	
		
		
			
				
					
					|  |  |  | } |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | int main(void) |  |  |  | static void usage(void) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | { |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |     int samples; |  |  |  |     printf("Usage: fsaa [-h] [-s SAMPLES]\n"); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | int main(int argc, char** argv) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     int ch, samples = 4; | 
			
		
	
		
		
			
				
					
					|  |  |  |     GLFWwindow window; |  |  |  |     GLFWwindow window; | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     while ((ch = getopt(argc, argv, "hs:")) != -1) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         switch (ch) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         { | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case 'h': | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 usage(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 exit(EXIT_SUCCESS); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             case 's': | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 samples = atoi(optarg); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 break; | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             default: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 usage(); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 exit(EXIT_FAILURE); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (!glfwInit()) |  |  |  |     if (!glfwInit()) | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError())); |  |  |  |         fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError())); | 
			
		
	
		
		
			
				
					
					|  |  |  |         exit(EXIT_FAILURE); |  |  |  |         exit(EXIT_FAILURE); | 
			
		
	
		
		
			
				
					
					|  |  |  |     } |  |  |  |     } | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4); |  |  |  |     if (samples) | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         printf("Requesting FSAA with %i samples\n", samples); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     else | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         printf("Requesting that FSAA not be available\n"); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     glfwOpenWindowHint(GLFW_FSAA_SAMPLES, samples); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     window = glfwOpenWindow(400, 400, GLFW_WINDOWED, "Aliasing Detector", NULL); |  |  |  |     window = glfwOpenWindow(800, 400, GLFW_WINDOWED, "Aliasing Detector", NULL); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     if (!window) |  |  |  |     if (!window) | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
		
		
			
				
					
					|  |  |  |         glfwTerminate(); |  |  |  |         glfwTerminate(); | 
			
		
	
	
		
		
			
				
					|  |  | @ -70,12 +95,13 @@ int main(void) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     samples = glfwGetWindowParam(window, GLFW_FSAA_SAMPLES); |  |  |  |     samples = glfwGetWindowParam(window, GLFW_FSAA_SAMPLES); | 
			
		
	
		
		
			
				
					
					|  |  |  |     if (samples) |  |  |  |     if (samples) | 
			
		
	
		
		
			
				
					
					|  |  |  |         printf("Context reports FSAA is supported with %i samples\n", samples); |  |  |  |         printf("Context reports FSAA is available with %i samples\n", samples); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |     else |  |  |  |     else | 
			
		
	
		
		
			
				
					
					|  |  |  |         printf("Context reports FSAA is unsupported\n"); |  |  |  |         printf("Context reports FSAA is unavailable\n"); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     glMatrixMode(GL_PROJECTION); |  |  |  |     glMatrixMode(GL_PROJECTION); | 
			
		
	
		
		
			
				
					
					|  |  |  |     gluOrtho2D(0.f, 1.f, 0.f, 1.f); |  |  |  |     gluOrtho2D(0.f, 1.f, 0.f, 0.5f); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     glMatrixMode(GL_MODELVIEW); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     while (glfwIsWindow(window)) |  |  |  |     while (glfwIsWindow(window)) | 
			
		
	
		
		
			
				
					
					|  |  |  |     { |  |  |  |     { | 
			
		
	
	
		
		
			
				
					|  |  | @ -83,21 +109,21 @@ int main(void) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         glClear(GL_COLOR_BUFFER_BIT); |  |  |  |         glClear(GL_COLOR_BUFFER_BIT); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         glColor3f(1.f, 1.f, 1.f); | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         glLoadIdentity(); |  |  |  |         glLoadIdentity(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         glTranslatef(0.5f, 0.f, 0.f); |  |  |  |         glTranslatef(0.25f, 0.25f, 0.f); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         glRotatef(time, 0.f, 0.f, 1.f); |  |  |  |         glRotatef(time, 0.f, 0.f, 1.f); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         glEnable(GL_MULTISAMPLE_ARB); |  |  |  |         glDisable(GL_MULTISAMPLE_ARB); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         glColor3f(1.f, 1.f, 1.f); |  |  |  |         glRectf(-0.15f, -0.15f, 0.15f, 0.15f); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         glRectf(-0.25f, -0.25f, 0.25f, 0.25f); |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         glLoadIdentity(); |  |  |  |         glLoadIdentity(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         glTranslatef(-0.5f, 0.f, 0.f); |  |  |  |         glTranslatef(0.75f, 0.25f, 0.f); | 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					|  |  |  |         glRotatef(time, 0.f, 0.f, 1.f); |  |  |  |         glRotatef(time, 0.f, 0.f, 1.f); | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         glDisable(GL_MULTISAMPLE_ARB); |  |  |  |         glEnable(GL_MULTISAMPLE_ARB); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         glColor3f(1.f, 1.f, 1.f); |  |  |  |         glRectf(-0.15f, -0.15f, 0.15f, 0.15f); | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  |         glRectf(-0.25f, -0.25f, 0.25f, 0.25f); |  |  |  |  | 
			
		
	
		
		
	
		
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |         glfwSwapBuffers(); |  |  |  |         glfwSwapBuffers(); | 
			
		
	
		
		
			
				
					
					|  |  |  |         glfwPollEvents(); |  |  |  |         glfwPollEvents(); | 
			
		
	
	
		
		
			
				
					|  |  | 
 |