Blitzmax
Пятница, 03.05.2024, 02:54
Приветствую Вас Гость | RSS
 
Главная РегистрацияВход
Меню сайта
Наш опрос
Оцените скорость работы с сайтом
Всего ответов: 112
Главная » Архив материалов
Я тут ударился в объединение Blitzmax и Assembler. Получилось. В связи с этим скоро выложу статейку как интегрировать ассемблер с Blitzmax. А пока обнаружился еще один ужос - качество кода, производимого Blitzmax. Я добавил это в Неприятное в BlitzMax, ч.1 - язык по нумером 21. А для ленивых кратко здесь:

Простейшая функция:
function _RDT:long()
    return 111
endfunction

Сгенерированный Blitzmax код:
    push    ebp
    mov    ebp,esp
    sub    esp,8
    mov    edx,dword [ebp+8]
    mov    dword [ebp-8],111
    mov    dword [ebp-4],0
_3:
    mov    eax,dword [ebp-8]
    mov    dword [edx],eax
    mov    eax,dword [ebp-4]
    mov    dword [edx+4],eax
    mov    esp,ebp
    pop    ebp
    ret

Это же просто ужас. Зачем метка внутри? - она не используется! Ну это еще ладно. Зачем отнимается от указателя стека 8 в начале? Что за манипуляции с ним между BP и DX?  А вот аналогичный нормальный код, выполняющий ту-же задачу:
        push    ebp
        mov     ebp,dword[esp+8]
        mov     dword [ebp],111
        mov     dword [ebp+4],0
        pop     ebp
        ret

Просмотров: 987 | Добавил: oxid | Дата: 08.04.2008 | Комментарии (0)

Добавлен новый совет об отрисовке куска изображения.
Для ленивых здесь:

Используем SetViewport
Function DrawImageRect(img:TImage, x#, y#, rx#, ry#, rw#, rh#)
SetViewport x, y, rw, rh
DrawImage img, x - rx, x - ry
SetViewport(0, 0, GFX_WIDTH, GFX_HEIGHT)
EndFunction

Особенности: надо знать абсолютные координаты.
Недостатки: SetViewport не всеми картами поддерживается.

Адрес статьи с советами: http://blitzmax.3dn.ru/publ/3-1-0-8
Просмотров: 924 | Добавил: oxid | Дата: 23.03.2008 | Комментарии (2)

Небольшой анонсик: я потихоньку пишу 2Д двиг. Пока на Blitzmax. Пока под Direct3D7. Возможно сменю компилятор. Возможно будет версия и для OpenGL. Возможно во внешней DLL.
Пишу я его потому, что многих вещей в стандартных либах Blitzmax нет. Например, таких как мультитекстурирование (а это внешний анимированный хардварный альфа-канал и другие вкусности), своя прозрачность и цвет каждого вертекса, отрисовка на произвольных полигонах и прочее (хотя основные фишки уже и перечислил). Ну еще и производительность. Двиг Blitzmax жутко неоптимальный как по отрисовке, так и по ресурсам.
Сам тестик я написал потому, что некоторые засомневались в том, что в моей деятельности есть смысл. Ну вот выходит прирост скорости для не самого оптимального еще варианта, около 20%. Это, считаю, существенно и показываю язык :Р
Продолжение здесь: http://blitzmax.3dn.ru/load/9-1-0-8
Еще хочу сказать спасибо за помощь с отимизацией расчета трансформаций квада Михаилу ака MixailV.
Просмотров: 911 | Добавил: oxid | Дата: 06.03.2008 | Комментарии (2)

Меня тут недавно осенило, что на форуме нет раздела по Blitzmax. Есть общий раздел, но он как-бы не о том. Поэтому я сделал раздел специально по Blitzmax, где можно задавать мне вопросы. А я буду старться на них отвечать по мере возможностей.
Адрес раздела http://blitzmax.3dn.ru/forum/6
Просмотров: 793 | Добавил: oxid | Дата: 05.03.2008 | Комментарии (1)

Добавил в советы пунктик про возможность переопределения полей в предках. Вообще я юзал это как фичу. Но, поразмыслив, пришел к выводу, что это небезопасная практика. Почему - объяснил и внес это еще и в неприятное пунктом 1.20.
Ссылка в советах http://blitzmax.3dn.ru/publ/3-1-0-8#7
Ссылка в неприятном http://blitzmax.3dn.ru/publ/2-1-0-3#1.20
Просмотров: 779 | Добавил: oxid | Дата: 11.02.2008 | Комментарии (2)

Добавил новый совет записи символов в строку, используя индексный доступ. Стандартно Blitzmax это делать не позволяет.
Линк на статью: http://blitzmax.3dn.ru/publ/3-1-0-8#6
Краткое содержание:
Нормального доступа для записи к элементам строки в Blitzmax'e нет. Но выход есть. Можно получить указатель на символы строки во внутренней сруктуре строки. Сделать это можно так:
Local str$ = "Hello"
Print str

Local
p:IntPtr = IntPtr(Varptr(str))
Local
pchar:ShortPtr = ShortPtr(p[0])
pchar :+ 6
'this offset depends on String structure

pchar[0]=
Asc("H")
pchar[1]=
Asc("e")
pchar[2]=
Asc(" ")
pchar[3]=
Asc("h")
pchar[4]=
Asc("e")

Print str
Или вот так одной строкой:
Local pchar:Short Ptr = Short Ptr(Int Ptr(Varptr(str))[0]) + 6


Просмотров: 764 | Добавил: oxid | Дата: 04.02.2008 | Комментарии (0)

Добавил совет по работе с многомерными массивами.
Кому лень открывать всю статью, привожу его основную часть здесь:
Если мы объявили многомерный массив как массив значений (Local a[n,m]), а не массив массива (a[n][m]), то пройти весь массив можно не стандартным способом с вложенными циклами, а одним foreach:
Local a[2,2]
a[0,0]=1; a[0,1]=2; a[1,0]=3; a[1,1]=4
For Local i:Int = EachIn a; Print i; Next;
Из примера видно, что проход выполняется сначала по последним индексам.
Просмотров: 753 | Добавил: oxid | Дата: 28.01.2008 | Комментарии (0)

Добавил немного новых ссылок.
Времени пока нет, скоро кое-что выложу.
Просмотров: 836 | Добавил: oxid | Дата: 28.11.2007 | Комментарии (1)

Интересная статейка, решил добавить в новости: Оригинал тут http://rsdn.ru/forum/message/2722318.all.aspx Статья про кидалово крупной конторой Paragon Software разработчика. Повод для размышления есть.
Просмотров: 787 | Добавил: oxid | Дата: 08.11.2007 | Комментарии (0)

Механизм отражения, который введен с версии 1.26 позволяет делать ссылки на тип с помощью класса TTypeId. Соответственно поправлен пункт 1.16 в статье о Неприятном в BlitzMax, ч.1 - язык.
Просмотров: 743 | Добавил: oxid | Дата: 16.10.2007 | Комментарии (2)

« 1 2 3 4 »
Форма входа
Календарь новостей
«  Май 2024  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
2728293031
Поиск
Ссылки
Статистика
Copyright Oxid © 2024
Сайт создан в системе uCoz