Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Perl + OpenGL

67K
25 августа 2011 года
DarkPerl
5 / / 24.08.2011
Доброго времени суток!

Сегодня решил заняться программированием на языке Perl, используя библиотеку OpenGL :D

Возникли вопросы:

Есть два файла:
1 - main.pl
2 - point.pm

В первом файле (main.pl) подключаю второй файл (point.pm) как модуль, например. Пока обойдёмся без ООП, ограничимся модульным вариантом, чтобы каши так сказать не было :D

Код файла main.pl:
#!/usr/bin/perl

use strict;
use warnings;

use lib 'D:/work/perl/project/modules'; # Путь к папке с модулями
use OpenGL qw/:all/;
use point; # файл с описанием функции рисования точки

my $title = 'Заголовок окна';
my $winw_pos = 0; my $winh_pos = 0; # Позиция окна
my $win_w = 640; my $win_h = 480; # Размеры окна

# Код для рисования сцены
sub draw()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(1.0, 1.0, 1.0, 0.0);

draw_point; # Функция для рисования точки. (описана в файле point.pm)
glutSwapBuffers();
}

# Инициализация
sub main()
{
glutInit();
glutDisplayFunc(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowPosition("$winw_pos", "$winh_pos");
glutInitWindowSize("$win_w", "$win_h");
glutCreateWindow("$title");
glutDisplayFunc(\&draw);
glutMainLoop();
}

main;

Код файла point.pm:
package point;

use Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(&draw_point);

sub test() { print "Все ок!\n"; }

# функция рисования точки
sub draw_point()
{
glColor3f(1.0, 0.0, 0.0);
glPointSize(5.0);
glBegin(GL_POINTS);
glVertex3f(0.0, 0.0, 0.0);
glEnd();
}

return 1;

При запуске файла main.pl получаем ошибку:
Undefined subroutine &point::glColor3f called at D:/work/perl/project/modules/point.pm line 18.

Другими словами, он не находит определение фунции glColor3f в модуле point.pm...

И так, в чем собственно вопрос...

Если подключить библиотеку OpenGL в файле point.pm то всё работает!
Но получается, как я понимаю, повторное подключение OpenGL библиотеки!!!
Я ведь уже подключил её в main.pl :confused:

Подскажите, знающие люди, как обойти данное недоразумение??? Или же я чего то не понимаю!?

То есть, как один раз подключить библиотеку в главном файле *.pl и не подключать её повторно в модулях *.pm ???
7
25 августа 2011 года
@pixo $oft
3.4K / / 20.09.2006
Вообще,НЯП,функции вызываются как раз из point.pm,а,т.к. там не подключается описание,то и ошибка соответствующая.Зависимый модуль не может знать,что происходит вне него
67K
25 августа 2011 года
DarkPerl
5 / / 24.08.2011
В том то и дело, что по идее "должен знать". Так как используется ключевое слово use. То есть подключаемые библиотеки анализируются на стадии компиляции, а не на стадии выполнения программы main.pl Именно по этому мне и не понятно почему требуется повторное включение OpenGL библиотеки...мдя.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог