On Tue, Jan 22, 2013 at 8:40 AM, David Mertens <[email protected]> wrote: > No, Frank, it's not a problem with your script. Perl libraries are allowed > to "give me enough rope to shoot myself" (yes, it's a mixed metaphor), but > not segfault. Segfaulting is usually considered a bug of the library. > > I'm on Mac OSX Lion, 64 bit. Perl is via perlbrew, 5.14.2, compiled with > thread support. OpenGL v 0.66, the latest available from CPAN. I'll file > this as a bug of OpenGL later today after I've had a chance to sprinkle in > some print statements and isolate the problem. :-)
It works for me with SPP 5.16.1 and OpenGL 0.66 There are a number of possible platform specific issues: - bug in the perl OpenGL bindings - bug in the platform OpenGL support - build problem (POGL has static configure) - combinations of the above This would all be helped if there were better support for diagnostics and runtime configuration in POGL. The usual problem here---haven't been able to get around to it. Diagnosing the problem would help for the coming OpenGL::2 development. :-) BTW, any ideas on the numeric module names query on pdl-porters? [perl5i uses them but I thought they weren't allow which is why we have the ucky TriD rather than 3D] --Chris > On Tue, Jan 22, 2013 at 2:17 AM, Frank Boers <[email protected]> wrote: >> >> Dear David, >> sorry there were some problems in converting and sending the script via >> email. It is running on my notebook and I m happy with the performance. >> Please do not reactivate your toasted hard drive for me. >> >> Here is another try to send the code without formatting errors: >> >> >> #!/usr/bin/perl -w >> >> use strict; >> use OpenGL qw(:all); >> >> use PDL; >> use PDL::Constants qw(PI); >> $PDL::BIGPDL = 1; >> >> my $pending = 0; >> >> #--- init demo data >> my $tsl = 60000; # time slices; >> my $channels = 10; # channels to plot >> >> >> my $time_points = pdl( sequence( $tsl ) /1000 )->float(); >> my $f0 = 2; # Hz >> my $data = pdl( zeroes($channels,$time_points->dim(-1) ) )->float(); >> >> print"---> START init demo data\n"; >> print" Channels: $channels\n"; >> print" TSLs : $tsl\n"; >> >> my $t00 = time; >> >> my $f = pdl( sequence($channels) ) +1 * $f0; >> # $data.= (sin( $time_points * $f->transpose *2* PI) )->transpose; >> $data.= (sin( $time_points * $f->transpose * PI) + cos( $time_points >> * $f->transpose * rand(100) * PI ) )->transpose; >> >> $t00 = time() - $t00; >> print"---> DONE init demo data: $t00\n"; >> >> >> #---------------------------------------------------------# >> #---- update_plot_pdl_to_vbo -------------------------# >> #--- copy pdl data to opengl vertex buffer >> #--- generates a sub plot for each channel >> #---------------------------------------------------------# >> sub update_plot_pdl_to_vbo{ >> my ($x,$y) = @_; >> >> return if ( $pending ); >> $pending = 1; >> my $t00 = time; >> >> #--- init data for vertex buffer obj >> my $data_4_vbo = pdl( zeroes(2,$data->dim(-1) ) )->float(); >> my $data_4_vbo_timepoints = $data_4_vbo->slice("(0),:"); >> my $data_4_vbo_signal = $data_4_vbo->slice("(1),:"); >> $data_4_vbo_timepoints .= $time_points; >> my $data_vbo = $data_4_vbo->flat; >> >> my $float_size = 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 $ogl_array = OpenGL::Array->new_scalar(GL_FLOAT, >> $data_vbo->get_dataref,$data_vbo->dim(0)*$float_size); >> glBufferDataARB_p(GL_ARRAY_BUFFER_ARB,$ogl_array,GL_DYNAMIC_DRAW_ARB); >> $ogl_array->bind($VertexObjID); >> glVertexPointer_p(2,$ogl_array); >> glEnableClientState(GL_VERTEX_ARRAY); >> >> #---start sub plots >> my $w = glutGet( GLUT_WINDOW_WIDTH ); >> my $h = glutGet( GLUT_WINDOW_HEIGHT ); >> >> my $w0 = 10; >> my $w1 = $w-10; >> >> my $h0 = 0; >> my $dh = int( $h / $data->dim(0) ); >> my $h1 = $dh; >> >> my $xmin = $time_points->min; >> my $xmax = $time_points->max; >> my $ymin = $data->min * 1.2; >> my $ymax = $data->max * 1.2; >> >> >> #--- copy data to VBO >> for ( my $i=0; $i < $data->dim(0); $i++ ) >> { >> >> #--- sub plot window >> setViewport($w0,$w1,$h0,$h1); >> setWindow($xmin,$xmax,$ymin,$ymax ); >> >> #--- draw zero line >> glLineWidth(1); >> glColor3f(1,1,1); >> >> glBegin(GL_LINES); >> glVertex2f($xmin,0.0); >> glVertex2f($xmax,0.0); >> glEnd(); >> >> #--- start drawing signal >> glLineWidth(2); >> glColor3f(rand(1), rand(1),1.0);# mix color for each signal >> >> #--- copy pdl data to VBO thank's vividsnow !!! >> $data_4_vbo_signal .= $data->slice("($i),:"); >> $ogl_array = >> >> OpenGL::Array->new_scalar(GL_FLOAT,$data_vbo->get_dataref,$data_vbo->dim(0)*$float_size); >> >> glBufferSubDataARB_p(GL_ARRAY_BUFFER_ARB,0,$ogl_array); >> >> glDrawArrays(GL_LINE_STRIP,0,$data_4_vbo_timepoints->dim(-1)-1 ); >> >> $h0 += $dh; >> $h1 += $dh + 1; >> >> } # for >> >> glBindBufferARB(GL_ARRAY_BUFFER_ARB, 0); >> glDisableClientState(GL_VERTEX_ARRAY); >> >> glFlush(); >> glutSwapBuffers(); >> >> $pending = undef; >> >> $t00 = time() - $t00; >> >> print" done <update_plot_pdl_to_vbo> Time to update: $t00\n"; >> >> } # end of update_plot_pdl_to_vbo >> >> >> #---------------------------------------------------------# >> #---- 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 >> >> >> #=== 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_pdl_to_vbo(@_) } ); >> >> glutReshapeFunc( sub{ myReshape(@_) } ); >> >> glutMainLoop(); >> >> >> > Message: 1 >> > Date: Mon, 21 Jan 2013 21:53:49 -0600 >> > From: David Mertens<[email protected]> >> > To: Frank Boers<[email protected]> >> > Cc: Chris Marshall<[email protected]>, perldl >> > <[email protected]> >> > Subject: Re: [Perldl] copy piddels to opengl vertex buffer >> > Message-ID: >> > <ca+4ieyuby4quf7ga_h3syuu7cdxfmz0icwzmkfnear8cw0m...@mail.gmail.com> >> > Content-Type: text/plain; charset="iso-8859-1" >> >> > >> > Frank, err... Chris, err... This is going to be a mixed email. >> > >> > 1) Frank, it sounds like everything works. Is this correct? In that >> > case, >> > if I can get away without digging out my code, I'd prefer not to. I >> believe >> > that the GL program that I wrote only really displayed a 2d raster >> > image, >> > so I'm not sure how useful it would be to you. Couple that with the fact >> > that said code may not even be on any of my current drives (I >> accidentally >> > but literally toasted a hard drive shortly after writing my GL program), >> > and I think I'd prefer not to root around for it up unless you think you >> > really need it. >> > >> > 2) To any POGL devs reading along, Frank's script segfaults on my >> machine. >> > I'm pretty sure Perl library's aren't supposed to segfault on user data >> > unless the user is using Inline. Shall we start a separate thread and >> >> > chase down this bug? >> > >> > David >> > >> > >> > On Mon, Jan 21, 2013 at 6:36 AM, Frank Boers<[email protected]> >> wrote: >> > >> >> >> >> >> >> >> ------------------------------------------------------------------------------------------------ >> >> ------------------------------------------------------------------------------------------------ >> 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 >> >> ------------------------------------------------------------------------------------------------ >> >> ------------------------------------------------------------------------------------------------ > > > > > -- > "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 > > _______________________________________________ > 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
