Здравствуйте, Тимофей, Вы писали:
Т>Всем привет!
Т>Написал программу на дельфи. Много вывода графики на экран, не тянет. Нужно ускорять. Т>Как я понимаю, выбор невелик — opengl или directx — не знаю ни того ни другого, Т>нужно что-то выбрать для освоения.
Т>Какое приложение удобнее распространять и поддерживать?
никого не слушай, находи dxsdk 8.1 или 9.0 самую раннюю, и используй.
только не используй при компиляции последние версии, они будут от юзвера требовать новую версию dx
Здравствуйте, Тимофей, Вы писали:
Т>Всем привет!
Т>Написал программу на дельфи. Много вывода графики на экран, не тянет. Нужно ускорять. Т>Как я понимаю, выбор невелик — opengl или directx — не знаю ни того ни другого, Т>нужно что-то выбрать для освоения.
Т>Какое приложение удобнее распространять и поддерживать?
Чего думать-то? Ясно дело — OpenGL. Особенно если кроме дельфи (ObjectPascal) вы не знаете других языков.
C (си) интерфейс OpenGL будет куда понятнее, к тому же есть готовые .pas файлы с описанием функций/процедур.
Ну и в завершении — кроссплаформенность. На будущее. К тому же опыт на OpenGL чаще востребован с т.з. будущего трудоустройства.
Вот такие мои аргументы.
Здравствуйте, Тимофей, Вы писали:
Т>Всем привет!
Т>Написал программу на дельфи. Много вывода графики на экран, не тянет. Нужно ускорять. Т>Как я понимаю, выбор невелик — opengl или directx — не знаю ни того ни другого, Т>нужно что-то выбрать для освоения.
Т>Какое приложение удобнее распространять и поддерживать?
Для начала попробуйте рисовать не на экран, а в память, а потом уже готовое выводите на экран. Заодно и проблему смаргивания, мерцания, и прочих артефактов прорисовки решите раз и навсегда.
Ни OpenGL, ни DirectX для шаровары крайне нежелетелен без особых на то показаний, типа 3D-графики, видео или неких специфично игровых потребностей.
Здравствуйте, Тимофей, Вы писали:
I>>Ни OpenGL, ни DirectX для шаровары крайне нежелетелен без особых на то показаний, типа 3D-графики, видео или неких специфично игровых потребностей.
Т>Вот это мне интересно. Почему? Вроде как они оба составная часть Windows? Программа все равно виндовая, это рынок не сузит. Т>Новых наворотов мне не нужно, 3D там нет, просто быстро выводить очень много точек напрямую в видеопамять.
То, что вы называете "составной частью Windows" — лишь часть подсистемы (да и то, вместе с Windows посталяется лишь базовый вариант; полный DirectX нужно накатывать отдельно (к тому же он постоянно обновляется); насчёт OpenGL не помню); остальное находится в драйверах устройств, качество которых год от года, увы, не улучшается; связавшись с DirectX или OpenGL, вы можете обречь себя на постоянную борьбу за совместимость с зоопарком устройств и драйверов разных производителей и годов выпуска путём непрерывного строгания workaround'ов для вновь появлющихся не по вашей вине багов. Зависит от задачи, конечно, но потенциал возможных неприятностей вы должны оценить.
А "быстро выводить очень много точек напрямую в видеопамять" в общем случае медленнее, чем выводить их в основную память и потом единственным блитом отправлять в видеобуфер.
Здравствуйте, Тимофей, Вы писали:
Т>1. Попиксельно — пройденный этап. Сейчас делаю так
а что в этом коде изменится от перехода на dx? или ты считаешь что это такая волшебная палочка, которая твой попиксельный код переведёт под gpu и он взлетит без крыльев?
Здравствуйте, icezone, Вы писали:
_>>Как обстоит дело с версиями DirectX на разных системах? Если я не ошибаюсь, то при установке SP2 на Windows XP на системе поселялся DirectX9. В Vista стоит DirectX10, а в Windows 7 стоит DirectX11. Но значит ли все это, что и в Висте и в Вин7 есть DirectX9? Или каждая последующая версия DirectX не имеет ничего общего с предыдущими версиями?
I>У меня в перемешку используется 7 и 9 версия. Под чистой Вистой и Семеркой идет без проблем.
А у меня игрушки под чистой семеркой не заработали. Пришлось ставить dx9 отдельно. Так что тут еще вопрос.
Здравствуйте, gear nuke, Вы писали:
Т>>Новых наворотов мне не нужно, 3D там нет, просто быстро выводить очень много точек напрямую в видеопамять.
GN>А значит OGL ни к чему. Для этого хватит старого интерфейса IDirectDraw7, который есть практически в любой системе. Примеров в сети должн быть достаточно (только рисовать не сразу в видеопамять, а в бэкбуфер, но это детали)
А всё равно точку в обычном массиве обычного битмапа гораздо быстрее самому поставить, чем вызывать функцию DirectDraw (OpenGL, GDI, GDI+, whatever). Да и проще, пожалуй. Юзанье для такой задачи DirectX напоминает недавнюю отправку тяжёлого атомного ракетного крейсера на борьбу с пиратами на резиновых лодках.
Здравствуйте, spion_007, Вы писали:
_>Как обстоит дело с версиями DirectX на разных системах? Если я не ошибаюсь, то при установке SP2 на Windows XP на системе поселялся DirectX9. В Vista стоит DirectX10, а в Windows 7 стоит DirectX11. Но значит ли все это, что и в Висте и в Вин7 есть DirectX9? Или каждая последующая версия DirectX не имеет ничего общего с предыдущими версиями?
У меня в перемешку используется 7 и 9 версия. Под чистой Вистой и Семеркой идет без проблем.
Написал программу на дельфи. Много вывода графики на экран, не тянет. Нужно ускорять.
Как я понимаю, выбор невелик — opengl или directx — не знаю ни того ни другого,
нужно что-то выбрать для освоения.
Какое приложение удобнее распространять и поддерживать?
Здравствуйте, Ippi, Вы писали:
I>Здравствуйте, Тимофей, Вы писали:
Т>>Всем привет!
Т>>Написал программу на дельфи. Много вывода графики на экран, не тянет. Нужно ускорять. Т>>Как я понимаю, выбор невелик — opengl или directx — не знаю ни того ни другого, Т>>нужно что-то выбрать для освоения.
Т>>Какое приложение удобнее распространять и поддерживать?
I>Для начала попробуйте рисовать не на экран, а в память, а потом уже готовое выводите на экран. Заодно и проблему смаргивания, мерцания, и прочих артефактов прорисовки решите раз и навсегда.
I>Ни OpenGL, ни DirectX для шаровары крайне нежелетелен без особых на то показаний, типа 3D-графики, видео или неких специфично игровых потребностей.
Здравствуйте, Ippi, Вы писали:
I>Для начала попробуйте рисовать не на экран, а в память, а потом уже готовое выводите на экран. Заодно и проблему смаргивания, мерцания, и прочих артефактов прорисовки решите раз и навсегда.
Я так и делаю. Все равно медленно
I>Ни OpenGL, ни DirectX для шаровары крайне нежелетелен без особых на то показаний, типа 3D-графики, видео или неких специфично игровых потребностей.
Вот это мне интересно. Почему? Вроде как они оба составная часть Windows? Программа все равно виндовая, это рынок не сузит.
Новых наворотов мне не нужно, 3D там нет, просто быстро выводить очень много точек напрямую в видеопамять.
I>А "быстро выводить очень много точек напрямую в видеопамять" в общем случае медленнее, чем выводить их в основную память и потом единственным блитом отправлять в видеобуфер.
Кстати, для справки — пульнуть точку c нужными координатами в 32-битный DIB — дело порядка десятка тактов CPU. Сотен миллионов точек в секунду вам достаточно?
Здравствуйте, Ippi, Вы писали:
I>То, что вы называете "составной частью Windows" — лишь часть подсистемы (да и то, вместе с Windows посталяется лишь базовый вариант; полный DirectX нужно накатывать отдельно (к тому же он постоянно обновляется); насчёт OpenGL не помню);
С каких это пор полный DirectX надо накатывать отдельно? Он с WinXP идет в базе, для 2D графики никаких серъезных изменений нет.
Здравствуйте, traveler, Вы писали:
T>Чего думать-то? Ясно дело — OpenGL. Особенно если кроме дельфи (ObjectPascal) вы не знаете других языков. T>C (си) интерфейс OpenGL будет куда понятнее, к тому же есть готовые .pas файлы с описанием функций/процедур. T>Ну и в завершении — кроссплаформенность. На будущее. К тому же опыт на OpenGL чаще востребован с т.з. будущего трудоустройства. T>Вот такие мои аргументы.
Серьезная заявка. Каким боком OpenGL поможет в 2D графике? Чем он лучше и понятнее родного DirectX?
Здравствуйте, icezone, Вы писали:
I>>То, что вы называете "составной частью Windows" — лишь часть подсистемы (да и то, вместе с Windows посталяется лишь базовый вариант; полный DirectX нужно накатывать отдельно (к тому же он постоянно обновляется); насчёт OpenGL не помню);
I>С каких это пор полный DirectX надо накатывать отдельно? Он с WinXP идет в базе, для 2D графики никаких серъезных изменений нет.
Для чего же тогда они DirectX redistributables выпускают (в т.ч. и под XP), да ещё и обновляют их несколько раз в год?
Здравствуйте, Ippi, Вы писали:
I>Для чего же тогда они DirectX redistributables выпускают (в т.ч. и под XP), да ещё и обновляют их несколько раз в год?
Это обновления. Для WinXP в базе DX8, для WinXPSP2 в базе DX9, для Vista DX10. Не смотрели чем занимается их инсталлятор?
Он проверяет текущие версии файлов и обновляет только при необходимости. Удалить DX из винды практически невозможно.
В части DirectDraw начиная с 8 версии изменений не обнаружено.
А вот OpenGL как раз таки и не установлен в чистой винде, он устанавливается вместе с драйверами видеокарты.
Здравствуйте, Тимофей, Вы писали:
Т>Новых наворотов мне не нужно, 3D там нет, просто быстро выводить очень много точек напрямую в видеопамять.
А значит OGL ни к чему. Для этого хватит старого интерфейса IDirectDraw7, который есть практически в любой системе. Примеров в сети должн быть достаточно (только рисовать не сразу в видеопамять, а в бэкбуфер, но это детали)
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, Ippi, Вы писали:
I>Юзанье для такой задачи DirectX напоминает недавнюю отправку тяжёлого атомного ракетного крейсера на борьбу с пиратами на резиновых лодках.
Может его направили, чтобы уже наконец уничтожить источник этой гадости в резиновых лодках?
Здравствуйте, Ippi, Вы писали:
I>А всё равно точку в обычном массиве обычного битмапа гораздо быстрее самому поставить, чем вызывать функцию DirectDraw (OpenGL, GDI, GDI+, whatever). Да и проще, пожалуй. Юзанье для такой задачи DirectX напоминает недавнюю отправку тяжёлого атомного ракетного крейсера на борьбу с пиратами на резиновых лодках.
И повторю — в бэкбуфер будет еще быстрее, из-за особенностей видеопамяти.
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
Здравствуйте, Тимофей, Вы писали:
Т>Всем привет!
Т>Написал программу на дельфи. Много вывода графики на экран, не тянет. Нужно ускорять. Т>Как я понимаю, выбор невелик — opengl или directx — не знаю ни того ни другого, Т>нужно что-то выбрать для освоения.
Т>Какое приложение удобнее распространять и поддерживать?
Найди для начала чего это у тебя оно тормозит. Чем ты пользуешься для вывода графики сейчас? GDI? Если да и это просто 2d-графика типа нарисовать линию тут, а тут точечку, то не должно ничего тормозить. Не представляю, что там можно рисовать, чтобы оно тормозило, лучши покажи кому-нибудь что ты такое там делаешь.
10 лет назад сталкивался с Дельфи, там был какой-то TCanvas(или это было в С++ билдере? ), это всерьез использовать было нельзя, феерически тормознутая штука, не знаю, изменилось ли там что-то.
opengl или directx целесообразно использовать если ты рисуешь какое-то 3d, с заливками всякими. Для 2d это целесообразно только в особых случаях.
Здравствуйте, icezone, Вы писали:
I>Здравствуйте, traveler, Вы писали:
T>>Чего думать-то? Ясно дело — OpenGL. Особенно если кроме дельфи (ObjectPascal) вы не знаете других языков. T>>C (си) интерфейс OpenGL будет куда понятнее, к тому же есть готовые .pas файлы с описанием функций/процедур. T>>Ну и в завершении — кроссплаформенность. На будущее. К тому же опыт на OpenGL чаще востребован с т.з. будущего трудоустройства. T>>Вот такие мои аргументы.
I>Серьезная заявка. Каким боком OpenGL поможет в 2D графике? Чем он лучше и понятнее родного DirectX?
Что значит каким? Самым непосредственным. Аппаратный блиттинг, со всякими альфами, фильтрацией, аффинными преобразованиями и т.д.
Но на самом деле правильно люди говорят: OpenGL и DirectX по сути одно и тоже, только с разными бантиками.
Если нужна будет кросс-платформенность (включая мобильники), то следует выбрать OpenGL, если нет — можно поизучать DirectDraw — там все просто.
А вообще, для Delphi есть готовая хрень: DelphiX называется. Смотрели такую?
Здравствуйте, traveler, Вы писали:
T>Что значит каким? Самым непосредственным. Аппаратный блиттинг, со всякими альфами, фильтрацией, аффинными преобразованиями и т.д. T>Но на самом деле правильно люди говорят: OpenGL и DirectX по сути одно и тоже, только с разными бантиками. T>Если нужна будет кросс-платформенность (включая мобильники), то следует выбрать OpenGL, если нет — можно поизучать DirectDraw — там все просто. T>А вообще, для Delphi есть готовая хрень: DelphiX называется. Смотрели такую?
Почитайте ТС, ему не нужна фильтрация, ему нужен быстрый вывод графики. Очевидно массивы большие используются для построения графиков. Про различия OpenGL и DX мне рассказывать не надо, я еще с DX5 начинал. Тогда проблем с OpenGL было гораздо больше. DelphiX мне нафиг не нужен, у меня стандартные хидеры. Это вы ТС'у посоветуйте.
Хотя честно говоря я не понял зачем ему вообще понадобилось что-то вместо GDI. Подозреваю, что он не использует сканлайны,
а закрашивает попиксельно — отсюда и тормоза.
Здравствуйте, 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. Попиксельно — пройденный этап. Сейчас делаю так Т> 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 не имеет ничего общего с предыдущими версиями?
Здравствуйте, 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 Так что не проверял