Demos (master): demos/pixeltest: Adapt the example for points too.
Jose Fonseca
jrfonseca at kemper.freedesktop.org
Thu Jan 9 15:33:04 UTC 2014
Module: Demos
Branch: master
Commit: 2b0141596bf759a998ec412ed990abb709825934
URL: http://cgit.freedesktop.org/mesa/demos/commit/?id=2b0141596bf759a998ec412ed990abb709825934
Author: José Fonseca <jfonseca at vmware.com>
Date: Wed Jan 8 17:30:02 2014 +0000
demos/pixeltest: Adapt the example for points too.
This example is very useful to understand the rasterization of lines.
And with this change, points too.
Adding a key / command-line option to switch modes is left for a future
opportunity though.
Reviewed-by: Brian Paul <brianp at vmware.com>
---
src/demos/pixeltest.c | 112 +++++++++++++++++++++++++++++++------------------
1 file changed, 72 insertions(+), 40 deletions(-)
diff --git a/src/demos/pixeltest.c b/src/demos/pixeltest.c
index 0898290..0348daa 100644
--- a/src/demos/pixeltest.c
+++ b/src/demos/pixeltest.c
@@ -31,6 +31,13 @@ float width = 1.0f;
#define SIZE 128 /* of non-zoomed drawing region */
#define ZOOM 32 /* scale factor for zooming */
+/* TODO: Allow to switch mode via key and/or command-line option. */
+#if 0
+GLenum mode = GL_POINT;
+#else
+GLenum mode = GL_LINE;
+#endif
+
static GLboolean DrawFront = GL_FALSE;
GLushort TempImage[SIZE][SIZE]; /* original 128 by 128 pixel image */
GLushort myImage[SIZE*ZOOM][SIZE*ZOOM]; /* zoom by a factor of 32 */
@@ -168,33 +175,48 @@ drawMagnifiedView(void)
}
}
- /* Draws the actual line on zoomed version */
- drawline(X0+APosX-MouseX, Y0+APosY-MouseY,
- X1+APosX-MouseX, Y1+APosY-MouseY, 0);
-
- /* Draws bounding line area */
- if (fabsf(X0 - X1) >=
- fabsf(Y0 - Y1)) {
- /* X-MAJOR line */
- drawline(X0+APosX-MouseX, Y0+APosY-MouseY+halfwidth,
- X1+APosX-MouseX, Y1+APosY-MouseY+halfwidth, 0xffff);
- drawline(X0+APosX-MouseX, Y0+APosY-MouseY-halfwidth,
- X1+APosX-MouseX, Y1+APosY-MouseY-halfwidth, 0xffff);
- drawline(X0+APosX-MouseX, Y0+APosY-MouseY+halfwidth,
- X0+APosX-MouseX, Y0+APosY-MouseY-halfwidth, 0xffff);
- drawline(X1+APosX-MouseX, Y1+APosY-MouseY+halfwidth,
- X1+APosX-MouseX, Y1+APosY-MouseY-halfwidth, 0xffff);
- }
- else {
- /* Y-MAJOR line */
- drawline(X0+APosX-MouseX+halfwidth, Y0+APosY-MouseY,
- X1+APosX-MouseX+halfwidth, Y1+APosY-MouseY, 0xffff);
- drawline(X0+APosX-MouseX-halfwidth, Y0+APosY-MouseY,
- X1+APosX-MouseX-halfwidth, Y1+APosY-MouseY, 0xffff);
- drawline(X0+APosX-MouseX+halfwidth, Y0+APosY-MouseY,
- X0+APosX-MouseX-halfwidth, Y0+APosY-MouseY, 0xffff);
- drawline(X1+APosX-MouseX+halfwidth, Y1+APosY-MouseY,
- X1+APosX-MouseX-halfwidth, Y1+APosY-MouseY, 0xffff);
+ switch (mode) {
+ case GL_POINT:
+ /* Draws bounding point area */
+ drawline(X0+APosX-MouseX-halfwidth, Y0+APosY-MouseY-halfwidth,
+ X0+APosX-MouseX+halfwidth, Y0+APosY-MouseY-halfwidth, 0xffff);
+ drawline(X0+APosX-MouseX+halfwidth, Y0+APosY-MouseY-halfwidth,
+ X0+APosX-MouseX+halfwidth, Y0+APosY-MouseY+halfwidth, 0xffff);
+ drawline(X0+APosX-MouseX+halfwidth, Y0+APosY-MouseY+halfwidth,
+ X0+APosX-MouseX-halfwidth, Y0+APosY-MouseY+halfwidth, 0xffff);
+ drawline(X0+APosX-MouseX-halfwidth, Y0+APosY-MouseY+halfwidth,
+ X0+APosX-MouseX-halfwidth, Y0+APosY-MouseY-halfwidth, 0xffff);
+ break;
+ case GL_LINE:
+ /* Draws the actual line on zoomed version */
+ drawline(X0+APosX-MouseX, Y0+APosY-MouseY,
+ X1+APosX-MouseX, Y1+APosY-MouseY, 0);
+
+ /* Draws bounding line area */
+ if (fabsf(X0 - X1) >=
+ fabsf(Y0 - Y1)) {
+ /* X-MAJOR line */
+ drawline(X0+APosX-MouseX, Y0+APosY-MouseY+halfwidth,
+ X1+APosX-MouseX, Y1+APosY-MouseY+halfwidth, 0xffff);
+ drawline(X0+APosX-MouseX, Y0+APosY-MouseY-halfwidth,
+ X1+APosX-MouseX, Y1+APosY-MouseY-halfwidth, 0xffff);
+ drawline(X0+APosX-MouseX, Y0+APosY-MouseY+halfwidth,
+ X0+APosX-MouseX, Y0+APosY-MouseY-halfwidth, 0xffff);
+ drawline(X1+APosX-MouseX, Y1+APosY-MouseY+halfwidth,
+ X1+APosX-MouseX, Y1+APosY-MouseY-halfwidth, 0xffff);
+ }
+ else {
+ /* Y-MAJOR line */
+ drawline(X0+APosX-MouseX+halfwidth, Y0+APosY-MouseY,
+ X1+APosX-MouseX+halfwidth, Y1+APosY-MouseY, 0xffff);
+ drawline(X0+APosX-MouseX-halfwidth, Y0+APosY-MouseY,
+ X1+APosX-MouseX-halfwidth, Y1+APosY-MouseY, 0xffff);
+ drawline(X0+APosX-MouseX+halfwidth, Y0+APosY-MouseY,
+ X0+APosX-MouseX-halfwidth, Y0+APosY-MouseY, 0xffff);
+ drawline(X1+APosX-MouseX+halfwidth, Y1+APosY-MouseY,
+ X1+APosX-MouseX-halfwidth, Y1+APosY-MouseY, 0xffff);
+ }
+ break;
}
}
@@ -203,11 +225,6 @@ Display( void )
{
float z = 0;
- printf("(%f, %f) - (%f, %f), width = %f\n",
- X0, Y0,
- X1, Y1,
- width);
-
glClearColor(.3, .3, .3, 1);
glClear( GL_COLOR_BUFFER_BIT );
@@ -230,16 +247,31 @@ Display( void )
glVertex3f(150, 0, z);
glEnd();
- /* Original line
+ /* Original geometry
*/
- glLineWidth(width);
- glBegin(GL_LINES);
- glColor3f(.8,0,0);
- glVertex3f(X0, Y0, z);
- glColor3f(0,.9,0);
- glVertex3f(X1, Y1, z);
- glEnd();
+ switch (mode) {
+ case GL_POINT:
+ printf("POINT, (%f, %f), size = %f\n",
+ X0, Y0, width);
+ glPointSize(width);
+ glBegin(GL_POINTS);
+ glColor3f(.8,0,0);
+ glVertex3f(X0, Y0, z);
+ glEnd();
+ break;
+ case GL_LINE:
+ printf("LINE, (%f, %f) - (%f, %f), width = %f\n",
+ X0, Y0, X1, Y1, width);
+ glLineWidth(width);
+ glBegin(GL_LINES);
+ glColor3f(.8,0,0);
+ glVertex3f(X0, Y0, z);
+ glColor3f(0,.9,0);
+ glVertex3f(X1, Y1, z);
+ glEnd();
+ break;
+ }
glColor3f(1,1,1);
glViewport( 0, 0, WinWidth, WinHeight );
More information about the mesa-commit
mailing list