Здравствуйте, funikov, Вы писали:
F>10 лет назад сталкивался с Дельфи, там был какой-то TCanvas(или это было в С++ билдере? ), это всерьез использовать было нельзя, феерически тормознутая штука, не знаю, изменилось ли там что-то.
Кто ж его использует? Обычный битмап или секция и bitblt. Если данных слишком много, то прореживать. Визуализация 50Мб данных очень плавно происходит.
1. Попиксельно — пройденный этап. Сейчас делаю так
for iy:=0 to Height-1 do begin
TrgLine:=res.ScanLine[iy];
for ix:=0 to Width-1 do
TrgLine[ix]:=...........;
end;
BitBlt(Canvas.Handle, 0,0,Width,Height, res.Canvas.Handle,0,0, SRCCOPY);
Я правильно понимаю, что это все, что можно выжать из дельфи без дополнительных средств ?
2. Что технически ogl и dx примерно равноценны для меня, я уже понял. Меня интересуют 2 вопроса:
— что проще освоить
— с чем меньше гемора при распространении.
Здравствуйте, Тимофей, Вы писали:
Т> Я правильно понимаю, что это все, что можно выжать из дельфи без дополнительных средств ?
Зависит от того что выводится. Если данных много, то прореживать. Если попиксельная обработка, то MMX вам в помощь.
От языка программирования тут не многое зависит, главное правильная оптимизация.
Т>2. Что технически ogl и dx примерно равноценны для меня, я уже понял. Меня интересуют 2 вопроса: Т> — что проще освоить Т> — с чем меньше гемора при распространении.
— Проще DX, подробнейшая документация и куча примеров. Готовые хидеры.
— Гемора меньше с DX7, хотя я давно уже сижу на DX9 и никто не жаловался.
Если честно, то от DX и OpenGL вы существенного прироста быстродействия не получите.
У вас проблема не в доступе к видеопамяти, а в алгоритме отрисовки или обработки данных.
Здравствуйте, Тимофей, Вы писали:
Т>Всем привет!
Т>Написал программу на дельфи. Много вывода графики на экран, не тянет. Нужно ускорять. Т>Как я понимаю, выбор невелик — opengl или directx — не знаю ни того ни другого, Т>нужно что-то выбрать для освоения.
Т>Какое приложение удобнее распространять и поддерживать?
GDI+ может? gdiplus.dll за собой таскать в дистрибутиве. Книга. См. главу про GDI+
Здравствуйте, Тимофей, Вы писали:
Т>1. Попиксельно — пройденный этап. Сейчас делаю так
а что в этом коде изменится от перехода на dx? или ты считаешь что это такая волшебная палочка, которая твой попиксельный код переведёт под gpu и он взлетит без крыльев?
Здравствуйте, Тимофей, Вы писали:
Т>1. Попиксельно — пройденный этап. Сейчас делаю так Т> for iy:=0 to Height-1 do begin Т> TrgLine:=res.ScanLine[iy]; Т> for ix:=0 to Width-1 do Т> TrgLine[ix]:=...........; Т> end; Т> BitBlt(Canvas.Handle, 0,0,Width,Height, res.Canvas.Handle,0,0, SRCCOPY);
Т> Я правильно понимаю, что это все, что можно выжать из дельфи без дополнительных средств ?
Можно сдеалать ещё быстрее, выжать несколько тактов на пиксель, но вопрос в другом, а надо ли рисовать столько ТОЧЕК?
Сможет ли пользователь воспринять так много информации? Может имеет смысл делать какую-то агрегацию результатов, групировать точки в какие-то более осмысленные примитивы итд. Тогда возможны будут и аппаратные и алгоритмические ускорения.
Не используй OpenGL. Причина банальна. Он есть не на всех компютерах. При установке WindowsXP она по умолчанию ставит свои драйвера для видеокарты, без поддержки OpenGL. Как с новыми системами — не знаю.
При использовании DirectX определись, нужна ли тебе прозрачность. Если нет можно использовать хоть DirectDraw(DirectX 7), если нужна, тогда можно будет использовать DirectGraphics и трансвормированный формат вершин(в екранных координатах).
Если посмотрите в исх.код Scanline, то удивитесь (GgiFlush etc.).
Потому лучше выкинуть все TBitmap и проч. а (взять хидер к GDI)
создать DIB функцией GDI, получить прямой доступ в массиву байтов
и устанавливать пикселы напрямую. Для этого надо изучить структуру DIB(изображение перевернуто и выравнивание).
Но это того стоит.
p.s. где взять хидеры не в курсе, использую C++ и таких проблем не знаю, программы — графика,
отрисовка десятков тысяч примитивов и битмапов.
Т>1. Попиксельно — пройденный этап. Сейчас делаю так Т> for iy:=0 to Height-1 do begin Т> TrgLine:=res.ScanLine[iy]; Т> for ix:=0 to Width-1 do Т> TrgLine[ix]:=...........; Т> end; Т> BitBlt(Canvas.Handle, 0,0,Width,Height, res.Canvas.Handle,0,0, SRCCOPY);
Здравствуйте, Polarizer, Вы писали:
P>Здравствуйте, Тимофей, Вы писали:
P>Если посмотрите в исх.код Scanline, то удивитесь (GgiFlush etc.). P>p.s. где взять хидеры не в курсе, использую C++ и таких проблем не знаю, программы — графика, P>отрисовка десятков тысяч примитивов и битмапов.
Да уж, делфовая реализация достаточно тормозная, но это расплата за VCL.
Хидеры нигде искать не надо, все есть в модуле graphics.
Здравствуйте, Тимофей, Вы писали:
Т>Всем привет!
Т>Написал программу на дельфи. Много вывода графики на экран, не тянет. Нужно ускорять. Т>Как я понимаю, выбор невелик — opengl или directx — не знаю ни того ни другого, Т>нужно что-то выбрать для освоения.
Т>Какое приложение удобнее распространять и поддерживать?
Здравствуйте, Turyst, Вы писали:
T>Здравствуйте, Тимофей, Вы писали:
T>Не используй OpenGL. Причина банальна. Он есть не на всех компютерах. При установке WindowsXP она по умолчанию ставит свои драйвера для видеокарты, без поддержки OpenGL. Как с новыми системами — не знаю. T>При использовании DirectX определись, нужна ли тебе прозрачность. Если нет можно использовать хоть DirectDraw(DirectX 7), если нужна, тогда можно будет использовать DirectGraphics и трансвормированный формат вершин(в екранных координатах).
Как обстоит дело с версиями DirectX на разных системах? Если я не ошибаюсь, то при установке SP2 на Windows XP на системе поселялся DirectX9. В Vista стоит DirectX10, а в Windows 7 стоит DirectX11. Но значит ли все это, что и в Висте и в Вин7 есть DirectX9? Или каждая последующая версия DirectX не имеет ничего общего с предыдущими версиями?
Здравствуйте, spion_007, Вы писали:
_>Как обстоит дело с версиями DirectX на разных системах? Если я не ошибаюсь, то при установке SP2 на Windows XP на системе поселялся DirectX9. В Vista стоит DirectX10, а в Windows 7 стоит DirectX11. Но значит ли все это, что и в Висте и в Вин7 есть DirectX9? Или каждая последующая версия DirectX не имеет ничего общего с предыдущими версиями?
У меня в перемешку используется 7 и 9 версия. Под чистой Вистой и Семеркой идет без проблем.
Здравствуйте, icezone, Вы писали:
_>>Как обстоит дело с версиями DirectX на разных системах? Если я не ошибаюсь, то при установке SP2 на Windows XP на системе поселялся DirectX9. В Vista стоит DirectX10, а в Windows 7 стоит DirectX11. Но значит ли все это, что и в Висте и в Вин7 есть DirectX9? Или каждая последующая версия DirectX не имеет ничего общего с предыдущими версиями?
I>У меня в перемешку используется 7 и 9 версия. Под чистой Вистой и Семеркой идет без проблем.
А у меня игрушки под чистой семеркой не заработали. Пришлось ставить dx9 отдельно. Так что тут еще вопрос.
Здравствуйте, Allix, Вы писали:
A>Здравствуйте, icezone, Вы писали:
_>>>Как обстоит дело с версиями DirectX на разных системах? Если я не ошибаюсь, то при установке SP2 на Windows XP на системе поселялся DirectX9. В Vista стоит DirectX10, а в Windows 7 стоит DirectX11. Но значит ли все это, что и в Висте и в Вин7 есть DirectX9? Или каждая последующая версия DirectX не имеет ничего общего с предыдущими версиями?
I>>У меня в перемешку используется 7 и 9 версия. Под чистой Вистой и Семеркой идет без проблем. A>А у меня игрушки под чистой семеркой не заработали. Пришлось ставить dx9 отдельно. Так что тут еще вопрос.
Ни одна не заработала? Спрашиваю, потому, что может криво написано было... Там можно конкретно задать версию использованного DX, а можно инициализировать последнюю версию...
Здравствуйте, Turyst, Вы писали:
T>Ни одна не заработала? Спрашиваю, потому, что может криво написано было... Там можно конкретно задать версию использованного DX, а можно инициализировать последнюю версию...
Ну сам понимаешь, как только первая же не заработала (Spore) я скачал dx9 Так что не проверял