--- deliantra/Deliantra-Client/DC.pm 2006/05/25 16:35:42 1.63
+++ deliantra/Deliantra-Client/DC.pm 2006/05/26 18:28:23 1.70
@@ -27,40 +27,6 @@
use AnyEvent ();
use BerkeleyDB;
-use CFClient::OpenGL;
-
-our %GL_EXT;
-our $GL_VERSION;
-
-our $GL_NPOT;
-our $GL_DEBUG = 1;
-
-sub gl_init {
- $GL_VERSION = gl_version * 1;
- %GL_EXT = map +($_ => 1), split /\s+/, gl_extensions;
-
- $GL_NPOT = $GL_EXT{GL_ARB_texture_non_power_of_two} || $GL_VERSION >= 2;
- $GL_NPOT = 0 if gl_vendor =~ /ATI Technologies/; # ATI doesn't get it right...
-
- glDisable GL_COLOR_MATERIAL;
- glShadeModel GL_FLAT;
- glDisable GL_DITHER;
- glDisable GL_DEPTH_TEST;
- glDepthMask 0;
- glHint GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST;
-
- CFClient::Texture::restore_state ();
-}
-
-sub gl_check {
- return unless $GL_DEBUG;
-
- if (my $error = glGetError) {
- my ($format, @args) = @_;
- Carp::cluck sprintf "opengl error %x while $format", $error, @args;
- }
-}
-
sub find_rcfile($) {
my $path;
@@ -173,7 +139,7 @@
sub view_verbatim {
(join "",
- map +("\t" x ($indent / 2)) . "$_\n",
+ map +("\t" x ($indent / 2)) . "$_\n",
split /\n/, CFClient::UI::Label::escape ($_[1]))
. "\n"
}
@@ -183,12 +149,17 @@
}
sub view_head1 {
- "" . $_[1]->title->present ($_[0]) . "\n\n"
+ "\n\n" . $_[1]->title->present ($_[0]) . "\n\n"
. $_[1]->content->present ($_[0])
};
sub view_head2 {
- "" . $_[1]->title->present ($_[0]) . "\n\n"
+ "\n" . $_[1]->title->present ($_[0]) . "\n\n"
+ . $_[1]->content->present ($_[0])
+};
+
+sub view_head3 {
+ "\n" . $_[1]->title->present ($_[0]) . "\n\n"
. $_[1]->content->present ($_[0])
};
@@ -265,7 +236,7 @@
my $targ = $::CONN->{player}{tag};
if ($self->{container} == $::CONN->{player}{tag}) {
- $targ = $main::OPENCONT;
+ $targ = $::CONN->{open_container};
}
$::CONN->send ("move $targ $self->{tag} 0");
@@ -285,7 +256,7 @@
)
: (
["lock", sub { $::CONN->send ("lock " . pack "CN", 1, $self->{tag}) }],
- ["drop", sub { $::CONN->send ("move $main::OPENCONT $self->{tag} 0") }],
+ ["drop", sub { $::CONN->send ("move $::CONN->{open_container} $self->{tag} 0") }],
)
),
);
@@ -306,11 +277,13 @@
$self->{face_widget} ||= new CFClient::UI::Face
can_events => 1,
can_hover => 1,
+ anim => $self->{anim},
+ animspeed => $self->{animspeed}, # TODO# must be set at creation time
connect_button_down => $button_cb,
;
$self->{face_widget}{face} = $self->{face};
$self->{face_widget}{anim} = $self->{anim};
- $self->{face_widget}{animspeed} = $self->{animespeed};
+ $self->{face_widget}{animspeed} = $self->{animspeed};
$self->{face_widget}->set_tooltip (
"Face/Animation.\n"
. "Item uses face #$self->{face}. "
@@ -322,7 +295,7 @@
can_events => 1,
can_hover => 1,
ellipsise => 2,
- xalign => 0,
+ align => -1,
connect_button_down => $button_cb,
;
my $desc = CFClient::Item::desc_string $self;
@@ -333,7 +306,7 @@
can_events => 1,
can_hover => 1,
ellipsise => 0,
- xalign => 0.5,
+ align => 0,
connect_button_down => $button_cb,
;
$self->{weight_widget}->set_text (CFClient::Item::weight_string $self);
@@ -346,197 +319,6 @@
);
}
-package CFClient::Texture;
-
-use strict;
-
-use Scalar::Util;
-
-use CFClient::OpenGL;
-
-my %TEXTURES;
-
-sub new {
- my ($class, %data) = @_;
-
- my $self = bless {
- internalformat => GL_RGBA,
- format => GL_RGBA,
- type => GL_UNSIGNED_BYTE,
- %data,
- }, $class;
-
- Scalar::Util::weaken ($TEXTURES{$self+0} = $self);
-
- $self->upload;
-
- $self
-}
-
-sub new_from_image {
- my ($class, $image, %arg) = @_;
-
- $class->new (image => $image, %arg)
-}
-
-sub new_from_file {
- my ($class, $path, %arg) = @_;
-
- open my $fh, "<:raw", $path
- or die "$path: $!";
-
- local $/;
- $class->new_from_image (<$fh>, %arg)
-}
-
-#sub new_from_surface {
-# my ($class, $surface) = @_;
-#
-# $surface->rgba;
-#
-# $class->new (
-# data => $surface->pixels,
-# w => $surface->width,
-# h => $surface->height,
-# )
-#}
-
-sub new_from_layout {
- my ($class, $layout, %arg) = @_;
-
- my ($w, $h, $data, $format, $internalformat) = $layout->render;
-
- $class->new (
- w => $w,
- h => $h,
- data => $data,
- format => $format,
- internalformat => $format,
- type => GL_UNSIGNED_BYTE,
- %arg,
- )
-}
-
-sub new_from_opengl {
- my ($class, $w, $h, $cb) = @_;
-
- $class->new (w => $w || 1, h => $h || 1, render_cb => $cb)
-}
-
-sub topot {
- (grep $_ >= $_[0], 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768)[0]
-}
-
-sub upload {
- my ($self) = @_;
-
- return unless $GL_VERSION;
-
- my $data;
-
- if (exists $self->{data}) {
- $data = $self->{data};
-
- } elsif (exists $self->{render_cb}) {
- glViewport 0, 0, $self->{w}, $self->{h};
- glMatrixMode GL_PROJECTION;
- glLoadIdentity;
- glOrtho 0, $self->{w}, 0, $self->{h}, -10000, 10000;
- glMatrixMode GL_MODELVIEW;
- glLoadIdentity;
- $self->{render_cb}->($self, $self->{w}, $self->{h});
-
- } else {
- ($self->{w}, $self->{h}, $data, $self->{internalformat}, $self->{format}, $self->{type})
- = CFClient::load_image_inline $self->{image};
- }
-
- my ($tw, $th) = @$self{qw(w h)};
-
- unless ($tw > 0 && $th > 0) {
- $tw = $th = 1;
- $data = "\x00" x 64;
- }
-
- $self->{minified} = [CFClient::average $tw, $th, $data]
- if $self->{minify};
-
- unless ($GL_NPOT) {
- # TODO: does not work for zero-sized textures
- $tw = topot $tw;
- $th = topot $th;
-
- 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;
- $data .= ("\x00" x ($tw * $bpp)) x ($th - $self->{h});
- }
- }
-
- $self->{s} = $self->{w} / $tw;
- $self->{t} = $self->{h} / $th;
-
- $self->{name} ||= glGenTexture;
-
- glBindTexture GL_TEXTURE_2D, $self->{name};
-
- glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP;
- glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP;
-
- if ($::FAST) {
- glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST;
- glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST;
- } elsif ($self->{mipmap} && $GL_VERSION >= 1.4) {
- # alternatively check for 0x8191
- glTexParameter GL_TEXTURE_2D, GL_GENERATE_MIPMAP, 1;
- glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR;
- glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR;
- } else {
- glTexParameter GL_TEXTURE_2D, GL_GENERATE_MIPMAP, $self->{mipmap};
- glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR;
- glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR;
- }
-
- glGetError;
-
- if (defined $data) {
- glTexImage2D GL_TEXTURE_2D, 0,
- $self->{internalformat},
- $tw, $th,
- 0,
- $self->{format},
- $self->{type},
- $data;
- CFClient::gl_check "uploading texture %dx%d if=%x f=%x t=%x",
- $tw, $th, $self->{internalformat}, $self->{format}, $self->{type};
- } else {
- glCopyTexImage2D GL_TEXTURE_2D, 0,
- $self->{internalformat},
- 0, 0,
- $tw, $th,
- 0;
- CFClient::gl_check "copying to texture %dx%d if=%x",
- $tw, $th, $self->{internalformat};
- }
-
- glBindTexture GL_TEXTURE_2D, 0; # just to be on the safe side
-}
-
-sub DESTROY {
- my ($self) = @_;
-
- delete $TEXTURES{$self+0};
-
- glDeleteTexture delete $self->{name}
- if $self->{name};
-}
-
-sub restore_state {
- $_->upload
- for values %TEXTURES;
-}
-
1;
=back