--- deliantra/Deliantra-Client/DC.pm 2006/04/11 18:06:52 1.24 +++ deliantra/Deliantra-Client/DC.pm 2006/04/12 02:00:06 1.26 @@ -21,6 +21,8 @@ XSLoader::load "CFClient", $VERSION; } +use SDL::OpenGL; + our %GL_EXT; our $GL_VERSION; @@ -32,6 +34,16 @@ $GL_NPOT = $GL_EXT{GL_ARB_texture_non_power_of_two} || $GL_VERSION >= 2; + glClearColor 0.45, 0.45, 0.45, 1; + + glEnable GL_TEXTURE_2D; + glEnable GL_COLOR_MATERIAL; + glShadeModel GL_FLAT; + glDisable GL_DEPTH_TEST; + glBlendFunc GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA; + + glHint GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST; + CFClient::Texture::restore_state (); } @@ -80,6 +92,8 @@ package CFClient::Texture; +use strict; + use Scalar::Util; use SDL::OpenGL; @@ -164,17 +178,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 +205,7 @@ my ($tw, $th) = @$self{qw(w h)}; - unless ($tw || $th) { + unless ($tw && $th) { $tw = $th = 1; $data = "\x00" x 64; } @@ -201,7 +215,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; @@ -216,12 +230,11 @@ glBindTexture GL_TEXTURE_2D, $self->{name}; - glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR; - glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR;#_MIPMAP_LINEAR; + glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, $::FAST ? GL_NEAREST : GL_LINEAR; + glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, $::FAST ? GL_NEAREST : GL_LINEAR; 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 +250,7 @@ 0, 0, $tw, $th, 0; - glPopmatrix; + glGetError and die; } }