Hi Frank- Without code I have to guess but my suspicion is that the difficulty lies in the OpenGL API and not the perl/PDL. Here is a link that I found that seems useful:
http://www.songho.ca/opengl/gl_vbo.html Sorry I don't have specific code but most of my OpenGL has been the 1.x fixed function pipeline stuff and haven't done much with 2.x and higher. --Chris On Sat, Jan 19, 2013 at 4:36 PM, Frank Boers <[email protected]> wrote: > Dear PDL`s, > thank for your help. > Vividsnow`s code is working perfect. So first step is done. > > Now I`m trying to generate a subplot with a few more sine wave signals to > display. > Unfortunately I could not find out how to update the data in the opengl > vertex buffer to display different signals for each plot window. > > I did something like > $ogl_data->assign_data(0,$vert); > or > $ogl_data->assign_data(0,$vert->get_dataref); > > but the plots showed only the first signal > > So how can I update the opengl vertex buffer with new data? > > > > On 19.01.2013 17:04, David Mertens wrote: > > Frank - > > Did these posts answer your questions? I did something like this, I think, a > number of years ago and I can look through my old code to find it if you > would like more help. > > David > > > @David: Yes, please other code and examples will help. It may end up in > some PP code like Craig suggested. > > My question is related to visualize time series data from MEG and EEG > recordings with PDL in a very fast way. > (~ 300 channels , ~20 minutes, 1kHz samplingrate, float ) > > best regards > Frank > > > > > On Thu, Jan 17, 2013 at 8:46 AM, Craig DeForest <[email protected]> > wrote: >> >> vividsnow's answer is concise and great, but I'll expand a little bit. You >> can access the PDL data >> via "get_dataref", which returns a scalar ref whose scalar contains the >> data itself. The data are in >> whatever order they happen to be in, which may (or may not) be the usual >> first-dimensions-fastest order. >> (freshly copy()'ed PDLs are guaranteed to be in that order). If you want >> more control than that I suggest >> dropping down to PP or C with PDL::Inline or with XS -- then you can >> access the PDL data directly from compiled C. >> >> >> >> On Jan 17, 2013, at 3:58 AM, Frank Boers <[email protected]> wrote: >> >> > Dear PDLs, >> > >> > how can I copy piddels direct to an opengl vertex buffer without >> > converting the piddel to a perl array? >> > Please have a look to the example, line 97- 98 >> > >> > best regards >> > Frank >> > >> > #!/usr/bin/perl -w >> > >> > use strict; >> > use OpenGL qw(:all); >> > >> > use PDL; >> > >> > my $pending = 0; >> > my $t = pdl(sequence(1000) ); >> > my $data = pdl( 10 * sin( $t * 10 * 6.28) )->float; >> > >> > #---------------------------------------------------------# >> > #---- setWindow -------------------------# >> > #---------------------------------------------------------# >> > sub setWindow{ >> > my ($l,$r,$b,$t) = @_; >> > glMatrixMode(GL_PROJECTION); >> > glLoadIdentity(); >> > gluOrtho2D($l,$r,$b,$t); >> > } # end of setWindow >> > >> > #---------------------------------------------------------# >> > #---- setViewport -------------------------# >> > #---------------------------------------------------------# >> > sub setViewport{ >> > my ($l,$r,$b,$t) = @_; >> > glViewport($l,$b,$r-$l,$t-$b); >> > }# end of setViewport >> > >> > #---------------------------------------------------------# >> > #---- myReshape -------------------------# >> > #---------------------------------------------------------# >> > sub myReshape{ >> > >> > my($w,$h) = @_; >> > >> > return if ( $pending ); >> > >> > glViewport(0,0,$w,$h); >> > glMatrixMode(GL_PROJECTION); >> > glLoadIdentity(); >> > gluOrtho2D(0.0,$w,0.0,$h); >> > >> > } # end of reshape >> > >> > #---------------------------------------------------------# >> > #---- update_plot -------------------------# >> > #---------------------------------------------------------# >> > sub update_plot{ >> > my ($x,$y) = @_; >> > >> > return if ( $pending ); >> > $pending = 1; >> > >> > #--- >> > my $v = pdl( zeroes(2,$data->dim(0) ) )->float(); >> > my $v0 = $v->slice("(0),:"); >> > my $v1 = $v->slice("(1),:"); >> > $v0.= $t; >> > my $size= $v->nelem * 4; >> > >> > glClear(GL_COLOR_BUFFER_BIT); >> > glMatrixMode(GL_MODELVIEW); >> > glLoadIdentity(); >> > glColor3f(0.0,0.0,1.0); >> > >> > >> > #--- create OGL verts buffer >> > glDisableClientState(GL_VERTEX_ARRAY); >> > >> > my $VertexObjID = glGenBuffersARB_p(1); >> > glBindBufferARB(GL_ARRAY_BUFFER_ARB, $VertexObjID); >> > >> > >> > my $verts = OpenGL::Array->new_list(GL_FLOAT,$v->list() ); >> > $verts->bind($VertexObjID); >> > glBufferDataARB_p(GL_ARRAY_BUFFER_ARB, $verts, GL_DYNAMIC_DRAW_ARB); >> > >> > glVertexPointer_p(2,$verts); >> > >> > glEnableClientState(GL_VERTEX_ARRAY); >> > >> > #--- plot >> > my $w = glutGet( GLUT_WINDOW_WIDTH ); >> > my $h = glutGet( GLUT_WINDOW_HEIGHT ); >> > >> > my $w0 = 0; >> > my $w1 = $w-1; >> > >> > my $h0 = 0; >> > >> > setViewport($w0,$w1,$h0,$h); >> > setWindow($t->min,$t->max,$data->min,$data->max ); >> > >> > $v1.= $data; >> > >> > ### !!!! this is slow for large data >> > $verts->assign( 0,$v->list() ); >> > >> > glBufferSubDataARB_p(GL_ARRAY_BUFFER_ARB,0,$verts); >> > >> > glDrawArrays(GL_LINE_STRIP,0,$t->dim(-1)-1 ); >> > >> > glDisableClientState(GL_VERTEX_ARRAY); >> > >> > glFlush(); >> > glutSwapBuffers(); >> > >> > $pending = undef; >> > >> > } # end of update_plot >> > >> > >> > #=== MAIN >> > glClearColor(1.0,1.0,1.0,0.0); >> > glColor3f(0.0,0.0,1.0); >> > glLineWidth(2); >> > >> > glutInit(); >> > >> > glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_ALPHA); >> > >> > glutInitWindowSize(300,400); >> > glutInitWindowPosition(10,10); >> > >> > my $IDwindow = glutCreateWindow("PDL OGL TEST"); >> > glutDisplayFunc( sub{ update_plot(@_) } ); >> > glutReshapeFunc( sub{ myReshape(@_) } ); >> > >> > glutMainLoop(); >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > >> > -- >> > Frank Boers >> > Institute of Neuroscience and Medicine - 4 >> > Medical Imaging Physics >> > Forschungszentrum Juelich GmbH >> > 52425 Juelich >> > phone: +49 - (0)2461-61-6005 >> > fax : +49 - (0)2461-61-2820 >> > email: [email protected] >> > http://www.fz-juelich.de/inm/inm-4/DE/Forschung/MEG-Physik/_node.html >> > >> > >> > >> > >> > >> > ------------------------------------------------------------------------------------------------ >> > >> > ------------------------------------------------------------------------------------------------ >> > Forschungszentrum Juelich GmbH >> > 52425 Juelich >> > Sitz der Gesellschaft: Juelich >> > Eingetragen im Handelsregister des Amtsgerichts Dueren Nr. HR B 3498 >> > Vorsitzender des Aufsichtsrats: MinDir Dr. Karl Eugen Huthmacher >> > Geschaeftsfuehrung: Prof. Dr. Achim Bachem (Vorsitzender), >> > Karsten Beneke (stellv. Vorsitzender), Prof. Dr.-Ing. Harald Bolt, >> > Prof. Dr. Sebastian M. Schmidt >> > >> > ------------------------------------------------------------------------------------------------ >> > >> > ------------------------------------------------------------------------------------------------ >> > >> > _______________________________________________ >> > Perldl mailing list >> > [email protected] >> > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl >> > >> >> >> _______________________________________________ >> Perldl mailing list >> [email protected] >> http://mailman.jach.hawaii.edu/mailman/listinfo/perldl > > > > > -- > "Debugging is twice as hard as writing the code in the first place. > Therefore, if you write the code as cleverly as possible, you are, > by definition, not smart enough to debug it." -- Brian Kernighan > > > -- > Frank Boers > Institute of Neuroscience and Medicine - 4 > Medical Imaging Physics > Forschungszentrum Juelich GmbH > 52425 Juelich > phone: +49 - (0)2461-61-6005 > fax : +49 - (0)2461-61-2820 > email: [email protected] > http://www.fz-juelich.de/inm/inm-4/DE/Forschung/MEG-Physik/_node.html > > > _______________________________________________ > Perldl mailing list > [email protected] > http://mailman.jach.hawaii.edu/mailman/listinfo/perldl > _______________________________________________ Perldl mailing list [email protected] http://mailman.jach.hawaii.edu/mailman/listinfo/perldl
