|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
09.05.2008, 21:35 | #481 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Так ведь задача не стоит "во что бы то не стало использовать высокосортный бетон" ))) ...это прямой намек тогда переходить на С++, или как сам сказал "Взять к примеру какой нибудь OGL движок" - и бетон есть и уже целые конструкции.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
09.05.2008, 23:28 | #482 |
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Это уже совсем конкретика пошла ) Я имел ввиду вобщем. Разделение труда. Системное программирование это одно, прикладное другое.
К примеру OpenGL, открытая библиотека, к играм имеет прямое отношение, но ведь разрабатывать библиотеку это одно, а писать игры на ней это другое. Никто ведь не пишет для себя свою GL, а используют наработки других людей. Если даже и задаться целью написать свою графическую библиотеку (не движок, а библиотеку вроде OGL и DX) к-рая будет лучше других, то это будет основная цель, если какие-то игры и будут писаться то лишь тестовые для проверки работы библиотеки. Взять к примеру Линукс, приблизительно так он и появился. Насчет С++, я не считаю что на Delphi так уж плохо игры писать. Просто наверное так сложилось, что есть уклон в сторону С++. Многие кто начинал с Дельфи потом на Сях пишут. Может окружение сказывается, почти вся инфа на С++, надоедает переводить видимо. Сами библиотеки на С++. Кстати системщину лучше писать не на С++, а на С. Тот же автор Линукса нелицеприятно отзывался о С++ в системном программировании.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог |
10.05.2008, 15:16 | #483 |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Все верно, профи-программисты создают библиотеки, профи-игростроители пользуются ими, всем хорошо.
Просто "спортивный" интерес "можно ли обойтись без OGL и DX?" ...конечно можно, ...хочу доказать на примере нашего проекта. В связи с этим просто перебираем весь "стандарт" и выкидываем лишнее. Тысяча якорей для одной лодки - слишком много.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
10.05.2008, 18:30 | #484 |
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,691
|
|
10.05.2008, 19:56 | #485 | |
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
И как заметил mutabor - "все равно чтобы это вывелость на экран, нужно будет вызвать один из методов обновления", ...методы стандартные конечно, самый быстрый Canvas.Draw вывод в PaintBox или Image, но все ли там нужно только для вывода на экран? ...может что-то "якорит"?
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
|
10.05.2008, 23:30 | #486 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
Мне тоже хотелось бы разобраться с этим вопросом. Есть некоторые сомнения. Сейчас попробую сформулировать.
Во первых. Чтобы убрать все лишнее, можно использовать чистые вызовы API. Код:
Теперь о сомнениях. Понятно, как делать все это по правилам WinAPI. Непонятен сам внутренний механизм вывода на экран. Как это устроено. К примеру. Когда мы создаем HBitMap, мы указывает контекст устройства. Это сделано для того, чтобы были одинаковые вызовы рисования на канве и на bitMap. Я правильно рассуждаю ? Тогда почему для получения указателя на внутренний буфер GetDIBBits мы должны указывать оба хендла ? Разве HBitMap для этого недостаточно. Почему, получив Form1.Canvas.Handle мы можем скопировать с него, например, область (-10, -10, 0, 0) и там будет изображение с экрана выше и левее левого угла формы ? Да хоть весь экран получить можно. Есть сомнения насчет CreateDIBSection. Дело в том, что если создавать этот буфер в методе WM_Paint: DrawBuf.Handle:=CreateDIBSection(Ca nvas.Handle,BInfo,DIB_RGB_COLORS,Sc r,0,0); fillChar(scr^, W*H*3, C); BitBlt(DC, 0, 0, ClientRect.Right, ClientRect.Bottom, DrawBuf.Canvas.Handle, 0, 0, SRCCOPY); то C мы можем менять (например, таймером) и меняется цвет области. Если же создавать один раз - в formCreate, то первый-же вывод на экран bitBlt как бы блокирует ссылку src и fillChar(scr^ уже не работает (ошибки при этом не возникает, просто цвет не меняется). м.б. кто-то объяснит механизм - как это может быть устроено. Не в подробностях, а схему. Windows отдает нам Handle канвы, а что она при этом создает ? Пробовал порассуждать как это может устроено. Думаю, что буфер один - на весь размер экрана. Скорее всего его вообще нет - используется окно видеокарты. Handle указывает на структуру, которая хранит только координаты области внутри этого буфера и некоторые другие параметры, которые нужны для вызовов и переключатель - вывод в видеопамять или в буфер в памяти. Если буфер в памяти, то это BitMap. Вот на этот буфер GetDIBits дает нам ссылку. |
12.05.2008, 17:11 | #487 | ||
Участник клуба
Регистрация: 21.11.2007
Сообщений: 1,691
|
Цитата:
Цитата:
Теперь предложение может стоит воспользоваться Direct3D или OpenGL? На GDI всеравно не сделать быстрого вывода, а на D3D или OGL даже с кривыми руками будет быстрее. |
||
12.05.2008, 21:34 | #488 | ||
Инженер ИС
Старожил
Регистрация: 13.12.2006
Сообщений: 2,671
|
Цитата:
Цитата:
alexBlack, или я баран, или одно из двух , ...твой пример у меня так и не заработал, показывает серость формы. PS - это переменная типа TPaintStruct, DC - THandle контекст устройства, куда выводим графику. Как понял из литературы, контекст вызывается приватный BeginPaint() .. EndPaint(), чтобы он работал необходимо при регистрации класса окна указать стиль CS_OWNDC. В остальных случаях нужно выводить общий контекст: Код:
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
|
||
12.05.2008, 22:09 | #489 |
Участник клуба
Регистрация: 12.10.2007
Сообщений: 1,204
|
А может я что-то не то нагородил. Прикреплю-ка свой проект.
Там со всеми тестами (закомментированными), которые приходили в голову. Это не я придумал. Я просто взял код из VCL и убрал все лишнее, с моей точки зрения. Код:
По поводу SelectObject. По-моему он не позволяет выбрать текущий BitMap для канвы. --------------------------------- Вы меня натолкнули на одну мысль. По-крайней мере с одним вопросом из тех, что я приводил выше стало понятно. Дело в том, что DC можно получить вызовом BeginPaint только в WMPaint. Вне него нужно вызывать GetDC. Вот поэтому у меня не получалось записыватьв буфер повторно. Во вложении этого нет, но нужно переделать так: Код:
Последний раз редактировалось alexBlack; 12.05.2008 в 22:37. |
13.05.2008, 12:14 | #490 | ||
Телепат с дипломом
Старожил
Регистрация: 10.06.2007
Сообщений: 4,929
|
Цитата:
WinAPI если я не ошибаюсь для вывода графики использует gdi32.dll, то есть по идее функции описаны там. Еще я читал что в WinXP GDI не простой, а GDI+ - более навороченый, c поддержкой дополнительных форматов, с альфаканалом. По моим замерам что VCL что WinAPI выводят графику практически с одинаковой скоростью, видимо перенаправление вызова не так уж и тормозит. Это типа Вася скажи Феде пускай вагон разгрузит, если сказать Феде напрямую, вагон будет выгружен ненамного быстрей По поводу всех этих WinAPI экспериментов с контекстами и т.п. Все это написали майкрософтовцы для использования программистами. Реальный же вывод на экран, скрыт за этими функциями и объектами и нам не виден. Нам дают только кнопку. И к этой же кнопке обращается VCL. Цитата:
Основная проблема к-рую можно предвидеть уже сейчас, тормоза на слабых процессорах. Чего не было бы с поддержкой видеокарты, можно было бы нехилый запас сделать. Процессоры насколько я заметил, выводят GDI графику неадекватно, по марке не угадаешь, Атлоны старые вроде хорошо справляются.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог Последний раз редактировалось mutabor; 13.05.2008 в 12:42. |
||
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Уроки по созданию игр для новичков... | -=DeS=- | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 750 | 14.11.2017 20:26 |
Музыка программистов - как вы относитесь к АРИИ? | Весёлый Жека | Свободное общение | 46 | 10.10.2008 22:32 |
Конкурсы по созданию игр на Delphi | mutabor | Свободное общение | 0 | 15.06.2007 12:40 |
Работа по созданию ПО | remix | Фриланс | 3 | 22.04.2007 11:00 |