Issues with Blitting a Blitted Surface

[email protected] (Sheppy R)
Newsgroups perl.sdl.devel
Message-ID <[email protected]>
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();
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.