Меню сайта |
|
|
|
Наш опрос |
|
|
|
|
Главная » Архив материалов
Я тут ударился в объединение 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
|
|
Добавлен новый совет об отрисовке куска изображения. Для ленивых здесь: Используем SetViewportFunction 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Д двиг. Пока на Blitzmax. Пока под Direct3D7. Возможно сменю компилятор. Возможно будет версия и для OpenGL. Возможно во внешней DLL. Пишу я его потому, что многих вещей в стандартных либах Blitzmax нет. Например, таких как мультитекстурирование (а это внешний анимированный хардварный альфа-канал и другие вкусности), своя прозрачность и цвет каждого вертекса, отрисовка на произвольных полигонах и прочее (хотя основные фишки уже и перечислил). Ну еще и производительность. Двиг Blitzmax жутко неоптимальный как по отрисовке, так и по ресурсам. Сам тестик я написал потому, что некоторые засомневались в том, что в моей деятельности есть смысл. Ну вот выходит прирост скорости для не самого оптимального еще варианта, около 20%. Это, считаю, существенно и показываю язык :Р Продолжение здесь: http://blitzmax.3dn.ru/load/9-1-0-8Еще хочу сказать спасибо за помощь с отимизацией расчета трансформаций квада Михаилу ака MixailV.
Просмотров: 911 |
Добавил: oxid |
Дата: 06.03.2008
|
|
Меня тут недавно осенило, что на форуме нет раздела по Blitzmax. Есть общий раздел, но он как-бы не о том. Поэтому я сделал раздел специально по Blitzmax, где можно задавать мне вопросы. А я буду старться на них отвечать по мере возможностей. Адрес раздела http://blitzmax.3dn.ru/forum/6
Просмотров: 793 |
Добавил: oxid |
Дата: 05.03.2008
|
|
Просмотров: 779 |
Добавил: oxid |
Дата: 11.02.2008
|
|
Добавил новый совет записи символов в строку, используя индексный доступ. Стандартно 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
|
|
Добавил совет по работе с многомерными массивами. Кому лень открывать всю статью, привожу его основную часть здесь: Если
мы объявили многомерный массив как массив значений (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
|
|
Добавил немного новых ссылок. Времени пока нет, скоро кое-что выложу.
Просмотров: 836 |
Добавил: oxid |
Дата: 28.11.2007
|
|
Просмотров: 787 |
Добавил: oxid |
Дата: 08.11.2007
|
|
Механизм отражения, который введен с версии 1.26 позволяет делать ссылки на тип с помощью класса TTypeId. Соответственно поправлен пункт 1.16 в статье о Неприятном в BlitzMax, ч.1 - язык.
Просмотров: 743 |
Добавил: oxid |
Дата: 16.10.2007
|
|
|
|
Форма входа |
|
|
|
Календарь новостей |
|
« Май 2024 » | Пн | Вт | Ср | Чт | Пт | Сб | Вс | | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 |
|
|
Поиск |
|
|
|
Ссылки |
|
|
|
|