LINUX.ORG.RU

Сообщения Kosyak

 

GSoC 2011: OSM render for Marble

Галерея — Скриншоты

Участвую в Google Summer of Code в проекте KDE. Работаю над рендерингом векторных карт OpenStreetMap для kdeedu/Marble. Из-за сессии в универе пришлось начать работать ещё в конце апреля, поэтому есть некоторые результаты. Уже умеет рендерить дороги, леса, воду, POI, дома. На скрине загружен 200 Mb .osm файл - вся Новосибирская область, при этом marble съедает ~400 Мb памяти. В будущем проблему решат использованием динамической подгрузки и PBF-формата.

На скрине:

  • ArchLinux
  • KDE 4.6.3
  • KDevelop 4.2.2
  • Marble.
  • Шрифт: Ubuntu Light, полный хинтинг, без субпиксельного сглаживания.
  • Тема плазмы: Fushigi

>>> Просмотр (1680x1050, 857 Kb)

 , , , ,

Kosyak
()

[c++][ничегонепонимат] Не работет delete/free

Форум — Development

Есть структура «анимация» - тупо набор RGBA-кадров, есть класс - анимированная текстура, в котором загружаются все кадры в OpenGL и потом уже используются ID текстур. Проблема с очисткой изначальной анимации. Вот код конструктора:

AnimatedTexture::AnimatedTexture(const Animation& a)
{
    realWidth = a.width;
    realHeight = a.height;
    frameCount = a.frameCount;

    textureIDs = new GLuint[frameCount];
    glGenTextures(frameCount, textureIDs);
    
    for (int i = 0; i < frameCount; i++)
    {
        glBindTexture(GL_TEXTURE_2D, textureIDs[i]);
	
        glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, a.frames[i].width, a.frames[i].height, 0, GL_RGBA, GL_UNSIGNED_INT_8_8_8_8, a.frames[i].data);

        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        //delete[] a.frames[i].data; //<- тут удаляется
    }
    for(int i = 0; i < frameCount; i++)
    {
        delete[] a.frames[i].data; //<- а тут нет 0_0
    }
}
Если использовать первый delete[] - память освобождается, но он мне там не нужен (на самом деле отчистка должна быть вне класса). А вот второй не работает (цикл исправен - проверял). Что это вообще может быть?! Без glTexImage2D все очищается и во втором случае.

Программа работает корректно в обоих случаях, только в первом занимает 350 Мб (Анимация - 300 Мб без сжатия), а во втором - 700.

Пока проверял только на Gentoo x86_64.

 

Kosyak
()

[спв] Проблема со светом

Форум — Talks

Пришел, значится я домой. Решил продукты в холодильник сложить. Опа, лампочка в холодильнике не горит. Проверил верхний свет - работает, розетки не работают. Значит автомат выбило. Вытыкаю холодильник - свет гаснет вообще. Вытыкаю обратно - появляется. Причем плита отлично работает. Что это за мистика такая?

 

Kosyak
()

[freetype2] Рендеринг текста

Форум — Development

Мне требуется отрендерить произвольный текст (с переносами) в простой буффер - альфа канал. Сейчас делаю так (коряво и костыльно на мой взгляд):

    int x = 0;
    int y = 0;
    int lines = 1;
    int bearingY = 0;
    int width = 0;
    int i;

    std::string text = t;

    for (i = 0; i < text.length(); i++)
    {
        FT_UInt glyph_index;
        glyph_index = FT_Get_Char_Index(fontFace, text.at(i));
        FT_Load_Glyph(fontFace, glyph_index, FT_LOAD_DEFAULT);
        bearingY = bearingY < fontFace->glyph->metrics.horiBearingY >> 6 ? fontFace->glyph->metrics.horiBearingY >> 6 : bearingY;
        x += fontFace->glyph->advance.x >> 6;

        if (text.at(i) == '\n')
        {
            width = x > width ? x : width;
            x = 0;
            lines++;
        }
    }
    width = x > width ? x : width;

    int fullHeight = lines * fontSize;
    int lineHeight = fontSize;
    int fullWidth = width;

    x = 0;
    y = 0;
    int line = 0;

    unsigned char *imageData = new unsigned char[fullWidth * fullHeight];
    memset(imageData, 0, fullWidth * fullHeight);

    for (i = 0; i < text.length(); i++)
    {
        if (text.at(i) == '\n')
        {
            x = 0;
            line++;
        }
        else
        {
            FT_UInt glyph_index;
            glyph_index = FT_Get_Char_Index(fontFace, text.at(i));
            FT_Load_Glyph(fontFace, glyph_index, FT_LOAD_DEFAULT);
            FT_Render_Glyph(fontFace->glyph, FT_RENDER_MODE_NORMAL);

            drawGlyph(imageData, fullWidth,
                      x + fontFace->glyph->bitmap_left, bearingY - fontFace->glyph->bitmap_top + line * fontSize,
                      fontFace->glyph->bitmap.width, fontFace->glyph->bitmap.rows,
                      fontFace->glyph->bitmap.buffer);

            x += fontFace->glyph->advance.x >> 6;
        }
    }
drawGlyph() - функция, которая рисует (копирует) в главный буффер.

fontSize - размер шрифта в пикселях, указанный при загрузке

Как видите, я тут вычисляю наибольший bearingY для того, чтобы узнать, на какой высоте будет baseline в битмапах. Также вычисляется ширина и высота изображения.

Ещё есть проблема: для некоторых глифов ('I', например) fontFace->glyph->bitmap_left < 0 и, если он в начале строки, то происходит fail.

Вообщем, как лучше всего рендерить текст в таком случае?

Kosyak
()

[Qt] «Активация» окна

Форум — Development

Не знаю даже как сформулировать вопрос.

Когда приложение находится не в фокусе, и ему требутся внимание пользователя (н/р появляется сообщение об ошибке) то оно начинает мигать в таскбаре и т.п.

Как вызвать такое поведение? Я и сам мог бы нагуглить, но не могу сформулировать что мне надо даже по-русски.

 

Kosyak
()

[request] Увеличить количество скриншотов на главной.

Форум — Linux-org-ru

Сейчас на главной показывается всего 3 скриншота, также есть требование к модераторам:

Внимание модераторам! Не подтверждайте сразу много скриншотов, дайте им повисеть на главной странице.

В результате, http://linux.org.ru/view-all.jsp забит неподтвержденными скринами.

 

Kosyak
()

[игры] Есть тут игроки в Spring RTS?

Форум — Talks

subj.

Больше всего мне нравятся моды Balanced Annihilation (классика) и BA Chicken Defence (типо продвинутого tower-defenc'а).

ИМХО, самая адекватная игрушка под Linux.

Для тех кто в танке:

Изначально Spring был создан в 2004 году в качестве ремейка древней (относительно) игрушки Total Annihilation

В следствии удачной архитектуры теперь это:

Spring is a project aiming to create a new and versatile RTS Engine. It features:

  • Open source (GPLv2).
  • Multi-plattform (Windows & Linux, MacOSX in progress).
  • Written in C++, using OpenGL, OpenAL, FreeType2, DevIL, SDL, GLEW, boost, 7zip, Lua and streflop.
  • Very extensive Lua interface, allowing gameplay changes and custom (G-)UIs.
  • Large battles limited only by the power of your computer; support for up to 30000 units and up to 250 players.
  • Full 3D combat in land, sea and air, with realistic weapon trajectories (physics simulation engine).
  • Full featured lobby clients to easily play multiplayer games on LAN or online, with hundreds of players just waiting for you at any time. Including automatic game and map downloading, chat, friends list etc.
  • Complex 3rd party Skirmish AIs (Bots), supporting special game types and many Spring games and mods. They can be coded in Lua, C, C++, all JVM languages (eg. Java), and more languages can be added. Several camera modes, allowing for anything to be viewed from almost any angle.
  • A powerful UI designed to minimize unnecessary micromanagement that is easily extensible via a Lua API.
  • A lot of third party widgets to improve the GUI, the gameplay and the visuals.
  • Many different Games, made just for Spring. Hundreds of large and highly detailed maps in which to wage those battles in full 3D, with deformable terrain, forest fires, dynamic and reflective bump mapped water, and custom skies.

Сайт: http://springrts.com

Скриншоты тут

Трейлеры: 1 2

P.S. Просьба пользователям открытых видеокартных дров и слабых процессоров не волноваться, т.к. моя машина (Core 2 Duo E6550 2.33GHz/GeForce 9800GTX 512MB/2048 MB RAM (кажется так игродрочеры пишут?) с «Кактусом») под конец баталии (несколько тысяч юнитов с каждой стороны) помирает.

 

Kosyak
()

[qt] Численный индекс в QMap

Форум — Development

Есть некая своя модель, наследованная от QAbstractTableModel.

Данные у меня хранятся в QMap<QString, CUser *>, и выдаются наружу примерно вот так

CUser * User = Users.at( Users.keys().at( index.row() ) );
Всё вроде хорошо, т.к. ключи в QMap всегда отсортированны.

Проблема в том, что у меня в модель данные переодически добавляются из внешнего источника, и, чтобы View/QSortFilterProxyModel работали нормально, требуется найти, в какую позицию (строку) в QMap будет вставляться значение. В линуксе всё прекрасно работает так:

InsertRow = qLowerBound(Users.keys(), NewUsername) - Users.keys().begin();
Но на Windows в InsertRow всегда полная каша.

Как найти численный индекс в QMap по ключу? Или может быть мне всё сделать по другому?

P.S. без QMap не получится никак...

 

Kosyak
()

[анабиоз] kwallet и svn

Форум — Talks

Решил сейчас закоммитить изменения в репозиторий svn, набрал как обычно svn ci. И тут ВНЕЗАПНО мне вываливается окошко kwallet с вопросом «Позволять доступ приложению svn?», 0_o, ладно, согласился, ввел имя и пароль от репозитория - коммит без проблем отправился. Теперь у меня svn запрашивает пароль из kwallet.

Это что-то в svn допилили или кдеешники постарались?

Kosyak
()

Проблема с USB<->IDE/SATA боксом

Форум — Linux-hardware

Есть внешний USB бокс для IDE/SATA дисков на чипе JMicron JM20336:

[kosyak@knetbook ~]$ cat /proc/scsi/usb-storage/26
   Host scsi26: usb-storage
       Vendor: JMicron
      Product: JM20336 SATA, USB Combo
Serial Number: 318888888888
     Protocol: Transparent SCSI
    Transport: Bulk
       Quirks:
[kosyak@knetbook ~]$ lsusb
Bus 004 Device 002: ID 03f0:2a1d Hewlett-Packard
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 002: ID 5986:0182 Acer, Inc
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 022: ID 152d:2336 JMicron Technology Corp. / JMicron USA Technology Corp. Hard Disk Drive
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
При подключении получаем это:
usb 1-1: new high speed USB device using ehci_hcd and address 18
usb 1-1: configuration #1 chosen from 1 choice
scsi22 : SCSI emulation for USB Mass Storage devices
usb-storage: device found at 18
usb-storage: waiting for device to settle before scanning
scsi 22:0:0:0: Direct-Access 
  ST360021 A                     PQ: 0 ANSI: 2 CCS
sd 22:0:0:0: Attached scsi generic sg1 type 0
usb-storage: device scan complete
sd 22:0:0:0: [sdb] 117231408 512-byte logical blocks: (60.0 GB/55.8 GiB)
sd 22:0:0:0: [sdb] Write Protect is off
sd 22:0:0:0: [sdb] Mode Sense: 00 38 00 00
sd 22:0:0:0: [sdb] Assuming drive cache: write through
sd 22:0:0:0: [sdb] Assuming drive cache: write through
 sdb: sdb1 sdb2 sdb3
sd 22:0:0:0: [sdb] Assuming drive cache: write through
sd 22:0:0:0: [sdb] Attached SCSI disk
И через ~15 секунд:
usb 1-1: reset high speed USB device using ehci_hcd and address 18
usb 1-1: USB disconnect, address 18
sd 22:0:0:0: Device offlined - not ready after error recovery
sd 22:0:0:0: [sdb] Unhandled error code
sd 22:0:0:0: [sdb] Result: hostbyte=0x05 driverbyte=0x00
sd 22:0:0:0: [sdb] CDB: cdb[0]=0x28: 28 00 02 54 28 bf 00 00 08 00
end_request: I/O error, dev sdb, sector 39069887
__ratelimit: 1 callbacks suppressed
Buffer I/O error on device sdb1, logical block 39069824
Buffer I/O error on device sdb1, logical block 39069825
Buffer I/O error on device sdb1, logical block 39069826
Buffer I/O error on device sdb1, logical block 39069827
Buffer I/O error on device sdb1, logical block 39069828
Buffer I/O error on device sdb1, logical block 39069829
Buffer I/O error on device sdb1, logical block 39069830
Buffer I/O error on device sdb1, logical block 39069831
sd 22:0:0:0: rejecting I/O to offline device
sd 22:0:0:0: rejecting I/O to offline device
sd 22:0:0:0: rejecting I/O to offline device
sd 22:0:0:0: rejecting I/O to offline device
sd 22:0:0:0: rejecting I/O to offline device
sd 22:0:0:0: rejecting I/O to offline device
sd 22:0:0:0: rejecting I/O to offline device
sd 22:0:0:0: rejecting I/O to offline device
blkid[20241]: segfault at 3c ip b76c99e2 sp bf8af1a0 error 4 in libblkid.so.1.1.0[b76b8000+19000]
blkid[20240]: segfault at 3c ip b76ce9e2 sp bfeca0e0 error 4 in libblkid.so.1.1.0[b76bd000+19000]
usb 1-1: new high speed USB device using ehci_hcd and address 19
usb 1-1: configuration #1 chosen from 1 choice
Ну а потом всё повторяется. Ядро:
Linux knetbook 2.6.32-ARCH #1 SMP PREEMPT Tue Feb 9 14:46:08 UTC 2010 i686 Intel(R) Atom(TM) CPU N270 @ 1.60GHz GenuineIntel GNU/Linux
Бокс работал на ядре до 30 включительно, потом перестал. Пробовал поставить в Арче LTS-ядро (2.6.28) - тоже не работает! Баг также проявляется на OpenSUSE и Debian. Бокс спокойно работает на винде (проверял!). Очевидно, что ядро отключает устройство, но почему?

Kosyak
()

[qt][l10n] Что православнее?

Форум — Development

Есть проект на qt c локализацией (qm - файлы). Куда лучше девать файлы локалицации при установке: в ${INSTALL_PREFIX}/share/${APP_NAME}/i18n/ или во внутренние ресурсы программы? А может комбинированный метод? Само приложение кроссплатформенное (Linux/Mac/Windows).

 ,

Kosyak
()

[dd-wrt] IGMP multicast и WAN

Форум — Admin

Есть роутер Asus RT-N16 c прошивкой dd-wrt (13575M) и ADSL-модем с IPTV. Модем настроен бриджем и PPPoE поднимается на роутере.

Два дня пытаюсь настроить два этих куска железа.

Если воткнуть модем в LAN порт, то иптв отлично роботает (Интернеты, конечно, нет, т.к. PPPoE поднимается только через WAN, х.з. почему). Если втыкать в WAN, то интернеты работают, но мультикаст WAN<->LAN не проходит. При этом в файерволле мультикаст разрешен.

В настройках WAN есть галочка «Включить порт в маршрутиризацию» (включает WAN в мост с LAN), с ней тоже ИПТВ работает, но она доступна только при выключенной авторизации. Пробовал выделить один порт в отдельный vlan и связать мостом с vlan2 (WAN) - ни PPPoE, ни IPTV.

На форуме dd-wrt мне ничего не ответили. По идее всё должно работать «изкаробки», но как обычно в opensource - Х@Й тебе. Есть предположение, что igmprt не работает, но в /tmp/igmpproxy.conf:

quickleave
phyint ppp0 upstream  ratelimit 0  threshold 1
phyint br0 downstream  ratelimit 0  threshold 1
phyint eth0 disabled
phyint eth1 disabled
phyint etherip0 disabled
phyint vlan0 disabled
phyint vlan1 disabled
phyint vlan2 disabled
phyint vlan3 disabled
phyint br1 disabled
phyint lo disabled
Кто-нибудь сталкивался с такой ситуацией?

 

Kosyak
()

[покупка] Asus RT-N16

Форум — Talks

Вот присмотрел себе роутер для дома - http://www.asus.com/product.aspx?P_ID=WAa6AQFncrceRBEo как всегда проблема - где купить? Даже в default-city он в малых количествах, не то что в родном НСКе. Есть ли у кого на примете хороший забугорный интернет-магазин?

P.S. Есть карта VISA (Classic).

 

Kosyak
()

[неосилятор][C++]Библиотека для работы со строками

Форум — Development

Требуется библиотека, которая предоставляет класс строки похожий на QString в Qt. Основные требования:

1)Кроссплатформенность (gcc, mingw, msvc)

2)Внутренняя кодировка для хранения строк - utf8 + поддержка конвертирования в ucs-4, std::wstring, локальная кодировка.

3)Аналоги sprintf и операторы сравнения, +

Пробовал сделать велосипед сам на libiconv, он даже работал на gcc и mingw, но c++ майкрософта оказался круче моего и деструктор строки вызывался дважды...

Можно конечно использовать QtCore но это слишком толсто....

 ,

Kosyak
()

Получения информации из CDDA

Форум — Development

Как можно получить теги (Исполнитель, Альбом и т.д) из Аудио CD ? cdparanoya выиаскивать теги вроде не умеет, а амарок, например, спокойно вытаскивает. Как можно проще всего это сделать? В сторону какой либы/программы копать? (C++)

Kosyak
()

[Qt]Поточная загрузка изображение

Форум — Development

Есть некоторая функция (LoadImage(void *p)) которая работает в отдельном потоке и (достаточно медленно) загружает в подготовленную область память (p) изображение в RGB888. Требуется отображение загруженной части картинки в реальном времени (Не важно через QGraphicsView или напрямую на виджете). В какую сторону мне копать?

 

Kosyak
()

Bubble Breaker

Форум — Games

Кто знает аналог Windows Mobile - игры Bubble Breaker под линукс?

Kosyak
()

RoverPC Q7 (QiGi i9)

Форум — Linux-hardware

Стал счастливым обладателем коммуникатора ровер ку7. Он на марвел пха270. Сразу стало интересно, можно ли на него поставить андроид хотя-бы. Про QiGi i9 нашел что-то про демо видео. И много на китайском... Насколько я понимаю, андроид держит этот чипсет. Плюс на лоре слышал про порт убута на эту платформы. Кто-нибудь знает чтонибудь по теме?

Kosyak
()

Вопрос по (C)LFS и по линуксу вообще

Форум — General

Решил попробовать собрать CLFS. На этапе сборки системы (на bash) столкнулся с проблемой: не видит libncursesw.so.5. После копания обнаружил, что bash пытается загрузить библу из /tools/lib (временная система) а не из /{,usr/}lib/. Видимо где-то что-то забыл. Какой пакет отвечает за поиск библиотек? coreutils glibc или binutils?

Kosyak
()

RSS подписка на новые темы