WorldViz User Forum  

Go Back   WorldViz User Forum > Vizard

Reply
 
Thread Tools Rate Thread Display Modes
  #1  
Old 11-14-2008, 07:45 AM
Joran Joran is offline
Member
 
Join Date: Jun 2006
Posts: 38
Send a message via Yahoo to Joran
Vertex shader performance problem

Hello,

I have just started experimenting with vertex shaders and I have a performance problem. Below is an example program that shows my problem:

Code:
import viz
import vizshape

viz.go()
vizshape.addGrid()
viz.MainView.setPosition(0, 1, -5)

vert = """
uniform float elapsedTime;

void main() {  
  if( gl_MultiTexCoord0.y > 0.0) {
    gl_Vertex.x += sin(gl_Vertex.x * 0.2 + elapsedTime * 1.0) * gl_MultiTexCoord0.y * 0.2;
    gl_Vertex.z += sin(gl_Vertex.y * 0.2 + elapsedTime * 1.0) * gl_MultiTexCoord0.y * 0.2;    
  }
  
  gl_FrontColor = gl_Color;
  gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
"""

shape = vizshape.addQuad()
elapsedTime = viz.addUniformFloat('elapsedTime', viz.tick())
shader = viz.addShader(vert = vert, uniforms = [elapsedTime])
shape.apply(shader)

def onUpdate(e):
	elapsedTime.set(viz.tick())

viz.callback(viz.UPDATE_EVENT,onUpdate)
My problem is that when you check the statistics the Draw time is 15.00 (On my system), while it should be something like 0.02. If I do not update the elapsedTime uniform every frame, the performance is fine (but I have no animation). What am I doing wrong?

Greetings, Joran.
Reply With Quote
  #2  
Old 11-14-2008, 02:22 PM
farshizzo farshizzo is offline
WorldViz Team Member
 
Join Date: Mar 2003
Posts: 2,849
I don't think you are doing anything wrong. I tried your sample code and my draw time is 0.04 using a GeForce 8800 GTS. This might be an issue with your OpenGL drivers.

FYI, you don't have to create your own elapsed time uniform. OpenSceneGraph supplies the following global uniforms that you can use in any shader:
Code:
int osg_FrameNumber;
float osg_FrameTime;
float osg_DeltaFrameTime;
So you can modify your example to use this global uniform instead:
Code:
import viz
import vizshape

viz.go()
vizshape.addGrid()
viz.MainView.setPosition(0, 1, -5)

vert = """
uniform float osg_FrameTime;

void main() {  
  if( gl_MultiTexCoord0.y > 0.0) {
    gl_Vertex.x += sin(gl_Vertex.x * 0.2 + osg_FrameTime * 1.0) * gl_MultiTexCoord0.y * 0.2;
    gl_Vertex.z += sin(gl_Vertex.y * 0.2 + osg_FrameTime * 1.0) * gl_MultiTexCoord0.y * 0.2;    
  }
  
  gl_FrontColor = gl_Color;
  gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
}
"""

shape = vizshape.addQuad()
shader = viz.addShader(vert = vert)
shape.apply(shader)
Reply With Quote
  #3  
Old 11-17-2008, 02:29 AM
Joran Joran is offline
Member
 
Join Date: Jun 2006
Posts: 38
Send a message via Yahoo to Joran
I updated my driver and now it works as expected. And I now also use the osg global uniforms. Thanx.

Greetings, Joran.
Reply With Quote
Reply


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
fps performance caused by garbage collection? Mike Konstant Vizard 7 09-03-2012 01:44 PM
Improve performance with large number of onthefly objects? Fox5 Vizard 7 04-28-2008 06:19 PM
5DT Data Glove 5 Ultra Problem bjgold Vizard 1 08-08-2006 05:08 PM
problem with female animations vmonkey Vizard 1 10-07-2005 11:36 AM
sound problem alaa Vizard 7 09-02-2005 02:13 PM


All times are GMT -7. The time now is 06:14 AM.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Copyright 2002-2023 WorldViz LLC