Been working with kthakore in the IRC channel and he asked I send this to
the mailing list.

I'm working on a checkerboard program.  The first version was ridiculous
with memory leaks, so I scrapped it and am rewriting.  I'm currently doing
some testing with the way SDL(x) works to make sure I decrease the amount of
memory leaks possible.

What I'm trying to do is take 2 surfaces (one for each square color), do a
draw_rect() on to the surface in the specific color for that square, blit
these onto another surface in an alternating 8x8 pattern, then blit that
surface to the display.  Unfortunately, I'm just getting a black screen.

I can get this to display if I do a draw_rect() instead of the first blit()
commands.  I highlighted the sections of code where I comment out the
different lines, this is in the createBoardBackground() sub.  It is seeming
to be a problem with blitting a blitted surface.

#!usr/bin/perl
> use strict;
> use warnings;
>
> use SDL;
> use SDLx::Surface;
> use SDLx::App;
> use SDLx::Sprite;
>
> use constant SQUARE_SIZE => 40;
>
> my $app = SDLx::App->new(
>         w    => (SQUARE_SIZE * 8),
>         h    => (SQUARE_SIZE * 8),
>         exit_on_quit => 1,
>         );
>



> my $yellowSquare = SDLx::Surface->new(
>         h    => SQUARE_SIZE,
>         w    => SQUARE_SIZE,
>         );
> my $orangeSquare = SDLx::Surface->new(
>         h    => SQUARE_SIZE,
>         w    => SQUARE_SIZE,
>         );
>
$yellowSquare->draw_rect([0,0,SQUARE_SIZE,SQUARE_SIZE], 0xFFCC33FF);
> $orangeSquare->draw_rect([0,0,SQUARE_SIZE,SQUARE_SIZE], 0xCC9900FF);
>
> my $newSurface = SDLx::Surface->new(
>             h    => 320,
>             w    => 320,
>             );
>



> sub createBoardBackground
> {
>     for (0..7)
>     {
>         my $h = $_;
>         for (0..7)
>         {
>             my $v = $_;
>             if (($h+$v) % 2 == 0)
>             {
>                * $newSurface->draw_rect([($h * SQUARE_SIZE), ($v *
> SQUARE_SIZE), SQUARE_SIZE, SQUARE_SIZE], 0xFFCC33FF);**
>                 #$yellowSquare->blit($newSurface,
> [0,0,SQUARE_SIZE,SQUARE_SIZE], [($h * SQUARE_SIZE), ($v * SQUARE_SIZE),
> SQUARE_SIZE, SQUARE_SIZE]);*
>             }
>             else
>             {
>                 *$newSurface->draw_rect([($h * SQUARE_SIZE), ($v *
> SQUARE_SIZE), SQUARE_SIZE, SQUARE_SIZE], 0xCC9900FF);**
>                 #$orangeSquare->blit($newSurface,
> [0,0,SQUARE_SIZE,SQUARE_SIZE], [($h * SQUARE_SIZE), ($v * SQUARE_SIZE),
> SQUARE_SIZE, SQUARE_SIZE]);*
>             }
>         }
>     }
>     $newSurface->update();
> }
>



> sub drawBoardV2
> {
>     $newSurface->blit($app, [0,0,320,320], [0,0,320,320]);
>     $app->update();
> }
>



> createBoardBackground();
>
> $app->add_show_handler(\&drawBoardV2);
> $app->run();
>

Reply via email to