@@ -16,7 +16,7 @@ use strict;
1616use warnings;
1717use Carp;
1818
19- our $VERSION = ' 1.01 ' ;
19+ our $VERSION = ' 1.02 ' ;
2020
2121use OpenGL::Shader::Common;
2222our @ISA = qw( OpenGL::Shader::Common) ;
@@ -51,14 +51,14 @@ modify it under the same terms as Perl itself.
5151sub new {
5252 my $this = shift ;
5353 my $class = ref ($this ) || $this ;
54- my $self = OpenGL::Shader::Common-> new(@_ );
54+ my ($type ) = @_ ;
55+ my $self = OpenGL::Shader::Common-> new($type );
5556 return undef if (!$self );
5657 bless ($self ,$class );
5758 # Check for required OpenGL extensions
5859 return undef if (OpenGL::glpCheckExtension(' GL_ARB_shader_objects' ));
5960 return undef if (OpenGL::glpCheckExtension(' GL_ARB_fragment_shader' ));
6061 return undef if (OpenGL::glpCheckExtension(' GL_ARB_vertex_shader' ));
61- $self -> {type } = ' ' ;
6262 $self -> {version } = ' ' ;
6363 $self -> {description } = ' ' ;
6464 $self -> {fragment_const } = ' ' ;
@@ -154,7 +154,17 @@ sub Map {
154154 return $id ;
155155}
156156
157- # Set shader vector
157+ # Set shader Uniform integer array
158+ sub SetArray {
159+ my ($self ,$var ,@values ) = @_ ;
160+ my $id = $self -> Map($var );
161+ return ' Unable to map $var' if (!defined ($id ));
162+ my $count = scalar (@values );
163+ eval (' glUniform' .$count .' iARB($id,@values)' );
164+ return ' ' ;
165+ }
166+
167+ # Set shader Uniform float array
158168sub SetVector {
159169 my ($self ,$var ,@values ) = @_ ;
160170 my $id = $self -> Map($var );
@@ -164,13 +174,18 @@ sub SetVector {
164174 return ' ' ;
165175}
166176
167-
168- # Set shader 4x4 matrix
177+ # Set shader matrix
169178sub SetMatrix {
170179 my ($self ,$var ,$oga ) = @_ ;
171180 my $id = $self -> Map($var );
172181 return ' Unable to map $var' if (!defined ($id ));
173- glUniformMatrix4fvARB_c($id ,1,0,$oga -> ptr());
182+ if ($oga -> elements == 16) {
183+ glUniformMatrix4fvARB_c($id ,1,0,$oga -> ptr());
184+ } elsif ($oga -> elements == 9) {
185+ glUniformMatrix3fvARB_c($id ,1,0,$oga -> ptr());
186+ } else {
187+ return ' Only supports 3x3 and 4x4 matrices' ;
188+ }
174189 return ' ' ;
175190}
176191
0 commit comments