Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Шейдер на большой области. (http://www.flasher.ru/forum/showthread.php?t=122312)

mort 07.03.2009 18:16

Шейдер на большой области.
 
Приветствую.
Есть шейдер, что-то делает каждый кадр. Нужно покрыть им всю рабочую область (1600х800). Пробовал через beginShaderFill и через applyFilter -- тупит безбожно даже на "пустом" шейдере.
При этом в Pixel Bender то же самое летает.
Есть способы залечить?

2morrowMan 07.03.2009 20:28

Вам никто не ответит. Потому что с таким "никаким" описанием никто не станет напрягаться и догадываться что, как и где вы делали!

mort 07.03.2009 20:50

Да как бы особо нечего описывать.

Код AS3:

package app {
        import flash.display.BitmapData;
        import flash.display.DisplayObject;
        import flash.display.Shader;
        import flash.display.Sprite;
        import flash.display.StageAlign;
        import flash.display.StageQuality;
        import flash.display.StageScaleMode;
        import flash.events.Event;
        import flash.net.URLLoader;
        import flash.net.URLLoaderDataFormat;
        import flash.net.URLRequest;       
 
        public class Main extends Sprite
        {
                private var shader:Shader;
 
                public function Main()
                {
                        stage.align = StageAlign.TOP_LEFT;
                        stage.frameRate = 60;
                        stage.quality = StageQuality.LOW;
                        stage.scaleMode = StageScaleMode.NO_SCALE;
 
                        //
                        var loader:URLLoader = new URLLoader();
                        loader.dataFormat = URLLoaderDataFormat.BINARY;
                        loader.addEventListener(Event.COMPLETE, prepareShader);
                        loader.load(new URLRequest('pb/test.pbj'));
 
                        addEventListener(Event.ENTER_FRAME, render);
                }
 
                private function prepareShader(event:Event):void
                {
                        var loader:URLLoader = event.target as URLLoader;
                        shader = new Shader(loader.data);
                }
 
                private function render(event:Event = null): void
                {
                        if(shader)
                        {
                                graphics.clear();                                               
                                graphics.beginShaderFill(shader);
                                graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
                                graphics.endFill();
                        }
                }       
        }
}

Шейдер -- просто вывод цвета.

При размере мувика 1600х800 получается 8-12 фпс (атлон 3000). Аналогично если использовать drawTriangles или делать applyFilter для битмапа.

В пикселбендере тот же шейдер в таком размере дает огромные фпс.

Вопрос -- можно ли достичь того же во флеше.

2morrowMan 07.03.2009 21:16

Незнаю что там у вас за шейдер, а если сделать его как фильтр?:
Код AS3:

private function prepareShader(event:Event):void
{
        var loader:URLLoader = event.target as URLLoader;
        shader = new Shader(loader.data);
        this.filters = [new ShaderFilter(shader)];
}

render() убрать.

mort 07.03.2009 21:36

То же самое.

badun 07.03.2009 23:22

Вообще pixelbender-движки в flash player и в toolkit разные, то что в редакторе все летает совсем не означает, что и в плеере все будет шевелиться шустро.

2morrowMan 08.03.2009 00:13

Да и в Pixel Bender шейдеры не обновляэться каждый кадр )

Попробуйте применить фильтр к флешке размеров 1000х800 будет лучше или нет,а то я у себя попробовал шейдер инвертирования цветов на размере 1280х800, с ФПС 60, с применением шейдера как фильтра каждый кадр, то ФПС падало всего на пару единиц...

mort 08.03.2009 12:03

Цитата:

Сообщение от badun (Сообщение 803800)
Вообще pixelbender-движки в flash player и в toolkit разные, то что в редакторе все летает совсем не означает, что и в плеере все будет шевелиться шустро.

Не означает, но и обратное не очевидно. Падение скорости в 6 раз даже в стендэлон при том, что, по идее, трудится видеокарта -- с чего, вообще?

Добавлено через 6 минут
Цитата:

Сообщение от 2morrowMan (Сообщение 803813)
Да и в Pixel Bender шейдеры не обновляэться каждый кадр )

Возможно. Но вот когда кручу инпут-рулики, все меняется гладко и фпс не падает. В плеере такого и рядом нет.

Цитата:

Сообщение от 2morrowMan (Сообщение 803813)
Попробуйте применить фильтр к флешке размеров 1000х800 будет лучше или нет,а то я у себя попробовал шейдер инвертирования цветов на размере 1280х800, с ФПС 60, с применением шейдера как фильтра каждый кадр, то ФПС падало всего на пару единиц...

А Вы уверены, что фильтр пересчитывался каждый кадр? Попробуйте, например, цвет передавать в шейдер.

Изменение размеров области не выход. Так можно до 100х100 доуменьшать, при том, что в пикселбендере тот же самый фпс на весь экран :)

etc 08.03.2009 13:07

Цитата:

Сообщение от mort (Сообщение 803871)
по идее, трудится видеокарта

Нет, видеокарта даже во Flash 10 валяет дурака.

mort 08.03.2009 13:11

Цитата:

Сообщение от __etc (Сообщение 803884)
Нет, видеокарта даже во Flash 10 валяет дурака.

Есть ли способ проверить наверняка?

etc 08.03.2009 13:17

Вы уже проверили :)

mort 08.03.2009 13:55

Мдя.
Тогда вопрос исчерпан. Всем спосибе.


Часовой пояс GMT +4, время: 14:43.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.