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

Reply via email to