Skip to content

Commit 57da92b

Browse files
wchristiandevel-chm
authored andcommitted
add helpers needed for microidium (#31)
1 parent f8b2239 commit 57da92b

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

lib/OpenGL/Modern/Helpers.pm

+83
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,17 @@ use OpenGL::Modern qw(
2020
glGetError
2121
glGetShaderInfoLog_c
2222
glGetProgramInfoLog_c
23+
glGenTextures_c
24+
glGetProgramiv_c
25+
glGetShaderiv_c
26+
glShaderSource_c
27+
glGenFramebuffers_c
28+
glGenVertexArrays_c
29+
glGenBuffers_c
30+
glGetIntegerv_c
31+
glBufferData_c
32+
glUniform2f
33+
glUniform4f
2334
);
2435

2536
=head1 NAME
@@ -145,6 +156,17 @@ $VERSION = '0.01_02';
145156
croak_on_gl_error
146157
147158
glGetVersion_p
159+
glGenTextures_p
160+
glGetProgramiv_p
161+
glGetShaderiv_p
162+
glShaderSource_p
163+
glGenFramebuffers_p
164+
glGenVertexArrays_p
165+
glGenBuffers_p
166+
glGetIntegerv_p
167+
glBufferData_p
168+
glUniform2f_p
169+
glUniform4f_p
148170
);
149171

150172

@@ -237,4 +259,65 @@ sub croak_on_gl_error {
237259
};
238260
}
239261

262+
sub gen_thing_p {
263+
my ( $call, $n ) = @_;
264+
xs_buffer my $new_ids, 4 * $n;
265+
$call->( $n, unpack( $PACK_TYPE, pack( 'p', $new_ids ) ) );
266+
my @ids = unpack 'I*', $new_ids;
267+
return wantarray ? @ids : $ids[0];
268+
}
269+
270+
sub glGenTextures_p { gen_thing_p \&glGenTextures_c, @_ }
271+
272+
sub glGenFramebuffers_p { gen_thing_p \&glGenFramebuffers_c, @_ }
273+
274+
sub glGenVertexArrays_p { gen_thing_p \&glGenVertexArrays_c, @_ }
275+
276+
sub glGenBuffers_p { gen_thing_p \&glGenBuffers_c, @_ }
277+
278+
sub get_iv_p {
279+
my ( $call, $id, $pname, $count ) = @_;
280+
$count ||= 1;
281+
xs_buffer my $params, 4 * $count;
282+
$call->( $id, $pname, unpack( "$PACK_TYPE*", pack( 'p*', $params ) ) );
283+
my @params = unpack 'I*', $params;
284+
return wantarray ? @params : $params[0];
285+
}
286+
287+
sub glGetProgramiv_p { get_iv_p \&glGetProgramiv_c, @_ }
288+
289+
sub glGetShaderiv_p { get_iv_p \&glGetShaderiv_c, @_ }
290+
291+
sub glShaderSource_p {
292+
my ( $shader, @sources ) = @_;
293+
my $count = @sources;
294+
my @lengths = map length, @sources;
295+
glShaderSource_c( $shader, $count, pack( 'P*', @sources ), pack( 'I*', @lengths ) );
296+
return;
297+
}
298+
299+
sub glGetIntegerv_p {
300+
my ( $pname, $count ) = @_;
301+
$count ||= 1;
302+
xs_buffer my $data, 4 * $count;
303+
glGetIntegerv_c $pname, unpack( $PACK_TYPE, pack( 'p', $data ) );
304+
my @data = unpack 'I*', $data;
305+
return wantarray ? @data : $data[0];
306+
}
307+
308+
sub glBufferData_p {
309+
my ( $target, $oga, $usage ) = @_;
310+
glBufferData_c $target, $oga->length, $oga->ptr, $usage;
311+
}
312+
313+
sub glUniform2f_p {
314+
my ( $uniform, $v0, $v1 ) = @_;
315+
glUniform2f $uniform, $v0, $v1;
316+
}
317+
318+
sub glUniform4f_p {
319+
my ( $uniform, $v0, $v1, $v2, $v3 ) = @_;
320+
glUniform4f $uniform, $v0, $v1, $v2, $v3;
321+
}
322+
240323
1;

0 commit comments

Comments
 (0)