Важная информация
Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 13

Тема: Ускорение работы графического окна

  1. #1 Ускорение работы графического окна 
    Новичок
    Регистрация
    20.12.2011
    Сообщений
    5
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Где-то месяц назад передо мной стала цель написать программу, которая могла бы работать со шрифтами из bmp файла. После нескольких минут раздумий я понял, что просто хочу воссоздать консольный шрифт в графическом окне. Я написал несколько функций, часть из которых разрезает изображение на символы, которые заносятся в массив из изображений 8*11 (размер символа), а другая часть работает непосредственно с выводом изображений (в которых уже есть символы), разметкой их в окне (что бы, например, на 80-ой позиции строка переводилась), и раскраской в один из 16-ти консольных шрифтов. Должен сказать, что все это работает хорошо: изображение режется правильно, выводится без проблем, заливается цветом равномерно.
    [Ссылки могут видеть только зарегистрированные пользователи. ]
    Вот только есть одна проблема - они выводятся очень медленно.

    Пример:
    Мне нужно заполнить все окно символом "а". Я пишу такую программу:

    for i as integer = 1 to 2000
    p("a") ' p() - функция, которая выводит заданную строку.
    next i
    sleep()

    Запускаю. И вижу, как каждый символ отдельно выводится вслед за следующим (хоть разница между выводом меньше 0,5 секунды, но, все же, заметна). Объясню, что меня не устраивает. Когда я запускаю программу, она должна вывести мне уже заполненное символами "а" окно, как это в консольном окне, а не рисовать его при мне.

    И теперь встал вот такой вопрос: "Как увеличить скорость вывода изображений на экран?", а точнее "Как вывод сделать мгновенным для человеческого глаза?".
    У меня были гипотезы насчет того, что каждый символ загружен нескольким количеством расчетов, но и они должны проходить быстро.

    Кто что подскажет?
    Ответить с цитированием  
     

  2. #2  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    787
    Сказал(а) спасибо
    327
    Поблагодарили 350 раз(а) в 277 сообщениях
    Записей в блоге
    6
    Если честно, не совсем понял...
    Но в любом случае трудно понять, где скорость падает без исходного кода. Если исходный код показывать не хотим, то самым простым способом будет измерить время работы каждой процедуры. Понять какая процедура (или процедуры) реально влияет на скорость и изменить код (оптимизировать).

    Может и не нужно изобретать велосипед, ведь вывод в графическое окно с помощью любого шрифта давно реализован. Я могу посоветовать для игр использовать библиотеку [Ссылки могут видеть только зарегистрированные пользователи. ] , или создать bmp шрифт с помощью [Ссылки могут видеть только зарегистрированные пользователи. ] кода и выводить способом , заложенным в FB. Хотя может преследуются другие задачи...
    Ответить с цитированием  
     

  3. Пользователь сказал cпасибо:

    >Quiet Snow< (05.02.2013)

  4. #3  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,950
    Сказал(а) спасибо
    1,847
    Поблагодарили 992 раз(а) в 850 сообщениях
    Записей в блоге
    1
    НЕ ПО ТЕМЕ
    stabud, сайт переехал? Прикольно...

    Может и не нужно изобретать велосипед
    Да ладно пусть попишет, хоть поймёт как оптимизировать на ВУ. Но могу 100% сказать: супер быстро не будет.

    Вот только есть одна проблема - они выводятся очень медленно.
    Вы можете попробовать оператор PUT, также если не ошибаюсь, DRAW STRING'у можно скормить
    пользовательский шаблон в виде картинки, но ещё не смотрел как это делается, насколько я понял для
    FbGfx'a это самый правильный путь.

    Кстати в тек. момент работаю и над этой проблемой, для своей библы. Хочу потом передрать Free шрифты,
    и сделать хотя бы 1 собственный шрифт.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  5. #4  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    787
    Сказал(а) спасибо
    327
    Поблагодарили 350 раз(а) в 277 сообщениях
    Записей в блоге
    6
    Цитата Сообщение от >Quiet Snow< Посмотреть сообщение
    stabud, сайт переехал? Прикольно...
    Пришлось, narod.ru нас кинул и "продал в рабство" UCOZ. Так бы ни за что не стал никуда переезжать.
    Ответить с цитированием  
     

  6. #5  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,950
    Сказал(а) спасибо
    1,847
    Поблагодарили 992 раз(а) в 850 сообщениях
    Записей в блоге
    1
    Посмотрел библиотеку Xfont, прикольно. Если работать только с FBGfx - достаточно нужная вещь.
    Надо будет взять на вооружение.
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  7. #6  
    Новичок
    Регистрация
    20.12.2011
    Сообщений
    5
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Дело в том, что я как раз таки пользуюсь оператором put.

    Вот вам программа, которая выводит букву "а" на весь экран: [Ссылки могут видеть только зарегистрированные пользователи. ]
    Вы можете заметить как они ряд за рядом выводятся. Так вот - этого быть не должно.

    Я не говорю, что вывод должен быть мгновенным, хотя бы просто незаметным человеческому глазу.
    Ответить с цитированием  
     

  8. #7  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,950
    Сказал(а) спасибо
    1,847
    Поблагодарили 992 раз(а) в 850 сообщениях
    Записей в блоге
    1
    Ну запустил я исходник, да медленно работает. Выложите исходный код, тогда будем смотреть, где косяки.
    Не бойтесь, особой ценности этот код всё равно не представляет. Только не на файлообменник, а на форум
    (добавляете вложения в редакторе в расширенном режиме).
    Или можете засунуть код в тег [ highlight=fb ] ваш код [ /highlight ] прямо сообщением(в теге без пробелов,
    пробелы я написал, чтобы тег не обработался и вы увидели как он пишется).
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  9. #8  
    Супер модератор Аватар для >Quiet Snow<
    Регистрация
    11.04.2011
    Адрес
    Планета земля
    Сообщений
    3,950
    Сказал(а) спасибо
    1,847
    Поблагодарили 992 раз(а) в 850 сообщениях
    Записей в блоге
    1
    osoZnatel, вам нужно просто меньше операций делать в реалтайме, заготовьте один или несколько цветов для
    текста и печатайте. Это самые азы оптимизации. Если где-то у вас есть деление или тригонометрия - нужно от
    них избавляться незамедлительно. Умножения часто можно заменить массивом значений. Везде, где можно
    рассчитать заранее - рассчитываем. Как правило всегда можно пожертвовать точностью, взамен скорости.

    PUT быстр, не надо нас дезинформировать, при том что печатает в режиме TRANS(т.е. попиксельная прозрачность):

    Код fb:
     '$Lang: "FBLite"
     
       '    Экран
     SCREENRES 640, 480, 32, 2, FullSCR
     SCREENSET 1, 0
     
       '    Возьмём символ
     DIM Symb AS ANY POINTER = ImageCreate (8, 11, 0, 32)
     DIM r AS INTEGER
     'LINE Symb, (0, 0)-STEP(7, 10), RGB(255, 150, 0), B
     DRAW STRING Symb, (0, 0), "A", RGB(255, 150, 0)
     
    DO
     CLS
       FOR iy = 0 TO 479 STEP 11
             FOR ix = r TO 639 STEP 8
                   PUT (ix, iy), Symb, TRANS
             NEXT
       NEXT
       r = (r + 1) AND 31
     PCOPY
     SLEEP 2, 1
    LOOP UNTIL MultiKey(1)
    Обучение прикладному программированию(по skype), качественно, недорого, 18+, вопросы в личку.
    «Если вы ничего не сделаете, я уверяю вас, ничего и не произойдёт» © Жак Фреско
    Ограниченно модерирую.
    Ответить с цитированием  
     

  10. #9  
    Новичок
    Регистрация
    20.12.2011
    Сообщений
    5
    Сказал(а) спасибо
    0
    Поблагодарили 0 раз(а) в 0 сообщениях
    Я не через Draw String вывожу. Там слишком деревянная система использования шрифтов - что бы создать шрифт, нужно строить его в ряд и изображение получается длинным. Я просто режу изображение console.bmp (которое в архиве) и заношу каждую вырезанную картинку в массив. Формально, выводятся у меня не символы, а изображения. Исходный код я выложу, вот только прокомментирую изрядно
    Ответить с цитированием  
     

  11. #10  
    Профи Аватар для stabud
    Регистрация
    05.01.2013
    Сообщений
    787
    Сказал(а) спасибо
    327
    Поблагодарили 350 раз(а) в 277 сообщениях
    Записей в блоге
    6
    osoZnatel!

    Вот [Ссылки могут видеть только зарегистрированные пользователи. ] от Lachie Dazdarian
    Ответить с цитированием  
     

Страница 1 из 2 12 ПоследняяПоследняя
Информация о теме
Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 2
    Последнее сообщение: 24.11.2012, 14:56
  2. Ответов: 4
    Последнее сообщение: 24.04.2011, 18:42
  3. Ответов: 5
    Последнее сообщение: 24.11.2010, 18:30
Ваши права
  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •