From 9c22f910304de88ea5b0ff9bf0608abf44e86806 Mon Sep 17 00:00:00 2001 From: michal Date: Sat, 27 Oct 2007 18:41:47 +0100 Subject: Optimize fragment program. --- progs/demos/arbfplight.c | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'progs/demos/arbfplight.c') diff --git a/progs/demos/arbfplight.c b/progs/demos/arbfplight.c index bc2c7e312a..401bfb4968 100644 --- a/progs/demos/arbfplight.c +++ b/progs/demos/arbfplight.c @@ -46,14 +46,25 @@ static PFNGLDELETEPROGRAMSARBPROC glDeleteProgramsARB_func; /* Set to one to test ARB_fog_linear program option */ #define DO_FRAGMENT_FOG 0 +static void normalize (GLfloat *dst, const GLfloat *src) +{ + GLfloat len = sqrt (src[0] * src[0] + src[1] * src[1] + src[2] * src[2]); + dst[0] = src[0] / len; + dst[1] = src[1] / len; + dst[2] = src[2] / len; +} static void Redisplay( void ) { glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); if (PixelLight) { + GLfloat pos[4]; + + normalize( pos, LightPos ); + pos[3] = LightPos[3]; glProgramLocalParameter4fvARB_func(GL_FRAGMENT_PROGRAM_ARB, - LIGHTPOS, LightPos); + LIGHTPOS, pos); glEnable(GL_FRAGMENT_PROGRAM_ARB); glEnable(GL_VERTEX_PROGRAM_ARB); glDisable(GL_LIGHTING); @@ -204,35 +215,31 @@ static void Init( void ) "PARAM Diffuse = state.material.diffuse; \n" "PARAM Specular = state.material.specular; \n" "PARAM LightPos = program.local[3]; \n" - "TEMP lightDir, normal, len; \n" + "TEMP normal, len; \n" "TEMP dotProd, specAtten; \n" "TEMP diffuseColor, specularColor; \n" - "# Compute normalized light direction \n" - "DP3 len.x, LightPos, LightPos; \n" - "RSQ len.y, len.x; \n" - "MUL lightDir, LightPos, len.y; \n" - "# Compute normalized normal \n" "DP3 len.x, fragment.texcoord[0], fragment.texcoord[0]; \n" "RSQ len.y, len.x; \n" - "MUL normal, fragment.texcoord[0], len.y; \n" + "MUL normal.xyz, fragment.texcoord[0], len.y; \n" "# Compute dot product of light direction and normal vector\n" - "DP3_SAT dotProd, lightDir, normal; # limited to [0,1]\n" + "DP3_SAT dotProd.x, LightPos, normal; # limited to [0,1]\n" - "MUL diffuseColor, Diffuse, dotProd; # diffuse attenuation\n" + "MUL diffuseColor.xyz, Diffuse, dotProd.x; # diffuse attenuation\n" "POW specAtten.x, dotProd.x, {20.0}.x; # specular exponent\n" - "MUL specularColor, Specular, specAtten.x; # specular attenuation\n" + "MUL specularColor.xyz, Specular, specAtten.x; # specular attenuation\n" + "MOV result.color.w, Diffuse; \n" #if DO_FRAGMENT_FOG "# need to clamp color to [0,1] before fogging \n" - "ADD_SAT result.color, diffuseColor, specularColor; # add colors\n" + "ADD_SAT result.color.xyz, diffuseColor, specularColor; # add colors\n" #else "# clamping will be done after program's finished \n" - "ADD result.color, diffuseColor, specularColor; # add colors\n" + "ADD result.color.xyz, diffuseColor, specularColor; # add colors\n" #endif "END \n" ; -- cgit v1.2.3 From e6479c62504ec828e25cd6b46f8999f3a26a482c Mon Sep 17 00:00:00 2001 From: Keith Whitwell Date: Tue, 24 Feb 2009 12:02:24 +0000 Subject: demos: add some fflushes for windows --- progs/demos/arbfplight.c | 1 + progs/demos/arbfslight.c | 1 + progs/demos/fslight.c | 1 + progs/demos/gearbox.c | 1 + progs/demos/gears.c | 1 + progs/demos/geartrain.c | 1 + progs/demos/gloss.c | 1 + progs/demos/glslnoise.c | 1 + progs/demos/reflect.c | 1 + progs/demos/streaming_rect.c | 1 + progs/demos/texcyl.c | 1 + 11 files changed, 11 insertions(+) (limited to 'progs/demos/arbfplight.c') diff --git a/progs/demos/arbfplight.c b/progs/demos/arbfplight.c index 401bfb4968..7b7a12bf88 100644 --- a/progs/demos/arbfplight.c +++ b/progs/demos/arbfplight.c @@ -92,6 +92,7 @@ static void Redisplay( void ) GLfloat seconds = (t - T0) / 1000.0; GLfloat fps = Frames / seconds; printf("%d frames in %6.3f seconds = %6.3f FPS\n", Frames, seconds, fps); + fflush(stdout); T0 = t; Frames = 0; } diff --git a/progs/demos/arbfslight.c b/progs/demos/arbfslight.c index a84491d34f..275c85105e 100644 --- a/progs/demos/arbfslight.c +++ b/progs/demos/arbfslight.c @@ -105,6 +105,7 @@ static void Redisplay (void) GLfloat seconds = (GLfloat) (t - t0) / 1000.0f; GLfloat fps = frames / seconds; printf ("%d frames in %6.3f seconds = %6.3f FPS\n", frames, seconds, fps); + fflush(stdout); t0 = t; frames = 0; } diff --git a/progs/demos/fslight.c b/progs/demos/fslight.c index e79b5cc197..41a13cc9f4 100644 --- a/progs/demos/fslight.c +++ b/progs/demos/fslight.c @@ -105,6 +105,7 @@ Redisplay(void) GLfloat fps = frames / seconds; printf("%d frames in %6.3f seconds = %6.3f FPS\n", frames, seconds, fps); + fflush(stdout); t0 = t; frames = 0; } diff --git a/progs/demos/gearbox.c b/progs/demos/gearbox.c index 35bde04417..2dcf32f92f 100644 --- a/progs/demos/gearbox.c +++ b/progs/demos/gearbox.c @@ -314,6 +314,7 @@ draw(void) GLfloat seconds = (t - T0) / 1000.0; GLfloat fps = Frames / seconds; printf("%d frames in %6.3f seconds = %6.3f FPS\n", Frames, seconds, fps); + fflush(stdout); T0 = t; Frames = 0; } diff --git a/progs/demos/gears.c b/progs/demos/gears.c index 2a9fefefb5..6016162d6f 100644 --- a/progs/demos/gears.c +++ b/progs/demos/gears.c @@ -219,6 +219,7 @@ draw(void) GLfloat seconds = (t - T0) / 1000.0; GLfloat fps = Frames / seconds; printf("%d frames in %6.3f seconds = %6.3f FPS\n", Frames, seconds, fps); + fflush(stdout); T0 = t; Frames = 0; if ((t >= 999.0 * autoexit) && (autoexit)) { diff --git a/progs/demos/geartrain.c b/progs/demos/geartrain.c index 8363f2abc6..8fe405e807 100644 --- a/progs/demos/geartrain.c +++ b/progs/demos/geartrain.c @@ -905,6 +905,7 @@ draw (void) GLfloat seconds = (t - T0) / 1000.0; GLfloat fps = Frames / seconds; printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps); + fflush(stdout); T0 = t; Frames = 0; } diff --git a/progs/demos/gloss.c b/progs/demos/gloss.c index b2126e3267..69694b23a0 100644 --- a/progs/demos/gloss.c +++ b/progs/demos/gloss.c @@ -132,6 +132,7 @@ static void Display( void ) GLfloat seconds = (t - T0) / 1000.0; GLfloat fps = Frames / seconds; printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps); + fflush(stdout); T0 = t; Frames = 0; } diff --git a/progs/demos/glslnoise.c b/progs/demos/glslnoise.c index 4ee1292816..e972b62673 100644 --- a/progs/demos/glslnoise.c +++ b/progs/demos/glslnoise.c @@ -65,6 +65,7 @@ static void Redisplay (void) GLfloat seconds = (GLfloat) (t - t0) / 1000.0f; GLfloat fps = frames / seconds; printf ("%d frames in %6.3f seconds = %6.3f FPS\n", frames, seconds, fps); + fflush(stdout); t0 = t; frames = 0; } diff --git a/progs/demos/reflect.c b/progs/demos/reflect.c index 0bec0663bc..b72af12885 100644 --- a/progs/demos/reflect.c +++ b/progs/demos/reflect.c @@ -401,6 +401,7 @@ DrawWindow(void) GLfloat seconds = (t - t0) / 1000.0; GLfloat fps = frames / seconds; printf("%d frames in %g seconds = %g FPS\n", frames, seconds, fps); + fflush(stdout); t0 = t; frames = 0; } diff --git a/progs/demos/streaming_rect.c b/progs/demos/streaming_rect.c index 294f9c3060..f65ac4ce36 100644 --- a/progs/demos/streaming_rect.c +++ b/progs/demos/streaming_rect.c @@ -153,6 +153,7 @@ static void Display( void ) GLfloat fps = Frames / seconds; printf("%d frames in %6.3f seconds = %6.3f FPS\n", Frames, seconds, fps); + fflush(stdout); drift_increment = 2.2 * seconds / Frames; T0 = t; diff --git a/progs/demos/texcyl.c b/progs/demos/texcyl.c index e3b0303975..0e6089bced 100644 --- a/progs/demos/texcyl.c +++ b/progs/demos/texcyl.c @@ -79,6 +79,7 @@ static void Display( void ) GLfloat seconds = (t - T0) / 1000.0; GLfloat fps = Frames / seconds; printf("%d frames in %g seconds = %g FPS\n", Frames, seconds, fps); + fflush(stdout); T0 = t; Frames = 0; } -- cgit v1.2.3