ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/Deliantra-Client/DC/Texture.pm
(Generate patch)

Comparing deliantra/Deliantra-Client/DC/Texture.pm (file contents):
Revision 1.2 by root, Mon May 29 02:01:56 2006 UTC vs.
Revision 1.5 by root, Wed Jun 14 16:20:23 2006 UTC

122 unless ($tw > 0 && $th > 0) { 122 unless ($tw > 0 && $th > 0) {
123 $tw = $th = 1; 123 $tw = $th = 1;
124 $data = "\x00" x 64; 124 $data = "\x00" x 64;
125 } 125 }
126 126
127 $self->{minified} = [CFClient::average $tw, $th, $data] 127 $self->{minified} ||= [CFClient::average $tw, $th, $data]
128 if $self->{minify}; 128 if $self->{minify};
129 129
130 unless ($GL_NPOT) { 130 pad2pot $data, $tw, $th unless $GL_NPOT;
131 # TODO: does not work for zero-sized textures
132 $tw = topot $tw;
133 $th = topot $th;
134
135 if (($tw != $self->{w} || $th != $self->{h}) && defined $data) {
136 my $bpp = (length $data) / ($self->{w} * $self->{h});
137 $data = pack "(a" . ($tw * $bpp) . ")*",
138 unpack "(a" . ($self->{w} * $bpp) . ")*", $data;
139 $data .= ("\x00" x ($tw * $bpp)) x ($th - $self->{h});
140 }
141 }
142 131
143 $self->{s} = $self->{w} / $tw; 132 $self->{s} = $self->{w} / $tw;
144 $self->{t} = $self->{h} / $th; 133 $self->{t} = $self->{h} / $th;
145 134
146 $self->{name} ||= glGenTexture; 135 $self->{name} ||= glGenTexture;
157 146
158 if ($::FAST) { 147 if ($::FAST) {
159 glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST; 148 glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST;
160 glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST; 149 glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST;
161 } elsif ($self->{mipmap} && $GL_VERSION >= 1.4) { 150 } elsif ($self->{mipmap} && $GL_VERSION >= 1.4) {
162 # alternatively check for 0x8191
163 glTexParameter GL_TEXTURE_2D, GL_GENERATE_MIPMAP, 1; 151 glTexParameter GL_TEXTURE_2D, GL_GENERATE_MIPMAP, 1;
164 glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR; 152 glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR;
165 glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR; 153 glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR;
166 } else { 154 } else {
167 glTexParameter GL_TEXTURE_2D, GL_GENERATE_MIPMAP, $self->{mipmap}; 155 glTexParameter GL_TEXTURE_2D, GL_GENERATE_MIPMAP, $self->{mipmap};
188 $tw, $th, 176 $tw, $th,
189 0; 177 0;
190 gl_check "copying to texture %dx%d if=%x", 178 gl_check "copying to texture %dx%d if=%x",
191 $tw, $th, $self->{internalformat}; 179 $tw, $th, $self->{internalformat};
192 } 180 }
193
194 glBindTexture GL_TEXTURE_2D, 0; # just to be on the safe side
195} 181}
196 182
197sub DESTROY { 183sub DESTROY {
198 my ($self) = @_; 184 my ($self) = @_;
199 185

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines