@@ -20,6 +20,17 @@ use OpenGL::Modern qw(
20
20
glGetError
21
21
glGetShaderInfoLog_c
22
22
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
23
34
) ;
24
35
25
36
=head1 NAME
@@ -145,6 +156,17 @@ $VERSION = '0.01_02';
145
156
croak_on_gl_error
146
157
147
158
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
148
170
) ;
149
171
150
172
@@ -237,4 +259,65 @@ sub croak_on_gl_error {
237
259
};
238
260
}
239
261
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
+
240
323
1;
0 commit comments