summaryrefslogtreecommitdiff
path: root/progs
diff options
context:
space:
mode:
Diffstat (limited to 'progs')
-rw-r--r--progs/SConscript71
-rw-r--r--progs/demos/Makefile7
-rw-r--r--progs/demos/shadowtex.c1
-rw-r--r--progs/fp/position-frc-integer.txt7
-rw-r--r--progs/fp/position-frc.txt6
-rw-r--r--progs/fp/position-upper-left.txt7
-rw-r--r--progs/fp/position.txt2
-rw-r--r--progs/tests/bufferobj.c8
-rw-r--r--progs/trivial/Makefile1
-rw-r--r--progs/trivial/tri-fbo-tex-mip.c1
-rw-r--r--progs/trivial/vp-array-hf.c215
-rw-r--r--progs/xdemos/glxgears.c14
-rw-r--r--progs/xdemos/offset.c10
13 files changed, 302 insertions, 48 deletions
diff --git a/progs/SConscript b/progs/SConscript
index 3b180d00bc..66a1745271 100644
--- a/progs/SConscript
+++ b/progs/SConscript
@@ -15,38 +15,39 @@ if progs_env['platform'] == 'windows':
'gdi32',
])
-# OpenGL
-if progs_env['platform'] == 'windows':
- progs_env.Prepend(LIBS = ['glu32', 'opengl32'])
-else:
- progs_env.Prepend(LIBS = ['GLU', 'GL'])
-
-# Glut
-progs_env.Prepend(LIBS = [glut])
-
-# GLEW
-progs_env.Prepend(LIBS = [glew])
-
-progs_env.Prepend(CPPPATH = [
- '#progs/util',
-])
-
-progs_env.Prepend(LIBS = [
- util,
-])
-
-Export('progs_env')
-
-SConscript([
- 'demos/SConscript',
- 'glsl/SConscript',
- 'redbook/SConscript',
- 'samples/SConscript',
- 'tests/SConscript',
- 'trivial/SConscript',
- 'vp/SConscript',
- 'vpglsl/SConscript',
- 'fp/SConscript',
- 'wgl/SConscript',
- 'perf/SConscript',
-])
+if platform != 'embedded':
+ # OpenGL
+ if progs_env['platform'] == 'windows':
+ progs_env.Prepend(LIBS = ['glu32', 'opengl32'])
+ else:
+ progs_env.Prepend(LIBS = ['GLU', 'GL'])
+
+ # Glut
+ progs_env.Prepend(LIBS = [glut])
+
+ # GLEW
+ progs_env.Prepend(LIBS = [glew])
+
+ progs_env.Prepend(CPPPATH = [
+ '#progs/util',
+ ])
+
+ progs_env.Prepend(LIBS = [
+ util,
+ ])
+
+ Export('progs_env')
+
+ SConscript([
+ 'demos/SConscript',
+ 'glsl/SConscript',
+ 'redbook/SConscript',
+ 'samples/SConscript',
+ 'tests/SConscript',
+ 'trivial/SConscript',
+ 'vp/SConscript',
+ 'vpglsl/SConscript',
+ 'fp/SConscript',
+ 'wgl/SConscript',
+ 'perf/SConscript',
+ ])
diff --git a/progs/demos/Makefile b/progs/demos/Makefile
index 65fdbaaad8..f21d916330 100644
--- a/progs/demos/Makefile
+++ b/progs/demos/Makefile
@@ -124,13 +124,6 @@ reflect.o: reflect.c showbuffer.h
$(APP_CC) -c -I$(INCDIR) $(CFLAGS) reflect.c
-shadowtex: shadowtex.o showbuffer.o
- $(APP_CC) $(CFLAGS) $(LDFLAGS) shadowtex.o showbuffer.o $(LIBS) -o $@
-
-shadowtex.o: shadowtex.c showbuffer.h
- $(APP_CC) -c -I$(INCDIR) $(CFLAGS) shadowtex.c
-
-
gloss: gloss.o trackball.o readtex.o
$(APP_CC) $(CFLAGS) $(LDFLAGS) gloss.o trackball.o readtex.o $(LIBS) -o $@
diff --git a/progs/demos/shadowtex.c b/progs/demos/shadowtex.c
index 036f73d40b..677a42104f 100644
--- a/progs/demos/shadowtex.c
+++ b/progs/demos/shadowtex.c
@@ -38,7 +38,6 @@
#include <math.h>
#include <GL/glew.h>
#include <GL/glut.h>
-#include "showbuffer.h"
#define DEG_TO_RAD (3.14159 / 180.0)
diff --git a/progs/fp/position-frc-integer.txt b/progs/fp/position-frc-integer.txt
new file mode 100644
index 0000000000..3a634c9b3b
--- /dev/null
+++ b/progs/fp/position-frc-integer.txt
@@ -0,0 +1,7 @@
+!!ARBfp1.0
+# expected: black triangle
+# brown means the wrong pixel center convention is being used
+OPTION ARB_fragment_coord_pixel_center_integer;
+MOV result.color, {0}.x;
+FRC result.color.xy, fragment.position;
+END
diff --git a/progs/fp/position-frc.txt b/progs/fp/position-frc.txt
new file mode 100644
index 0000000000..35ae3efa10
--- /dev/null
+++ b/progs/fp/position-frc.txt
@@ -0,0 +1,6 @@
+!!ARBfp1.0
+# expected: brown triangle
+# black means the wrong pixel center convention is being used
+MOV result.color, {0}.x;
+FRC result.color.xy, fragment.position;
+END
diff --git a/progs/fp/position-upper-left.txt b/progs/fp/position-upper-left.txt
new file mode 100644
index 0000000000..ac632dbfb7
--- /dev/null
+++ b/progs/fp/position-upper-left.txt
@@ -0,0 +1,7 @@
+!!ARBfp1.0
+# expected: the yellow vertex is the bottom one
+# if it is the top one, the wrong origin convention is being used
+OPTION ARB_fragment_coord_origin_upper_left;
+MOV result.color, {0}.x;
+MUL result.color.xy, fragment.position, {.005}.x;
+END
diff --git a/progs/fp/position.txt b/progs/fp/position.txt
index 1875897d78..f59d0259c7 100644
--- a/progs/fp/position.txt
+++ b/progs/fp/position.txt
@@ -1,4 +1,6 @@
!!ARBfp1.0
+# expected: the yellow vertex is the top one
+# if it is the bottom one, the wrong origin convention is being used
MOV result.color, {0}.x;
MUL result.color.xy, fragment.position, {.005}.x;
END
diff --git a/progs/tests/bufferobj.c b/progs/tests/bufferobj.c
index d4ca270016..dc479af045 100644
--- a/progs/tests/bufferobj.c
+++ b/progs/tests/bufferobj.c
@@ -29,6 +29,7 @@ struct object
GLuint VertexStride;
GLuint ColorStride;
GLuint NumElements;
+ GLuint MaxElement;
};
static struct object Objects[NUM_OBJECTS];
@@ -58,7 +59,8 @@ static void DrawObject( const struct object *obj )
if (obj->NumElements > 0) {
/* indexed arrays */
glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, obj->ElementsBufferID);
- glDrawElements(GL_LINE_LOOP, obj->NumElements, GL_UNSIGNED_INT, NULL);
+ glDrawRangeElements(GL_LINE_LOOP, 0, obj->MaxElement,
+ obj->NumElements, GL_UNSIGNED_INT, NULL);
}
else {
/* non-indexed arrays */
@@ -300,6 +302,7 @@ static void MakeObject1(struct object *obj)
obj->VertexStride = 0;
obj->ColorStride = 0;
obj->NumElements = 0;
+ obj->MaxElement = 0;
glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
@@ -345,6 +348,7 @@ static void MakeObject2(struct object *obj)
obj->ColorStride = 6 * sizeof(GLfloat);
obj->NumElements = 0;
+ obj->MaxElement = 0;
glUnmapBufferARB(GL_ARRAY_BUFFER_ARB);
@@ -401,6 +405,7 @@ static void MakeObject3(struct object *obj)
i[3] = 3;
glUnmapBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB);
obj->NumElements = 4;
+ obj->MaxElement = 3;
if (Have_ARB_vertex_array_object) {
CreateVertexArrayObject(obj);
@@ -445,6 +450,7 @@ static void MakeObject4(struct object *obj)
/* Setup a buffer of indices to test the ELEMENTS path */
obj->ElementsBufferID = 0;
obj->NumElements = 0;
+ obj->MaxElement = 0;
if (Have_ARB_vertex_array_object) {
CreateVertexArrayObject(obj);
diff --git a/progs/trivial/Makefile b/progs/trivial/Makefile
index 5e08d60389..207215dee9 100644
--- a/progs/trivial/Makefile
+++ b/progs/trivial/Makefile
@@ -160,6 +160,7 @@ SOURCES = \
vbo-drawelements.c \
vbo-drawrange.c \
vp-array.c \
+ vp-array-hf.c \
vp-array-int.c \
vp-clip.c \
vp-line-clip.c \
diff --git a/progs/trivial/tri-fbo-tex-mip.c b/progs/trivial/tri-fbo-tex-mip.c
index df4725c7b4..2e8fb74a00 100644
--- a/progs/trivial/tri-fbo-tex-mip.c
+++ b/progs/trivial/tri-fbo-tex-mip.c
@@ -6,7 +6,6 @@
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
-#include <math.h>
/* For debug */
diff --git a/progs/trivial/vp-array-hf.c b/progs/trivial/vp-array-hf.c
new file mode 100644
index 0000000000..f812436437
--- /dev/null
+++ b/progs/trivial/vp-array-hf.c
@@ -0,0 +1,215 @@
+/* Test glGenProgramsNV(), glIsProgramNV(), glLoadProgramNV() */
+
+#include <assert.h>
+#include <string.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <GL/glew.h>
+#include <GL/glut.h>
+
+typedef union { GLfloat f; GLint i; } fi_type;
+/**
+ * Convert a 4-byte float to a 2-byte half float.
+ * Based on code from:
+ * http://www.opengl.org/discussion_boards/ubb/Forum3/HTML/008786.html
+ */
+static GLhalf
+_mesa_float_to_half(GLfloat val)
+{
+
+ const fi_type fi = {val};
+ const int flt_m = fi.i & 0x7fffff;
+ const int flt_e = (fi.i >> 23) & 0xff;
+ const int flt_s = (fi.i >> 31) & 0x1;
+ int s, e, m = 0;
+ GLhalf result;
+
+ /* sign bit */
+ s = flt_s;
+
+ /* handle special cases */
+ if ((flt_e == 0) && (flt_m == 0)) {
+ /* zero */
+ /* m = 0; - already set */
+ e = 0;
+ }
+ else if ((flt_e == 0) && (flt_m != 0)) {
+ /* denorm -- denorm float maps to 0 half */
+ /* m = 0; - already set */
+ e = 0;
+ }
+ else if ((flt_e == 0xff) && (flt_m == 0)) {
+ /* infinity */
+ /* m = 0; - already set */
+ e = 31;
+ }
+ else if ((flt_e == 0xff) && (flt_m != 0)) {
+ /* NaN */
+ m = 1;
+ e = 31;
+ }
+ else {
+ /* regular number */
+ const int new_exp = flt_e - 127;
+ if (new_exp < -24) {
+ /* this maps to 0 */
+ /* m = 0; - already set */
+ e = 0;
+ }
+ else if (new_exp < -14) {
+ /* this maps to a denorm */
+ unsigned int exp_val = (unsigned int) (-14 - new_exp); /* 2^-exp_val*/
+ e = 0;
+ switch (exp_val) {
+ case 0:
+ /* m = 0; - already set */
+ break;
+ case 1: m = 512 + (flt_m >> 14); break;
+ case 2: m = 256 + (flt_m >> 15); break;
+ case 3: m = 128 + (flt_m >> 16); break;
+ case 4: m = 64 + (flt_m >> 17); break;
+ case 5: m = 32 + (flt_m >> 18); break;
+ case 6: m = 16 + (flt_m >> 19); break;
+ case 7: m = 8 + (flt_m >> 20); break;
+ case 8: m = 4 + (flt_m >> 21); break;
+ case 9: m = 2 + (flt_m >> 22); break;
+ case 10: m = 1; break;
+ }
+ }
+ else if (new_exp > 15) {
+ /* map this value to infinity */
+ /* m = 0; - already set */
+ e = 31;
+ }
+ else {
+ /* regular */
+ e = new_exp + 15;
+ m = flt_m >> 13;
+ }
+ }
+
+ result = (s << 15) | (e << 10) | m;
+ return result;
+}
+
+
+GLfloat verts[][4] = {
+ { 0.9, -0.9, 0.0, 1.0 },
+ { 0.9, 0.9, 0.0, 1.0 },
+ { -0.9, 0.9, 0.0, 1.0 },
+ { -0.9, -0.9, 0.0, 1.0 },
+};
+
+GLhalf hverts[16];
+
+GLubyte color[][4] = {
+ { 0x00, 0x00, 0xff, 0x00 },
+ { 0x00, 0xff, 0x00, 0x00 },
+ { 0xff, 0x00, 0x00, 0x00 },
+ { 0xff, 0xff, 0xff, 0x00 },
+};
+
+GLuint indices[] = { 0, 1, 2, 3 };
+
+static void Init( void )
+{
+ GLint errno;
+ GLuint prognum;
+ GLuint i, j;
+
+ static const char *prog1 =
+ "!!ARBvp1.0\n"
+ "MOV result.color, vertex.color;\n"
+ "MOV result.position, vertex.position;\n"
+ "END\n";
+
+ if (!glutExtensionSupported("GL_ARB_half_float_vertex")) {
+ printf("GL_ARB_half_float_vertex not found!\n");
+ exit(0);
+ }
+
+ glGenProgramsARB(1, &prognum);
+ glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prognum);
+ glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
+ strlen(prog1), (const GLubyte *) prog1);
+
+ assert(glIsProgramARB(prognum));
+ errno = glGetError();
+ printf("glGetError = %d\n", errno);
+ if (errno != GL_NO_ERROR)
+ {
+ GLint errorpos;
+
+ glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorpos);
+ printf("errorpos: %d\n", errorpos);
+ printf("%s\n", (char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB));
+ }
+
+ for (i = 0; i < 4; i++)
+ for (j = 0; j < 4; j++)
+ hverts[i * 4 + j] = _mesa_float_to_half(verts[i][j]);
+
+ glEnableClientState( GL_VERTEX_ARRAY );
+ glEnableClientState( GL_COLOR_ARRAY );
+ glVertexPointer( 4, GL_HALF_FLOAT, 8, hverts );
+ glColorPointer( 4, GL_UNSIGNED_BYTE, 0, color );
+
+}
+
+
+
+static void Display( void )
+{
+ glClearColor(0.3, 0.3, 0.3, 1);
+ glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
+
+ glEnable(GL_VERTEX_PROGRAM_NV);
+ glDrawElements( GL_TRIANGLES, 3, GL_UNSIGNED_INT, indices );
+
+ glFlush();
+}
+
+
+static void Reshape( int width, int height )
+{
+ glViewport( 0, 0, width, height );
+ glMatrixMode( GL_PROJECTION );
+ glLoadIdentity();
+ glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
+ glMatrixMode( GL_MODELVIEW );
+ glLoadIdentity();
+ /*glTranslatef( 0.0, 0.0, -15.0 );*/
+}
+
+
+static void Key( unsigned char key, int x, int y )
+{
+ (void) x;
+ (void) y;
+ switch (key) {
+ case 27:
+ exit(0);
+ break;
+ }
+ glutPostRedisplay();
+}
+
+
+
+
+int main( int argc, char *argv[] )
+{
+ glutInit( &argc, argv );
+ glutInitWindowPosition( 0, 0 );
+ glutInitWindowSize( 250, 250 );
+ glutInitDisplayMode( GLUT_RGB | GLUT_SINGLE | GLUT_DEPTH );
+ glutCreateWindow(argv[0]);
+ glewInit();
+ glutReshapeFunc( Reshape );
+ glutKeyboardFunc( Key );
+ glutDisplayFunc( Display );
+ Init();
+ glutMainLoop();
+ return 0;
+}
diff --git a/progs/xdemos/glxgears.c b/progs/xdemos/glxgears.c
index 088f25a357..92c75caa5e 100644
--- a/progs/xdemos/glxgears.c
+++ b/progs/xdemos/glxgears.c
@@ -35,6 +35,7 @@
#include <X11/keysym.h>
#include <GL/gl.h>
#include <GL/glx.h>
+#include <GL/glxext.h>
#ifndef GLX_MESA_swap_control
#define GLX_MESA_swap_control 1
@@ -586,11 +587,17 @@ is_glx_extension_supported(Display *dpy, const char *query)
* Attempt to determine whether or not the display is synched to vblank.
*/
static void
-query_vsync(Display *dpy)
+query_vsync(Display *dpy, GLXDrawable drawable)
{
int interval = 0;
-
+#if defined(GLX_EXT_swap_control)
+ if (is_glx_extension_supported(dpy, "GLX_EXT_swap_control")) {
+ unsigned int tmp = -1;
+ glXQueryDrawable(dpy, drawable, GLX_SWAP_INTERVAL_EXT, &tmp);
+ interval = tmp;
+ } else
+#endif
if (is_glx_extension_supported(dpy, "GLX_MESA_swap_control")) {
PFNGLXGETSWAPINTERVALMESAPROC pglXGetSwapIntervalMESA =
(PFNGLXGETSWAPINTERVALMESAPROC)
@@ -749,7 +756,7 @@ main(int argc, char *argv[])
make_window(dpy, "glxgears", x, y, winWidth, winHeight, &win, &ctx);
XMapWindow(dpy, win);
glXMakeCurrent(dpy, win, ctx);
- query_vsync(dpy);
+ query_vsync(dpy, win);
if (printInfo) {
printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
@@ -771,6 +778,7 @@ main(int argc, char *argv[])
glDeleteLists(gear1, 1);
glDeleteLists(gear2, 1);
glDeleteLists(gear3, 1);
+ glXMakeCurrent(dpy, None, NULL);
glXDestroyContext(dpy, ctx);
XDestroyWindow(dpy, win);
XCloseDisplay(dpy);
diff --git a/progs/xdemos/offset.c b/progs/xdemos/offset.c
index 314a4fcdd1..3858a5b802 100644
--- a/progs/xdemos/offset.c
+++ b/progs/xdemos/offset.c
@@ -94,6 +94,9 @@ static int attributeList[] = { GLX_RGBA, GLX_RED_SIZE, 1, GLX_GREEN_SIZE, 1,
static int dimension = 3;
+static float Scale = 1.0;
+
+
int main(int argc, char** argv) {
Display *dpy;
XVisualInfo *vi;
@@ -182,6 +185,7 @@ draw_scene(int mx, int my) {
#else
glEnable(GL_POLYGON_OFFSET_FILL);
#endif
+ glScalef(Scale, Scale, Scale);
cubes(mx, my, HIDDEN_LINE);
#ifdef GL_EXT_polygon_offset
glDisable(GL_POLYGON_OFFSET_EXT);
@@ -289,6 +293,12 @@ process_input(Display *dpy, Window win) {
case KeyPress:
(void) XLookupString(&event.xkey, buf, sizeof(buf), &keysym, NULL);
switch (keysym) {
+ case 'Z':
+ Scale *= 1.1;
+ break;
+ case 'z':
+ Scale *= 0.9;
+ break;
case XK_Escape:
exit(EXIT_SUCCESS);
default: