… | |
… | |
13 | =cut |
13 | =cut |
14 | |
14 | |
15 | package CFPlus::Texture; |
15 | package CFPlus::Texture; |
16 | |
16 | |
17 | use strict; |
17 | use strict; |
18 | |
|
|
19 | use Scalar::Util; |
|
|
20 | |
18 | |
21 | use CFPlus::OpenGL; |
19 | use CFPlus::OpenGL; |
22 | |
20 | |
23 | my %TEXTURES; |
21 | my %TEXTURES; |
24 | |
22 | |
… | |
… | |
30 | format => GL_RGBA, |
28 | format => GL_RGBA, |
31 | type => GL_UNSIGNED_BYTE, |
29 | type => GL_UNSIGNED_BYTE, |
32 | %data, |
30 | %data, |
33 | }, $class; |
31 | }, $class; |
34 | |
32 | |
35 | Scalar::Util::weaken ($TEXTURES{$self+0} = $self); |
33 | CFPlus::weaken ($TEXTURES{$self+0} = $self); |
36 | |
34 | |
37 | $self->upload; |
35 | $self->upload; |
38 | |
36 | |
39 | $self |
37 | $self |
40 | } |
38 | } |
… | |
… | |
84 | #} |
82 | #} |
85 | |
83 | |
86 | sub new_from_opengl { |
84 | sub new_from_opengl { |
87 | my ($class, $w, $h, $cb) = @_; |
85 | my ($class, $w, $h, $cb) = @_; |
88 | |
86 | |
89 | $class->new (w => $w || 1, h => $h || 1, render_cb => $cb) |
87 | $class->new (w => $w || 1, h => $h || 1, render_cb => $cb, nearest => 1) |
90 | } |
88 | } |
91 | |
89 | |
92 | sub upload { |
90 | sub upload { |
93 | my ($self) = @_; |
91 | my ($self) = @_; |
94 | |
92 | |
… | |
… | |
135 | } else { |
133 | } else { |
136 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, $GL_VERSION >= 1.2 ? GL_CLAMP_TO_EDGE : GL_CLAMP; |
134 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, $GL_VERSION >= 1.2 ? GL_CLAMP_TO_EDGE : GL_CLAMP; |
137 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, $GL_VERSION >= 1.2 ? GL_CLAMP_TO_EDGE : GL_CLAMP; |
135 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, $GL_VERSION >= 1.2 ? GL_CLAMP_TO_EDGE : GL_CLAMP; |
138 | } |
136 | } |
139 | |
137 | |
140 | if ($::FAST) { |
138 | if ($::FAST || $self->{nearest}) { |
141 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST; |
139 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST; |
142 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST; |
140 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST; |
143 | } elsif ($self->{mipmap} && $GL_VERSION >= 1.4) { |
141 | } elsif ($self->{mipmap} && $GL_VERSION >= 1.4) { |
144 | glTexParameter GL_TEXTURE_2D, GL_GENERATE_MIPMAP, 1; |
142 | glTexParameter GL_TEXTURE_2D, GL_GENERATE_MIPMAP, 1; |
145 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR; |
143 | glTexParameter GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR; |