@@ -78,34 +78,32 @@ sub DESTROY {
78
78
glDeleteProgramsARB_p($self -> {fragment_id }) if ($self -> {fragment_id });
79
79
glDeleteProgramsARB_p($self -> {vertex_id }) if ($self -> {vertex_id });
80
80
}
81
+
81
82
# 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
+ }
82
92
sub Load {
83
- my ($self ,$fragment ,$vertex ) = @_ ;
93
+ my ($self ,$fragment ,$vertex ) = @_ ;
84
94
# Load fragment code
85
95
if ($fragment ) {
86
96
$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 ;
96
100
}
97
101
# Load vertex code
98
102
if ($vertex ) {
99
103
$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 ;
109
107
}
110
108
# Link shaders
111
109
my $sp = glCreateProgramObjectARB();
0 commit comments