IPB
ЛогинПароль:

> Внимание!

1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным. В описании темы указываем язык!!!

> Арифметика указателей, АДА
TarasBer
сообщение 28.02.2011 15:35
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Я не понял, как именно надо использовать пакет System.Storage_Elements
Итак, задача такая, у меня есть тип

type TColor is new Interfaces.Unsigned_32;
type AColor is access all TColor;

type TBitmap is new Controlled with record
Handle : HBITMAP;
DC : HDC;
Mem : aliased AColor; -- или удобнее aliased PVOID?
SizeX, SizeY, Depth : integer;
end record;


У него есть метод:

function Get_Pixel(B: TBitmap; X, Y: integer) return AColor;
-- возвращает указатель на пиксел с данными координатами
pragma Inline(Get_Pixel);

function Get_Pixel(B: TBitmap; X, Y: integer) return AColor is
begin
Assert((X >= 0) and (X < B.SizeX) and (Y >= 0) and (Y < B.SizeY));
return B.Mem + X + Y * B.SizeX;
end;



Последняя функция не компилируется. Что надо сделать, чтобы она скомпилировалась?
Кстати, здесь мне очень важна скорость, с точностью до лишних тактов и копирований чисел туда-сюда.


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
TarasBer
сообщение 1.03.2011 13:25
Сообщение #2


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


> В идеале я бы запрещал даже использование того блока памяти, который был выделен CreateDIBSection, любыми НЕ WinAPI-шными функциями, негоже руками туда лазить.

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

> Нужна скорость в ущерб безопасности - тебе в сторону С.

Да, нужна. Си не нужен, там опасные вещи можно натворить совершенно случайно. Нужна осознанная возможность делать некоторые операции. Пусть даже для этого надо написать что-то типа Pragma Unsafe(GetPixel).

> Ты пробовал свои программы запускать на 64-битных ОСях? На WinXP x64 Edition, например? Я уж не спрашиваю про Win7...

Не, у знакомых ни у кого нету. Вот через WINE под линуксом запускаются, нормально всё.

> -- только следи за границами, а то такого натворить можно...

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


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 22.07.2025 13:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"