summaryrefslogtreecommitdiffstats
path: root/progs/tests/calibrate_rast.c
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2010-05-21 09:32:38 -0700
committerEric Anholt <[email protected]>2010-05-21 12:20:39 -0700
commit68fc4b415e322f6744299e39864fbc377c6eff74 (patch)
tree4bafffd8b0105174f3c5c0ae327a005be9145990 /progs/tests/calibrate_rast.c
parente4f4489e3fc0b36d72821b55794fb843b2b7fa5f (diff)
Remove demos that have moved to git+ssh://git.freedesktop.org/git/mesa/demos.
The remaining programs are ones I've had difficulty finding a build environment for to make the build system or are unit tests that should probably live next to their code instead. Hopefully people can bring over the build for remaining pieces they care about.
Diffstat (limited to 'progs/tests/calibrate_rast.c')
-rw-r--r--progs/tests/calibrate_rast.c397
1 files changed, 0 insertions, 397 deletions
diff --git a/progs/tests/calibrate_rast.c b/progs/tests/calibrate_rast.c
deleted file mode 100644
index 5d89ff79c55..00000000000
--- a/progs/tests/calibrate_rast.c
+++ /dev/null
@@ -1,397 +0,0 @@
-/*
- * Automatic primitive rasterization precision test.
- *
- * Draw prims at various sub-pixel offsets and examine where the quad is
- * actually drawn.
- * Check if the range of offsets which paint the right pixels falls within
- * OpenGL's specification.
- * In case of failures, report the coordinate bias needed to fix the problem.
- *
- * Note that even Mesa/swrast fails some line tests. This is because some
- * window coordinates wind up as 53.9999 instead of 54, for example. Enabling
- * the small translation factor below fixes that. Revisit someday...
- *
- * Brian Paul
- * 28 Feb 2008
- */
-
-
-#include <assert.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <GL/glew.h>
-#include <GL/glut.h>
-
-
-static int Width = 100, Height = 100;
-static int Win;
-static float Step = 0.125;
-#if 0
-/* This tiny offset fixes errors in Mesa/Xlib */
-static float Xtrans = 0.5 * 0.125;
-static float Ytrans = 0.5 * 0.125;
-#else
-static float Xtrans = 0.0;
-static float Ytrans = 0.0;
-#endif
-
-
-static void
-PointCalibrate(int xpos, int ypos)
-{
- GLfloat rgba[4];
- float x, y;
- float xmin, ymin, xmax, ymax;
-
- xmin = ymin = 1000.0;
- xmax = ymax = -1000.0;
-
- for (y = -1.0; y <= 1.0; y += Step) {
- for (x = -1.0; x <= 1.0; x += Step) {
- glClear(GL_COLOR_BUFFER_BIT);
- glBegin(GL_POINTS);
- glVertex2f(xpos + x, ypos + y);
- glEnd();
- glReadPixels(xpos, ypos, 1, 1, GL_RGBA, GL_FLOAT, rgba);
- if (rgba[0] == 1.0 && rgba[1] == 1.0 && rgba[2] == 1.0) {
- /* hit */
- if (x < xmin)
- xmin = x;
- if (y < ymin)
- ymin = y;
- if (x > xmax)
- xmax = x;
- if (y > ymax)
- ymax = y;
- }
- }
- }
-
- printf("Point at (%2d, %2d) drawn for x in [%6.3f, %6.3f] and y in [%6.3f, %6.3f]\n",
- xpos, ypos,
- xpos + xmin, xpos + xmax,
- ypos + ymin, ypos + ymax);
-
- if (xmax - xmin != 1.0 - Step) {
- printf(" => Inconsistant X-axis rasterization!\n");
- }
- if (ymax - ymin != 1.0 - Step) {
- printf(" => Inconsistant Y-axis rasterization!\n");
- }
- if (xmin < 0.0) {
- printf(" => Points should be X biased by about %f\n", xmin);
- }
- if (ymin < 0.0) {
- printf(" => Points should be Y biased by about %f\n", ymin);
- }
- if (xmax > 1.0) {
- printf(" => Points should be X biased by about %f\n", 1.0 - xmax);
- }
- if (ymax > 1.0) {
- printf(" => Points should be Y biased by about %f\n", 1.0 - ymax);
- }
-
-}
-
-
-/**
- * XXX Implement VLineCalibrate() someday
- */
-static void
-HLineCalibrate(int xpos, int ypos, int len)
-{
- GLfloat rgba[2][4];
- float x, y;
- float ymin, ymax;
- float xmin_left, xmax_left, xmin_right, xmax_right;
-
- xmin_left = xmin_right = 1000.0;
- xmax_left = xmax_right = -1000.0;
- ymin = 1000;
- ymax = -1000.0;
-
- /*
- * First, check vertical positioning of the horizontal line
- */
- for (y = -1.0; y <= 1.0; y += Step) {
- glClear(GL_COLOR_BUFFER_BIT);
- glBegin(GL_LINES);
- glVertex2f(xpos, ypos + y);
- glVertex2f(xpos + len, ypos + y);
- glEnd();
-
- glReadPixels(xpos + len / 2, ypos, 1, 1, GL_RGBA, GL_FLOAT, rgba);
- if (rgba[0][0] == 1.0) {
- /* hit */
- if (y < ymin)
- ymin = y;
- if (y > ymax)
- ymax = y;
- }
- }
-
- printf("H-line at Y=%2d drawn for y in [%6.3f, %6.3f]\n",
- ypos,
- ypos + ymin, ypos + ymax);
-
- if (ymax - ymin != 1.0 - Step) {
- printf(" => Inconsistant Y-axis rasterization!\n");
- }
-
- if (ymin > 0.5 ) {
- printf(" => Lines should be Y biased by about %f\n", ymin - 0.5);
- }
-
- if (ymax < 0.5 ) {
- printf(" => Lines should be Y biased by about %f\n", 0.5 - ymax);
- }
-
- /*
- * Second, check endpoints (for Y at 1/2 pixel)
- */
- for (x = -1.0; x <= 1.0; x += Step) {
- glClear(GL_COLOR_BUFFER_BIT);
- glBegin(GL_LINES);
- glVertex2f(xpos + x, ypos + 0.5f);
- glVertex2f(xpos + x + len, ypos + 0.5f);
- glEnd();
-
- /* left end */
- glReadPixels(xpos - 1, ypos, 2, 1, GL_RGBA, GL_FLOAT, rgba);
- if (rgba[0][0] == 0.0 && rgba[1][0] == 1.0) {
- /* hit */
- if (x < xmin_left)
- xmin_left = x;
- if (x > xmax_left)
- xmax_left = x;
- }
-
- /* right end */
- glReadPixels(xpos + len - 1, ypos, 2, 1, GL_RGBA, GL_FLOAT, rgba);
- if (rgba[0][0] == 1.0 && rgba[1][0] == 0.0) {
- /* hit */
- if (x < xmin_right)
- xmin_right = x;
- if (x > xmax_right)
- xmax_right = x;
- }
- }
-
- printf("H-line [%d..%d) hit left end for x in [%6.3f, %6.3f] "
- "hit right end for x in [%6.3f, %6.3f]\n",
- xpos, xpos + len,
- xpos + xmin_left, xpos + xmax_left,
- xpos + len + xmin_right, xpos + len + xmax_right);
-
- if (xmax_left - xmin_left > 1.0 - Step) {
- printf(" => Inconsistant left-end rasterization!\n");
- }
- if (xmax_right - xmin_right > 1.0 - Step) {
- printf(" => Inconsistant right-end rasterization!\n");
- }
-
- if (xmin_left != xmin_right ||
- xmax_left != xmax_right) {
- printf(" => Inconsistant length!\n");
- }
-
- if (xmin_left < 0.0) {
- printf(" => Coords should be X biased by about %f\n", xmin_left );
- }
- if (xmin_right < 0.0) {
- printf(" => Coords should be X biased by about %f\n", xmin_right );
- }
- if (xmax_left >= 1.0) {
- printf(" => Coords should be X biased by about %f\n", -xmax_right + 1.0);
- }
- if (xmax_right >= 1.0) {
- printf(" => Coords should be X biased by about %f\n", -xmax_right + 1.0);
- }
-
-}
-
-
-static void
-QuadCalibrate(int xpos, int ypos, int width, int height)
-{
- GLfloat rgba1[2][4];
- GLfloat rgba2[2][4];
- float x, y;
- float xmin, ymin, xmax, ymax;
-
- xmin = ymin = 1000.0;
- xmax = ymax = -1000.0;
-
- for (y = -1.0; y <= 1.0; y += Step) {
- for (x = -1.0; x <= 1.0; x += Step) {
- glClear(GL_COLOR_BUFFER_BIT);
- glBegin(GL_QUADS);
- glVertex2f(xpos + x, ypos + y);
- glVertex2f(xpos + x + width, ypos + y);
- glVertex2f(xpos + x + width, ypos + y + height);
- glVertex2f(xpos + x, ypos + y + height);
- glEnd();
-
- /* horizontal measurement */
- glReadPixels(xpos - 1, ypos + 2, 2, 1, GL_RGBA, GL_FLOAT, rgba1);
- glReadPixels(xpos + width - 1, ypos + 2, 2, 1, GL_RGBA, GL_FLOAT, rgba2);
- if (rgba1[0][0] == 0.0 && rgba1[1][0] == 1.0 &&
- rgba2[0][0] == 1.0 && rgba2[1][0] == 0.0) {
- if (x < xmin)
- xmin = x;
- if (x > xmax)
- xmax = x;
- }
-
- /* vertical measurement */
- glReadPixels(xpos + 2, ypos - 1, 1, 2, GL_RGBA, GL_FLOAT, rgba1);
- glReadPixels(xpos + 2, ypos + height - 1, 1, 2, GL_RGBA, GL_FLOAT, rgba2);
- if (rgba1[0][0] == 0.0 && rgba1[1][0] == 1.0 &&
- rgba2[0][0] == 1.0 && rgba2[1][0] == 0.0) {
- if (y < ymin)
- ymin = y;
- if (y > ymax)
- ymax = y;
- }
- }
- }
-
- printf("Quad at (%2d, %2d)..(%2d, %2d) drawn"
- " for x in [%6.3f, %6.3f] and y in [%6.3f, %6.3f]\n",
- xpos, ypos,
- xpos + width, ypos + height,
- xpos + xmin, xpos + xmax,
- ypos + ymin, ypos + ymax);
-
- if (xmax - xmin != 1.0 - Step) {
- printf(" => Inconsistant X-axis rasterization/size!\n");
- }
- if (ymax - ymin != 1.0 - Step) {
- printf(" => Inconsistant Y-axis rasterization/size!\n");
- }
-
- if (xmin < -0.5) {
- printf(" => Coords should be X biased by about %f\n", 0.5 + xmin );
- }
- if (ymin < -0.5) {
- printf(" => Coords should be Y biased by about %f\n", 0.5 + ymin);
- }
- if (xmax > 0.5) {
- printf(" => Coords should be X biased by about %f\n", -xmax + 0.5);
- }
- if (ymax > 0.5) {
- printf(" => Coords should be Y biased by about %f\n", -ymax + 0.5);
- }
-}
-
-
-/**
- * Misc/disabled code for debugging.
- */
-static void
-DebugTest(void)
-{
- glClear(GL_COLOR_BUFFER_BIT);
- glEnable(GL_BLEND);
- glBlendFunc(GL_ONE, GL_ONE);
-
- glColor3f(.5, .5, .5);
-
- glBegin(GL_LINES);
- glVertex2f(30, 35.5);
- glVertex2f(54, 35.5);
- glVertex2f(54, 35.5);
- glVertex2f(66, 35.5);
- glEnd();
-
- glDisable(GL_BLEND);
- glColor3f(1,1,1);
-}
-
-
-static void
-Draw(void)
-{
- glClear(GL_COLOR_BUFFER_BIT);
-
- glPushMatrix();
- glTranslatef(Xtrans, Ytrans, 0);
-
- PointCalibrate(1, 1);
- PointCalibrate(50, 50);
- PointCalibrate(28, 17);
- PointCalibrate(17, 18);
- printf("\n");
-
- HLineCalibrate(5, 10, 10);
- HLineCalibrate(25, 22, 12);
- HLineCalibrate(54, 33, 12);
- HLineCalibrate(54+12, 33, 12);
- printf("\n");
-
- QuadCalibrate(2, 2, 10, 10);
- QuadCalibrate(50, 50, 10, 10);
- QuadCalibrate(28, 17, 12, 12);
- QuadCalibrate(17, 28, 12, 12);
-
- (void) DebugTest;
-
- glPopMatrix();
-
- glutSwapBuffers();
-}
-
-
-static void
-Reshape(int width, int height)
-{
- Width = width;
- Height = height;
- glViewport(0, 0, width, height);
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- glOrtho(0, width, 0, height, -1, 1);
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-}
-
-
-static void
-Key(unsigned char key, int x, int y)
-{
- (void) x;
- (void) y;
- switch (key) {
- case 27:
- glutDestroyWindow(Win);
- exit(0);
- break;
- }
- glutPostRedisplay();
-}
-
-
-static void
-Init(void)
-{
- printf("Measurement/callibration for basic prim rasterization...\n");
- printf("GL_RENDERER: %s\n", (char*) glGetString(GL_RENDERER));
-}
-
-
-int
-main(int argc, char *argv[])
-{
- glutInit(&argc, argv);
- glutInitWindowPosition(0, 0);
- glutInitWindowSize(Width, Height);
- glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
- Win = glutCreateWindow(argv[0]);
- glewInit();
- glutReshapeFunc(Reshape);
- glutKeyboardFunc(Key);
- glutDisplayFunc(Draw);
- Init();
- glutMainLoop();
- return 0;
-}