From: John G. <je...@vi...> - 2000-10-27 20:39:45
|
Hello, I originaly sent this to the opengl.org forums, but didn't get much help, aside from someone suggesting that it is a HW acceleration problem. (Not the case, my Voodoo2 runs all the latest Linux OpenGL games perfectly. (I actually bought the card specifically for Tuxedo T Penguin: A Quest for Herring, (This was before the large array of commercial game ports came in.) So am sure that it is hardware accelerating correctly. I'll just paste my post from opengl or to save from having to retype it all. I have since posting it removed the glFrustum and glViewport calls from the main loop, with no speed increase. Also I forgot to expand the i3dTranslate and i3dRotate functions into the code that they call so you could see what is going on (I did that for the rest of the functions that I wrote) but I guess you can figure out what goes on behind the scenes of those two functions. It is purely opengl code so the botteneck wouldn't be there. <begin repost> Hi, I'm having a bit of a problem finding out what is causing my code to be so slow. I have a model rotating with vertex shading and am only getting about 11 FPS. (The model has 7121 faces so that is about 79,000 polygons per second). The thing is I have tried it at resolutions from 320x240 up to 800x600 and the framerate is always the same, so my rendering code shouldn't be the problem, correct? Further evidence that it is not the rendering code causing the problem is that I switched from a for loop that calls glcolor, glnormal, and glvertex one time for each face, to using glDrawArrays and didn't notice any improvement whatsoever in framerate. The problem is that there is very little in the form of non-gl code in the main loop. The main loop looks like this: for(i = 0; i < 100; i++){ glViewport (0, 0, (GLsizei) W, (GLsizei) H); glMatrixMode (GL_PROJECTION); glLoadIdentity (); glFrustum (-1.0, 1.0, -1.0, 1.0, MinDepth, MaxDepth); glMatrixMode (GL_MODELVIEW); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); i3dTranslate(-Camera->position[VALUE_X],-Camera->position[VALUE_Y],-Camera->position[VALUE_Z]); i3dRotate(-Camera->angle[VALUE_X],-Camera->angle[VALUE_Y], -Camera->angle[VALUE_Z]); /* I'll explain this next line later */ i3dDrawObject(nimitz); /*I'm using SDL, not Glut */ SDL_GL_SwapBuffers(); Nimitz->angle[VALUE_Y] += 2.0; } i3dDrawObjects is of course a function I wrote, in actuality the main loop has more of my functions than that, but I just expanded them so you'd know exactly what is going on. i3dDrawObject has an if statement that checks for things like texturing, lighting, etc. so that I be sure to pass the right set of normals and such. But the main rendering part is here: glColorPointer(4, GL_FLOAT, 0, Object->colorarray); glNormalPointer(GL_FLOAT, 0, Object->vnormalarray); glVertexPointer(3, GL_FLOAT, 0, Object->vertexarray); glDrawArrays(I3DRenderType, 0, (Object->facecount * 3)); I've actually commented out everything but that to be sure that it wasn't the if statemnents giving me trouble and still got the same framerate. Any ideas on what it could be? I've even commented out the code that adds to the angle of the model. The only thing left is required GL code. I'd appreciate any help. <end repost> is there anything specific to Mesa, (I'm using 3.2 I believe) that would cause this to happen? Surely if it were a hardware acceleration problem, reducing the resolution would have fixed it. But all I am passing it basically pure OpenGL code. I'm rather puzzled. I hope I am not stuck at 79,000 polys/sec. -- "I'm willing to J.O.B., just not on no jagg-off shoe-shine tip" "Jagg-off shoe-shine tip?" "No *background-checking* jagg-off shoe-shine tip" |
From: Brian P. <br...@va...> - 2000-10-27 22:03:29
|
John Garrison wrote: > > Hello, I originaly sent this to the opengl.org forums, but didn't get > much help, aside from someone suggesting that it is a HW acceleration > problem. (Not the case, my Voodoo2 runs all the latest Linux OpenGL > games perfectly. (I actually bought the card specifically for Tuxedo T > Penguin: A Quest for Herring, (This was before the large array of > commercial game ports came in.) So am sure that it is hardware > accelerating correctly. I'll just paste my post from opengl or to save > from having to retype it all. I have since posting it removed the > glFrustum and glViewport calls from the main loop, with no speed > increase. Also I forgot to expand the i3dTranslate and i3dRotate > functions into the code that they call so you could see what is going on > (I did that for the rest of the functions that I wrote) but I guess you > can figure out what goes on behind the scenes of those two functions. It > is purely opengl code so the botteneck wouldn't be there. > > <begin repost> > > Hi, > I'm having a bit of a problem finding out what is causing my code to be > so slow. I have a model rotating with vertex shading and am only getting > about 11 FPS. (The model has 7121 faces so that is about 79,000 polygons > per second). The thing is I have tried it at resolutions from 320x240 up > to 800x600 and the framerate is always the same, so my rendering code > shouldn't be the problem, correct? Further evidence that it is not the > rendering code causing the problem is that I switched from a for loop > that calls glcolor, glnormal, and glvertex one time for each face, to > using glDrawArrays and didn't notice any improvement whatsoever in > framerate. The problem is that there is very little in the form of > non-gl code in the main loop. The main loop looks like this: > > for(i = 0; i < 100; i++){ > glViewport (0, 0, (GLsizei) W, (GLsizei) H); > glMatrixMode (GL_PROJECTION); > glLoadIdentity (); > glFrustum (-1.0, 1.0, -1.0, 1.0, MinDepth, MaxDepth); > glMatrixMode (GL_MODELVIEW); > > glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); > > glMatrixMode(GL_MODELVIEW); > glLoadIdentity(); > > > i3dTranslate(-Camera->position[VALUE_X], > -Camera->position[VALUE_Y], > -Camera->position[VALUE_Z]); > i3dRotate(-Camera->angle[VALUE_X],-Camera->angle[VALUE_Y], > -Camera->angle[VALUE_Z]); > > /* I'll explain this next line later */ > i3dDrawObject(nimitz); > > /*I'm using SDL, not Glut */ > SDL_GL_SwapBuffers(); > > Nimitz->angle[VALUE_Y] += 2.0; > } I reformatted your code a bit to be sure I understood the structure. Is it still correct? Why are you setting the viewport and projection matrix inside the loop? One usually only has to set those when the window size or shape changes. Beyond that, I don't see anything obviously wrong. One approach to finding bottlenecks is to disable blocks of code until you notice a big change. That might help isolate the problem. -Brian |
From: John G. <je...@vi...> - 2000-10-27 23:41:55
|
Brian Paul wrote: > > John Garrison wrote: > > > > Hello, I originaly sent this to the opengl.org forums, but didn't get > > much help, aside from someone suggesting that it is a HW acceleration > > problem. (Not the case, my Voodoo2 runs all the latest Linux OpenGL > > games perfectly. (I actually bought the card specifically for Tuxedo T > > Penguin: A Quest for Herring, (This was before the large array of > > commercial game ports came in.) So am sure that it is hardware > > accelerating correctly. I'll just paste my post from opengl or to save > > from having to retype it all. I have since posting it removed the > > glFrustum and glViewport calls from the main loop, with no speed > > increase. Also I forgot to expand the i3dTranslate and i3dRotate > > functions into the code that they call so you could see what is going on > > (I did that for the rest of the functions that I wrote) but I guess you > > can figure out what goes on behind the scenes of those two functions. It > > is purely opengl code so the botteneck wouldn't be there. > > > > <begin repost> > > > > Hi, > > I'm having a bit of a problem finding out what is causing my code to be > > so slow. I have a model rotating with vertex shading and am only getting > > about 11 FPS. (The model has 7121 faces so that is about 79,000 polygons > > per second). The thing is I have tried it at resolutions from 320x240 up > > to 800x600 and the framerate is always the same, so my rendering code > > shouldn't be the problem, correct? Further evidence that it is not the > > rendering code causing the problem is that I switched from a for loop > > that calls glcolor, glnormal, and glvertex one time for each face, to > > using glDrawArrays and didn't notice any improvement whatsoever in > > framerate. The problem is that there is very little in the form of > > non-gl code in the main loop. The main loop looks like this: > > > > for(i = 0; i < 100; i++){ > > glViewport (0, 0, (GLsizei) W, (GLsizei) H); > > glMatrixMode (GL_PROJECTION); > > glLoadIdentity (); > > glFrustum (-1.0, 1.0, -1.0, 1.0, MinDepth, MaxDepth); > > glMatrixMode (GL_MODELVIEW); > > > > glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); > > > > glMatrixMode(GL_MODELVIEW); > > glLoadIdentity(); > > > > > > i3dTranslate(-Camera->position[VALUE_X], > > -Camera->position[VALUE_Y], > > -Camera->position[VALUE_Z]); > > i3dRotate(-Camera->angle[VALUE_X],-Camera->angle[VALUE_Y], > > -Camera->angle[VALUE_Z]); > > > > /* I'll explain this next line later */ > > i3dDrawObject(nimitz); > > > > /*I'm using SDL, not Glut */ > > SDL_GL_SwapBuffers(); > > > > Nimitz->angle[VALUE_Y] += 2.0; > > } > > I reformatted your code a bit to be sure I understood the structure. > Is it still correct? > > Why are you setting the viewport and projection matrix inside the > loop? One usually only has to set those when the window size or > shape changes. Yeah, I realized that from the opengl.org forum and have recently fixed it, with no speed increase. > Beyond that, I don't see anything obviously wrong. One approach > to finding bottlenecks is to disable blocks of code until you > notice a big change. That might help isolate the problem. Well, I've found the problem, I think, but there isn't much I can do about it. With just a glClear in the loop the fps comes up as "inf", so it's safe to say that that isn't making any big performance hits. With just the glClear and SDL_GL_Swap_Buffer I am locked at 100fps. I don't really know if that is standard or not, maybe glut would be faster? I hope not, I like SDL alot better. But the big hit comes when I perform glTranslate and glRotate. If I take the first glTranslate and glRotate's out (The ones that manipulate the camera) then there is no performance hit. But if I take the second glTranslate out (the one that manipulates the object) the framerate jumps to 33fps. (about 237,000 triangles/sec) and if I take out the glRotates to go with it the framerate jumps to 50fps (356,000 triangles/sec). Those are fairly good numbers I think, and the fps would be alot higher if the model didn't have 7121 faces. (That's like 10 quake characters or something), but I can't take out the translation and rotation functions! What's more is that that is only with one model, what is going to happen when I am doing tranforms and rotations for a bunch of models? Is this really the problem? Maybe I need to try re-compiling Mesa with some different flags or something, or are the tranformations really that intensive? -- "I'm willing to J.O.B., just not on no jagg-off shoe-shine tip" "Jagg-off shoe-shine tip?" "No *background-checking* jagg-off shoe-shine tip" |
From: Brian P. <br...@va...> - 2000-11-01 21:52:39
|
John Garrison wrote: > > Brian Paul wrote: > > > > John Garrison wrote: > > > > > > Hello, I originaly sent this to the opengl.org forums, but didn't get > > > much help, aside from someone suggesting that it is a HW acceleration > > > problem. (Not the case, my Voodoo2 runs all the latest Linux OpenGL > > > games perfectly. (I actually bought the card specifically for Tuxedo T > > > Penguin: A Quest for Herring, (This was before the large array of > > > commercial game ports came in.) So am sure that it is hardware > > > accelerating correctly. I'll just paste my post from opengl or to save > > > from having to retype it all. I have since posting it removed the > > > glFrustum and glViewport calls from the main loop, with no speed > > > increase. Also I forgot to expand the i3dTranslate and i3dRotate > > > functions into the code that they call so you could see what is going on > > > (I did that for the rest of the functions that I wrote) but I guess you > > > can figure out what goes on behind the scenes of those two functions. It > > > is purely opengl code so the botteneck wouldn't be there. > > > > > > <begin repost> > > > > > > Hi, > > > I'm having a bit of a problem finding out what is causing my code to be > > > so slow. I have a model rotating with vertex shading and am only getting > > > about 11 FPS. (The model has 7121 faces so that is about 79,000 polygons > > > per second). The thing is I have tried it at resolutions from 320x240 up > > > to 800x600 and the framerate is always the same, so my rendering code > > > shouldn't be the problem, correct? Further evidence that it is not the > > > rendering code causing the problem is that I switched from a for loop > > > that calls glcolor, glnormal, and glvertex one time for each face, to > > > using glDrawArrays and didn't notice any improvement whatsoever in > > > framerate. The problem is that there is very little in the form of > > > non-gl code in the main loop. The main loop looks like this: > > > > > > for(i = 0; i < 100; i++){ > > > glViewport (0, 0, (GLsizei) W, (GLsizei) H); > > > glMatrixMode (GL_PROJECTION); > > > glLoadIdentity (); > > > glFrustum (-1.0, 1.0, -1.0, 1.0, MinDepth, MaxDepth); > > > glMatrixMode (GL_MODELVIEW); > > > > > > glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); > > > > > > glMatrixMode(GL_MODELVIEW); > > > glLoadIdentity(); > > > > > > > > > i3dTranslate(-Camera->position[VALUE_X], > > > -Camera->position[VALUE_Y], > > > -Camera->position[VALUE_Z]); > > > i3dRotate(-Camera->angle[VALUE_X],-Camera->angle[VALUE_Y], > > > -Camera->angle[VALUE_Z]); > > > > > > /* I'll explain this next line later */ > > > i3dDrawObject(nimitz); > > > > > > /*I'm using SDL, not Glut */ > > > SDL_GL_SwapBuffers(); > > > > > > Nimitz->angle[VALUE_Y] += 2.0; > > > } > > > > I reformatted your code a bit to be sure I understood the structure. > > Is it still correct? > > > > Why are you setting the viewport and projection matrix inside the > > loop? One usually only has to set those when the window size or > > shape changes. > > Yeah, I realized that from the opengl.org forum and have recently fixed > it, with no speed increase. > > > Beyond that, I don't see anything obviously wrong. One approach > > to finding bottlenecks is to disable blocks of code until you > > notice a big change. That might help isolate the problem. > > Well, I've found the problem, I think, but there isn't much I can do > about it. With just a glClear in the loop the fps comes up as "inf", so > it's safe to say that that isn't making any big performance hits. With > just the glClear and SDL_GL_Swap_Buffer I am locked at 100fps. I don't > really know if that is standard or not, maybe glut would be faster? I > hope not, I like SDL alot better. I don't think GLUT vs SDL would matter. > But the big hit comes when I perform > glTranslate and glRotate. If I take the first glTranslate and glRotate's > out (The ones that manipulate the camera) then there is no performance > hit. But if I take the second glTranslate out (the one that manipulates > the object) the framerate jumps to 33fps. Are the untranslated objects still on-screen or totally clipped? > (about 237,000 triangles/sec) > and if I take out the glRotates to go with it the framerate jumps to > 50fps (356,000 triangles/sec). Those are fairly good numbers I think, > and the fps would be alot higher if the model didn't have 7121 faces. > (That's like 10 quake characters or something), but I can't take out the > translation and rotation functions! What's more is that that is only > with one model, what is going to happen when I am doing tranforms and > rotations for a bunch of models? > Is this really the problem? Maybe I need to try re-compiling Mesa with > some different flags or something, or are the tranformations really that > intensive? I don't know what to suggest next. Maybe profiling? -Brian |
From: John A. S. <lu...@ma...> - 2000-11-02 16:27:15
|
I have wondered about hitting the 100fps (approx) barrier; is it hardware (ie, PCI bus speed) limited? John Stewart. > > Well, I've found the problem, I think, but there isn't much I can do > > about it. With just a glClear in the loop the fps comes up as "inf", so > > it's safe to say that that isn't making any big performance hits. With > > just the glClear and SDL_GL_Swap_Buffer I am locked at 100fps. I don't > > really know if that is standard or not, maybe glut would be faster? I > > hope not, I like SDL alot better. > |
From: Brian P. <br...@va...> - 2000-11-02 17:09:38
|
"John A. Stewart" wrote: > > I have wondered about hitting the 100fps (approx) barrier; is it > hardware (ie, PCI bus speed) limited? I don't recall the performance numbers for Voodoo2 but on Voodoo3 I routinely get > 700fps on some tests. -Brian > John Stewart. > > > > Well, I've found the problem, I think, but there isn't much I can do > > > about it. With just a glClear in the loop the fps comes up as "inf", so > > > it's safe to say that that isn't making any big performance hits. With > > > just the glClear and SDL_GL_Swap_Buffer I am locked at 100fps. I don't > > > really know if that is standard or not, maybe glut would be faster? I > > > hope not, I like SDL alot better. > > |
From: Joshua N. <jn...@ac...> - 2000-11-02 19:04:53
|
Can only one glXSwapBuffers() happen per vertical retrace of the monitor? "John A. Stewart" wrote: > I have wondered about hitting the 100fps (approx) barrier; is it > hardware (ie, PCI bus speed) limited? > > John Stewart. > > > > Well, I've found the problem, I think, but there isn't much I can do > > > about it. With just a glClear in the loop the fps comes up as "inf", so > > > it's safe to say that that isn't making any big performance hits. With > > > just the glClear and SDL_GL_Swap_Buffer I am locked at 100fps. I don't > > > really know if that is standard or not, maybe glut would be faster? I > > > hope not, I like SDL alot better. > > > > _______________________________________________ > Mesa3d-users mailing list > Mes...@li... > http://lists.sourceforge.net/mailman/listinfo/mesa3d-users |
From: Brian P. <br...@va...> - 2000-11-02 19:16:37
|
Joshua Napoli wrote: > > Can only one glXSwapBuffers() happen per vertical retrace of the monitor? > The FX_GLIDE_SWAPINTERVAL controls whether Glide syncs SwapBuffers to the refresh rate. See Mesa/docs/README.3DFX That might be the problem. -Brian |
From: John S. <joh...@cr...> - 2000-11-03 17:09:21
|
Brian; I manage the FreeWRL VRML Browser for unixen; and was in the midst of trying to speed it up. If you remember, I made some obtuse comment about not getting more than 70fps out of FreeWRL, no matter how simple the application. My goal was to get a VRML world with ONLY background textures running at about 60fps on a 750mhz pentium, Voodoo-3. If I could not achieve this, I was going to start porting my application over to our idle Onyx II. :-) Here are my results: Pre-0.27 release. freewrl tests/26.wrl -best (geom 300x300) Fps: 41.6666650109822 Fps: 39.0625008731149 Fps: 40.9836055962702 Fps: 40.3225803350435 Fps: 39.0625008731149 Now, using texture objects: Fps: 69.4444416849703 Fps: 73.529404546151 Fps: 75.7575659055696 Fps: 69.4444646805952 Fps: 75.7575659055696 Then, set up some environment variables... setenv SST_SCREENREFRESH=75 setenv FX_GLIDE_SWAPINTERVAL 0 setenv SST_SWAP_EN_WAIT_ON_VIDSYNC 0 Fps: 208.333325054911 Fps: 227.272697716709 Fps: 227.272697716709 Fps: 178.57144681775 Fps: 208.333325054911 Fps: 208.333325054911 WOW!!! I guess that I should have RTFM'd the 3DFX doc in the docs subdirectory... > The FX_GLIDE_SWAPINTERVAL controls whether Glide syncs SwapBuffers > to the refresh rate. See Mesa/docs/README.3DFX -- John Stewart joh...@cr... http://www.crc.ca/FreeWRL/ If windows is the answer, it must have been a stupid question. |