Advertisement
Guest User

Perl OpenHMD Module (Alpha)

a guest
Nov 24th, 2014
212
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 5.11 KB | None | 0 0
  1. package OpenHMD;
  2.  
  3. use strict;
  4. use warnings;
  5.  
  6. use Const::Fast;
  7. use Exporter 'import';
  8. use Inline  C       => Config
  9.         =>  LIBS    => '-lopenhmd',
  10. ;
  11. use Inline 'C';
  12.  
  13. const our $OHMD_VENDOR  => 0;
  14. const our $OHMD_PRODUCT => 1;
  15. const our $OHMD_PATH    => 2 ;
  16.  
  17. const our $OHMD_ROTATION_QUAT                   =>  1;
  18. const our $OHMD_LEFT_EYE_GL_MODELVIEW_MATRIX    =>  2;
  19. const our $OHMD_RIGHT_EYE_GL_MODELVIEW_MATRIX   =>  3;
  20. const our $OHMD_LEFT_EYE_GL_PROJECTION_MATRIX   =>  4;
  21. const our $OHMD_RIGHT_EYE_GL_PROJECTION_MATRIX  =>  5;
  22. const our $OHMD_POSITION_VECTOR                 =>  6;
  23. const our $OHMD_SCREEN_HORIZONTAL_SIZE          =>  7;
  24. const our $OHMD_SCREEN_VERTICAL_SIZE            =>  8;
  25. const our $OHMD_LENS_HORIZONTAL_SEPARATION      =>  9;
  26. const our $OHMD_LENS_VERTICAL_POSITION          => 10;
  27. const our $OHMD_LEFT_EYE_FOV                    => 11;
  28. const our $OHMD_LEFT_EYE_ASPECT_RATIO           => 12;
  29. const our $OHMD_RIGHT_EYE_FOV                   => 13;
  30. const our $OHMD_RIGHT_EYE_ASPECT_RATIO          => 14;
  31. const our $OHMD_EYE_IPD                         => 15;
  32. const our $OHMD_PROJECTION_ZFAR                 => 16;
  33. const our $OHMD_PROJECTION_ZNEAR                => 17;
  34. const our $OHMD_DISTORTION_K                    => 18;
  35.  
  36. const our $OHMD_SCREEN_HORIZONTAL_RESOLUTION    => 0;
  37. const our $OHMD_SCREEN_VERTICAL_RESOLUTION      => 1;
  38.  
  39. our @EXPORT_OK = (
  40.     '$OHMD_VENDOR',
  41.     '$OHMD_PRODUCT',
  42.     '$OHMD_PATH',
  43.  
  44.     '$OHMD_ROTATION_QUAT',
  45.     '$OHMD_LEFT_EYE_GL_MODELVIEW_MATRIX',
  46.     '$OHMD_RIGHT_EYE_GL_MODELVIEW_MATRIX',
  47.     '$OHMD_LEFT_EYE_GL_PROJECTION_MATRIX',
  48.     '$OHMD_RIGHT_EYE_GL_PROJECTION_MATRIX',
  49.     '$OHMD_POSITION_VECTOR',
  50.     '$OHMD_SCREEN_HORIZONTAL_SIZE',
  51.     '$OHMD_SCREEN_VERTICAL_SIZE',
  52.     '$OHMD_LENS_HORIZONTAL_SEPARATION',
  53.     '$OHMD_LENS_VERTICAL_POSITION',
  54.     '$OHMD_LEFT_EYE_FOV',
  55.     '$OHMD_LEFT_EYE_ASPECT_RATIO',
  56.     '$OHMD_RIGHT_EYE_FOV',
  57.     '$OHMD_RIGHT_EYE_ASPECT_RATIO',
  58.     '$OHMD_EYE_IPD',
  59.     '$OHMD_PROJECTION_ZFAR',
  60.     '$OHMD_PROJECTION_ZNEAR',
  61.     '$OHMD_DISTORTION_K',
  62.  
  63.     '$OHMD_SCREEN_HORIZONTAL_RESOLUTION',
  64.     '$OHMD_SCREEN_VERTICAL_RESOLUTION',
  65. );
  66.  
  67. our %EXPORT_TAGS = (
  68.     CONSTANTS => [
  69.         '$OHMD_VENDOR',
  70.         '$OHMD_PRODUCT',
  71.         '$OHMD_PATH',
  72.  
  73.         '$OHMD_ROTATION_QUAT',
  74.         '$OHMD_LEFT_EYE_GL_MODELVIEW_MATRIX',
  75.         '$OHMD_RIGHT_EYE_GL_MODELVIEW_MATRIX',
  76.         '$OHMD_LEFT_EYE_GL_PROJECTION_MATRIX',
  77.         '$OHMD_RIGHT_EYE_GL_PROJECTION_MATRIX',
  78.         '$OHMD_POSITION_VECTOR',
  79.         '$OHMD_SCREEN_HORIZONTAL_SIZE',
  80.         '$OHMD_SCREEN_VERTICAL_SIZE',
  81.         '$OHMD_LENS_HORIZONTAL_SEPARATION',
  82.         '$OHMD_LENS_VERTICAL_POSITION',
  83.         '$OHMD_LEFT_EYE_FOV',
  84.         '$OHMD_LEFT_EYE_ASPECT_RATIO',
  85.         '$OHMD_RIGHT_EYE_FOV',
  86.         '$OHMD_RIGHT_EYE_ASPECT_RATIO',
  87.         '$OHMD_EYE_IPD',
  88.         '$OHMD_PROJECTION_ZFAR',
  89.         '$OHMD_PROJECTION_ZNEAR',
  90.         '$OHMD_DISTORTION_K',
  91.  
  92.         '$OHMD_SCREEN_HORIZONTAL_RESOLUTION',
  93.         '$OHMD_SCREEN_VERTICAL_RESOLUTION',
  94.     ],
  95. );
  96.  
  97. sub new {
  98.     my $class = shift;
  99.  
  100.     my $self = bless {
  101.     }, $class;
  102.  
  103.     return $self;
  104. }
  105.  
  106. #################
  107. # THIN WRAPPERS #
  108. #################
  109.  
  110. sub ohmd_ctx_create {
  111.     my $self = shift;
  112.  
  113.     my $context = inline_ohmd_ctx_create();
  114.  
  115.     return $context;
  116. }
  117.  
  118. sub ohmd_ctx_destroy {
  119.     my ($self, $context) = @_;
  120.  
  121.     inline_ohmd_ctx_destroy ($context);
  122.  
  123.     return $self;
  124. }
  125.  
  126. sub ohmd_ctx_probe {
  127.     my ($self, $context) = @_;
  128.  
  129.     my $devices = inline_ohmd_ctx_probe ($context);
  130.  
  131.     return $devices;
  132. }
  133.  
  134. sub ohmd_ctx_update {
  135.     my ($self, $context) = @_;
  136.  
  137.     inline_ohmd_ctx_update ($context);
  138.  
  139.     return $self;
  140. }
  141.  
  142. sub ohmd_list_open_device {
  143.     my ($self, $context, $index) = @_;
  144.  
  145.     my $device = inline_ohmd_list_open_device ($context, $index);
  146.  
  147.     return $device;
  148. }
  149.  
  150. sub ohmd_device_geti {
  151.     my ($self, $device, $type) = @_;
  152.  
  153.     my $value = inline_ohmd_device_geti ($device, $type);
  154.  
  155.     return $value;
  156. }
  157.  
  158. sub ohmd_device_getf {
  159.     my ($self, $device, $type) = @_;
  160.  
  161.     my @values = inline_ohmd_device_getf ($device, $type);
  162.  
  163.     return @values;
  164. }
  165.  
  166. sub ohmd_list_gets {
  167.     my ($self, $context, $index, $type) = @_;
  168.  
  169.     my @values = inline_ohmd_list_gets ($context, $index, $type);
  170.  
  171.     return @values;
  172. }
  173.  
  174. 1;
  175.  
  176. __DATA__
  177. __C__
  178.  
  179. #include "openhmd/openhmd.h"
  180.  
  181. int inline_ohmd_ctx_create() {
  182.     return ohmd_ctx_create();
  183. }
  184.  
  185. void inline_ohmd_ctx_destroy(int ctx) {
  186.     ohmd_ctx_destroy(ctx);
  187. }
  188.  
  189. int inline_ohmd_ctx_probe(int ctx) {
  190.     return ohmd_ctx_probe(ctx);
  191. }
  192.  
  193. void inline_ohmd_ctx_update(int ctx) {
  194.     ohmd_ctx_update(ctx);
  195. }
  196.  
  197. int inline_ohmd_list_open_device(int ctx, int index) {
  198.     return ohmd_list_open_device(ctx, index);
  199. }
  200.  
  201. char* inline_ohmd_list_gets(int ctx, int index, int type) {
  202.     return ohmd_list_gets(ctx, index, type);
  203. }
  204.  
  205. int inline_ohmd_device_geti(int device, int type) {
  206.     int buffer[1];
  207.  
  208.     ohmd_device_geti(device, type, buffer);
  209.  
  210.     return buffer[0];
  211. }
  212.  
  213. void inline_ohmd_device_getf (int device, int type) {
  214.     float buffer[16];
  215.  
  216.     ohmd_device_getf(device, type, buffer);
  217.  
  218.     Inline_Stack_Vars;
  219.     Inline_Stack_Reset;
  220.  
  221.     int i;
  222.     for(i = 0; i < 16; i++) {
  223.         Inline_Stack_Push(sv_2mortal(newSVnv(buffer[i])));
  224.     }
  225.  
  226.     Inline_Stack_Done;
  227. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement