#!/usr/bin/perl -w
use strict;
use OpenGL qw/ :all /;
use Math::Trig;

use constant MAXPONTS => 100;

my $point = [ [], [] ];
my $pointnum = 0;

#表示ウィンドウの位置、サイズ
glutInitWindowPosition(100, 100);
glutInitWindowSize(320, 240);
#glut初期化
#glutInit(&argc, &argv); # mainの引数をそのまま渡すと、引数の処理をしてくれる
glutInit();
glutInitDisplayMode(GLUT_RGBA);
glutCreateWindow('test');
glutDisplayFunc(\&display);
glutReshapeFunc(\&resize);
glutMouseFunc(\&mouse);
init();
#glut実行
glutMainLoop();

sub mouse {
  my ($button, $state, $x, $y) = @_;
#x,y: 左上を(0,0)とした画面のピクセル座標
#print "mouse ($x, $y)\n";

  if ($button == GLUT_LEFT_BUTTON) {
    $point->[$pointnum][0] = $x;
    $point->[$pointnum][1] = $y;
    if($state == GLUT_UP and $pointnum > 0) {
      glColor3d(0.0, 0.0, 0.0);
        glBegin(GL_LINES);
        glVertex2i($point->[$pointnum-1][0], $point->[$pointnum-1][1]);
        glVertex2i($point->[$pointnum][0],   $point->[$pointnum][1]);
      glEnd();
      glFlush();
    }
    elsif($state == GLUT_DOWN) {
    }
	$pointnum++;
  }
  elsif ($button == GLUT_RIGHT_BUTTON) {
  }
  else {
  	print "  button is ";
  }
  
}

sub display
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  if($pointnum > 1) {
  	glColor3d(0.0, 0.0, 0.0);
  	glBegin(GL_LINES);
  	for(my $i = 0 ; $i < $pointnum ; $i++) {
  		glVertex2i($point->[$i][0],$point->[$i][1]);
  	}
  	glEnd();
  }
  glFlush();
}

sub resize
{
	my ($w, $h) = @_;
# $w, $h: 表示ウインドウのサイズが入ってくる

#表示するサイズ
	glViewport(0, 0, $w, $h);
	glLoadIdentity();
#マウスの座標と描画座標を合わせて手抜きをする
	glOrtho(-0.5, $w - 0.5, $h - 0.5, -0.5, -1.0, 1.0);
}

sub init
{
	glClearColor(1.0, 1.0, 1.0, 1.0);
}
