Erik Hofman <[EMAIL PROTECTED]> writes: > Alex Romosan wrote: >> or you can add a call to glEnable(GL_POINT_SPRITE): > >> + glEnable(GL_POINT_SPRITE); >> this allowed me to use GL_POINT_SMOOTH on my nvidia card (enhanced >> lighting works fine now). >> i think this would be a better solution (tested only on my nvidia >> card >> though). > > Ok, I've added support for point sprites. I does indeed increase the > framerate in my PC. I find this a rather peculiar extension though. > Especially since SGI has always been using point sprites without > naming them.
i still think we are papering over a real bug in the fgfs display code when we enable point sprites. the attached program:
#include <stdio.h> #include <stdlib.h> #include <GL/gl.h> /* Header File For The OpenGL Library */ #include <GL/glu.h> /* Header File For The GLU Library */ #include <GL/glut.h> #define NB_PIXELS 1000 void GLUTdraw(void) { int i; int done=0; GLfloat pixels[NB_PIXELS*3]; for(i=0;i<NB_PIXELS;i++) { pixels[3*i]=rand()%250-125; pixels[3*i+1]=rand()%250-125; pixels[3*i+2]=rand()%250-125; } do { glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glRotatef(2.0,1.0,1.0,1.0); glRotatef(1.0,0.0,1.0,1.0); glColor4ub(255,255,255,255); glBegin(GL_POINTS); for(i=0;i<NB_PIXELS;i++) { glVertex3f(pixels[3*i],pixels[3*i+1],pixels[3*i+2]); } glEnd(); glutSwapBuffers(); } while(!done); } int main(int argc,char *argv[]) { glutInit(&argc, argv); // initialize the toolkit glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH | GLUT_STENCIL); glutInitWindowSize(640,480); // set window size glutInitWindowPosition(100, 150); // set window position on screen glutCreateWindow("testgl"); // open the screen window glutDisplayFunc(GLUTdraw); glViewport(0,0,640,480); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-100,100,-100,100,-500,500); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glEnable(GL_POINT_SMOOTH); glHint(GL_POINT_SMOOTH_HINT,GL_DONT_CARE); glPointSize(5.0f); glutMainLoop(); return 0; }
enables GL_POINT_SMOOTH and runs just fine on my nvidia card without the need to enable GL_POINT_SPRITE. so it's something else we do along the way that gets the driver in a very confused state. btw, if i understand correctly GL_POINT_SMOOTH is supposed to give you round points instead of square ones (GL_FASTEST/GL_NICEST hints refer to the most efficient/correct option, while GL_DONT_CARE means the client has no preference). GL_POINT_SPRITE will also let you map a texture across a point sprite if GL_COORD_REPLACE is enabled. still trying to figure out the real reason why the nvidia driver is slow when we enable GL_POINT_SMOOTH in fgfs (and learning a lot more about openGL then i ever wanted to know). --alex-- -- | I believe the moment is at hand when, by a paranoiac and active | | advance of the mind, it will be possible (simultaneously with | | automatism and other passive states) to systematize confusion | | and thus to help to discredit completely the world of reality. |