LINUX.ORG.RU

Clutter + Cogl = неработающая анимация

 , , , ,


0

1

Попытался копнуть в анимации Clutter'а, но у меня рендерятся только два кадра — второй и последний. Что я делаю не так?
Мой код. Оригинальный код.

★★★★★

Последнее исправление: CYB3R (всего исправлений: 1)

Я даже не знаю что тебе сказать, Ты думаешь кто-то в эту простыню будет вникать? Ты хоть сам пробовал разобраться?

invy ★★★★★
()
Ответ на: комментарий от invy

Конечно, пробовал. Там отличаются только строчки 206-212.
35-193 — это GL, он сейчас неинтересен. Я могу написать пример попроще, без 3D.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от invy

Вот полный исходный код более простого примера:

class Rectangle : Clutter.Actor {
    public Cogl.Color color = Cogl.Color.from_4f(0.68f, 0.1f, 0.1f, 1.0f);
    public float px = 300;
    public float py = 200;
    public float sx = 100;
    public float sy = 200;
    private float _r = 45.0f;

    public float r {
        get { return _r; }
        set {
            while (value > 360)
                value -= 360;
            while (value < 0)
                value += 360;
            _r = value;
        }
    }

    public override void paint() {
        Cogl.push_matrix();
        Cogl.translate(px, py, 0);
        Cogl.rotate(r, 0, 0, 1);
        Cogl.set_source_color(color);

        Cogl.rectangle(-sx / 2, -sy / 2, sx / 2, sy / 2);

        Cogl.pop_matrix();
   }

    public static int main(string[] args) {
        Clutter.init(ref args);
        var stage = new Clutter.Stage();
        stage.background_color = Clutter.Color.from_string("#aed");
        stage.hide.connect(Clutter.main_quit);

        var rect = new Rectangle();
        stage.add_child(rect);
        stage.show();

        var transition = new Clutter.PropertyTransition("r");
        transition.animatable = rect;
        transition.duration = 1000  ;
        transition.set_from_value(45.0f);
        transition.set_to_value(135.0f);
        transition.auto_reverse = true;
        rect.add_transition("rotate", transition);

        Clutter.main();

        return 0;
    }
}

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от invy

Не выдаёт он ошибок. Должна быть плавная анимация, вместо неё рендерятся второй (!) и последний кадр. Я не понимаю, из-за чего Clutter рендерит это именно так.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R
$ valac test.vala --pkg clutter-1.0
$ ./test 

(test:30255): Gdk-ERROR **: The program 'test' received an X Window System error.
This probably reflects a bug in the program.
The error was 'BadMatch (invalid parameter attributes)'.
  (Details: serial 245 error_code 8 request_code 72 (core protocol) minor_code 0)
  (Note to programmers: normally, X errors are reported asynchronously;
   that is, you will receive the error a while after causing it.
   To debug your program, run it with the GDK_SYNCHRONIZE environment
   variable to change this behavior. You can then get a meaningful
   backtrace from your debugger if you break on the gdk_x_error() function.)
Trace/breakpoint trap (core dumped)

The error was 'BadMatch (invalid parameter attributes)'

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 2)
Ответ на: комментарий от invy

Еще при компиляции куча варнингов на тему deprecated.

Это так и должно быть. Такие уж биндинги на Cogl-1.0 достались.

Не уверен, что в виртуалке должно работать. Что glxinfo говорит про поддержку OpenGL или OpenGL ES? У меня работает и через иксы, и через wayland. Но в виртуалке не думаю, что должно завестись без этого.
А почему в виртуалке? У тебя венда? Под вендой тоже должно собираться и работать.
Можешь тогда собрать и запустить cogl-info отсюда?

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от invy

По багу есть какие-то соображения? Я в Clutter новичок и Transition делаю впервые. Может, я что-то очень важное упустил?

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

«r» - что за такой непонятный транзишн?

https://developer.gnome.org/clutter-cookbook/stable/animations-rotating.html

Я тоже новичек (только wobbly windows когда-то ковырял)

Первый пример делает похожее на твоё (вращает прямоугольники и двигает их): https://wiki.gnome.org/Projects/Vala/ClutterSamples

Обрати внимание на:

            transition = new PropertyTransition ("rotation_angle_z");
            transition.set_to_value(500.0);
            transition.set_duration(2000);
            transition.set_progress_mode (AnimationMode.LINEAR);
            transgroup.add_transition(transition);

Подозреваю, что «r» - устаревший параметр, который уже давно не испоьзуется. Это подозрение основыватся на deprecation-warning'ах при компиляции.

Гомноделы любят свои апи ломать, так что вот.

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 4)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.