Skip to content

Commit ed2bcc3

Browse files
committed
Shader::Objects DRY in compiling
1 parent 4dcbbcd commit ed2bcc3

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

lib/OpenGL/Shader/Objects.pm

+17-19
Original file line numberDiff line numberDiff line change
@@ -78,34 +78,32 @@ sub DESTROY {
7878
glDeleteProgramsARB_p($self->{fragment_id}) if ($self->{fragment_id});
7979
glDeleteProgramsARB_p($self->{vertex_id}) if ($self->{vertex_id});
8080
}
81+
8182
# Load shader strings
83+
sub _compile_shader {
84+
my ($id, $src, $label) = @_;
85+
glShaderSourceARB_p($id, $src);
86+
glCompileShaderARB($id);
87+
return '' if glGetObjectParameterivARB_p($id, GL_OBJECT_COMPILE_STATUS_ARB) == GL_TRUE;
88+
my $stat = glGetInfoLogARB_p($id);
89+
return "$label shader: $stat" if $stat;
90+
'';
91+
}
8292
sub Load {
83-
my($self,$fragment,$vertex) = @_;
93+
my ($self,$fragment,$vertex) = @_;
8494
# Load fragment code
8595
if ($fragment) {
8696
$self->{fragment_id} = glCreateShaderObjectARB($self->{fragment_const});
87-
return undef if (!$self->{fragment_id});
88-
glShaderSourceARB_p($self->{fragment_id}, $fragment);
89-
glCompileShaderARB($self->{fragment_id});
90-
my $compilation_status =
91-
glGetObjectParameterivARB_p($self->{fragment_id}, GL_OBJECT_COMPILE_STATUS_ARB);
92-
if ($compilation_status != GL_TRUE) {
93-
my $stat = glGetInfoLogARB_p($self->{fragment_id});
94-
return "Fragment shader: $stat" if ($stat);
95-
}
97+
return undef if !$self->{fragment_id};
98+
my $stat = _compile_shader($self->{fragment_id}, $fragment, 'Fragment');
99+
return $stat if $stat;
96100
}
97101
# Load vertex code
98102
if ($vertex) {
99103
$self->{vertex_id} = glCreateShaderObjectARB($self->{vertex_const});
100-
return undef if (!$self->{vertex_id});
101-
glShaderSourceARB_p($self->{vertex_id}, $vertex);
102-
glCompileShaderARB($self->{vertex_id});
103-
my $compilation_status =
104-
glGetObjectParameterivARB_p($self->{vertex_id}, GL_OBJECT_COMPILE_STATUS_ARB);
105-
if ($compilation_status != GL_TRUE) {
106-
my $stat = glGetInfoLogARB_p($self->{vertex_id});
107-
return "Vertex shader: $stat" if ($stat);
108-
}
104+
return undef if !$self->{vertex_id};
105+
my $stat = _compile_shader($self->{vertex_id}, $vertex, 'Vertex');
106+
return $stat if $stat;
109107
}
110108
# Link shaders
111109
my $sp = glCreateProgramObjectARB();

0 commit comments

Comments
 (0)