--- deliantra/Deliantra-Client/DC.pm 2006/04/11 18:06:52 1.24 +++ deliantra/Deliantra-Client/DC.pm 2006/04/11 19:31:17 1.25 @@ -80,6 +80,8 @@ package CFClient::Texture; +use strict; + use Scalar::Util; use SDL::OpenGL; @@ -164,17 +166,17 @@ if (exists $self->{data}) { $data = $self->{data}; + } elsif (exists $self->{render_cb}) { glViewport 0, 0, $self->{w}, $self->{h}; + glOrtho 0, $self->{w}, 0, $self->{h}, -10000, 10000; glMatrixMode GL_PROJECTION; glLoadIdentity; - glOrtho 0, $self->{w}, 0, $self->{h}, -10000, 10000; glMatrixMode GL_MODELVIEW; - glPushmatrix; glLoadIdentity; glClear GL_COLOR_BUFFER_BIT; - $self->{render_cb}->($self, $self->{w}, $self->{h}); + } else { my $pb = new Gtk2::Gdk::PixbufLoader; $pb->write ($self->{image}); @@ -191,7 +193,7 @@ my ($tw, $th) = @$self{qw(w h)}; - unless ($tw || $th) { + unless ($tw && $th) { $tw = $th = 1; $data = "\x00" x 64; } @@ -201,7 +203,7 @@ $tw = topot $tw; $th = topot $th; - if (defined $data) { + if ($tw != $self->{w} || $th != $self->{h} && defined $data) { my $bpp = (length $data) / ($self->{w} * $self->{h}); $data = pack "(a" . ($tw * $bpp) . ")*", unpack "(a" . ($self->{w} * $bpp) . ")*", $data; @@ -221,7 +223,6 @@ glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP; glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP; - glGetError; if (defined $data) { glTexImage2D GL_TEXTURE_2D, 0, $self->{internalformat}, @@ -237,7 +238,7 @@ 0, 0, $tw, $th, 0; - glPopmatrix; + glGetError and die; } }