Форум: "Игры";
Текущий архив: 2011.01.09;
Скачать: [xml.tar.bz2];
ВнизDirectDraw - Поверхности Найти похожие ветки
← →
max_ (2007-08-21 11:20) [0]Всем привет. У меня такой вопрос - как лучше сделать, одну большую поверхность или кучу маленьких (наверное все-таки большую), и еще вопрос, я читал, что лучше не создавать внеэкранные поверхности больше первичной (главной)?
-------------------------------------------
Спасибо
← →
@!!ex © (2007-08-21 14:31) [1]DirectDraw вроде бы изжыл себя...
Сейчас, елси не ошибаюсь все делаеться через Direct3D.
← →
homm © (2007-08-21 19:36) [2]Просто рассуждения, не подкрепленные документально.
Много мелких — лишний расход памяти на служебные структуры, но возможна в карточках есть какая-то оптимизация, если блитится поверхность целеком, а не кусочек.
← →
max_ (2007-08-21 19:46) [3]
> Сейчас, елси не ошибаюсь все делаеться через Direct3D
c 2D, на мой взгяд, проще работать в DirectDraw"е
← →
@!!ex © (2007-08-21 20:40) [4]> [3] max_ (21.08.07 19:46)
Не понимаю, что может быть проще. чем нарисовать текстурированный полик... а в 2Д большего и не надо.
По сабжу - реально не знаб ответа, работал с DD только один раз и хороших впечатлений о нем не осталось.
← →
homm © (2007-08-21 20:49) [5]> [3] max_ (21.08.07 19:46)
В DD некоторые веши реализовываються либо очень сложно, либо очень медленно, либо и так и так сразу.
Яркий пример — полупрозрачный блиттинг. А в 3D никто не запретит хоть шейдеры использовать.
← →
DevilDevil © (2007-08-22 11:22) [6]помоему было бы здорово совмещать....
Нужно например отобразить фон 800x600... В 3D потребуется создавать текстуру 1024x1024. Ну и кнопочки всякие, панельки. ColorKey тоже очень быстро работает. Предполагаю, быстрее, чем через 3D. + в 3D имеет место проблема "тексель в пиксель"; я до сих пор не могу решить.
А все остальные вещи, требующие альфу, повороты и т.д. и т.п реализовывать через 3D.
Интересно, такое совмещение вообще осуществимо ? Ну, скажем DX7 есть же что то DD-3D-подобное...
Единственное, что меня приводит в ужас - это восстановление поверхностей. Не знаете, можно ли обходиться без перезагрузки из файла?
← →
Sapersky (2007-08-22 12:14) [7]Нужно например отобразить фон 800x600... В 3D потребуется создавать текстуру 1024x1024.
Сейчас многие карты поддерживают "небинарные" текстуры, во всяком случае, при выводе в 2D. Нужно проверять соотв. флаги.
ColorKey тоже очень быстро работает. Предполагаю, быстрее, чем через 3D.
В своё время тестировал - на большом кол-ве спрайтов D3D быстрее (если выводить их одним вызовом).
+ в 3D имеет место проблема "тексель в пиксель"
Решается через -0.5 ко всем координатам, если не ошибаюсь.
Интересно, такое совмещение вообще осуществимо ? Ну, скажем DX7 есть же что то DD-3D-подобное...
Ну если очень хочется, то можно, именно в DX7. Там device D3D создаётся на базе поверхности-бэкбуфера (созданной со спец. флагом). Можно использовать как блиттинг, так и вывод через D3D. Пример могу выложить.
Единственное, что меня приводит в ужас - это восстановление поверхностей. Не знаете, можно ли обходиться без перезагрузки из файла?
Managed-текстуры в D3D7 поддерживаются.
← →
@!!ex © (2007-08-22 12:53) [8]> [6] DevilDevil © (22.08.07 11:22)
Тексель в пиксел не проблема.
Просто нужно учитывать разрешение при выводе полигона.
← →
DevilDevil © (2007-08-22 13:01) [9]> В своё время тестировал - на большом кол-ве спрайтов D3D
> быстрее (если выводить их одним вызовом).
Далеко не всегда получается выводить "массив" спрайтов, тем более, чтобы спрайты располагались на одной текстуре. Чаще приходится прибегать к DrawPrimitiveUp... да и не в этом суть! :)
> Сейчас многие карты поддерживают "небинарные" текстуры
что значить "небинарные" ? не кратные двойке ?
в таком случае... карты может и есть, только их среди казуальщиков мало
> Решается через -0.5 ко всем координатам, если не ошибаюсь.
вроде не ошибаешься... только у меня наскоком решить не удалось
> Ну если очень хочется, то можно, именно в DX7. Там device
> D3D создаётся на базе поверхности-бэкбуфера (созданной со
> спец. флагом). Можно использовать как блиттинг, так и вывод
> через D3D. Пример могу выложить.
Выложи, пожалуйста, очень интересно
> Managed-текстуры в D3D7 поддерживаются.
что это такое?
← →
DevilDevil © (2007-08-22 13:02) [10]> @!!ex © (22.08.07 12:53) [8]
недопонял.
предполагаю, ты не то имеешь ввиду :)
← →
@!!ex © (2007-08-22 13:10) [11]> [10] DevilDevil © (22.08.07 13:02)
Я имею ввиду, что вывести полик на экран так, чтобы каждый тексель лег ровно в пиксель экрана - не порблема.
← →
Sapersky (2007-08-22 13:47) [12]Далеко не всегда получается выводить "массив" спрайтов, тем более, чтобы спрайты располагались на одной текстуре.
Ну всякие там системы частиц и т.п.
Кстати, здесь у D3D8 и более поздних есть преимущество - они поддерживают point sprites (можно указать только центр спрайта и размер - передаётся одна вершина вместо 4).
что значить "небинарные" ? не кратные двойке ?
в таком случае... карты может и есть, только их среди казуальщиков мало
Не кратные, да. Поддерживаются, например, интегрированной на Intel 915, Radeon 9000, и, видимо, всеми более поздними. Флаги (в DX7) - D3DPTEXTURECAPS_POW2, D3DPTEXTURECAPS_NONPOW2CONDITIONAL.
> Ну если очень хочется, то можно, именно в DX7. Пример могу выложить.
Выложи, пожалуйста, очень интересно
http://sapersky.narod.ru/files/D3D7_sprite_sample_04.rar
> Managed-текстуры в D3D7 поддерживаются.
что это такое?
D3D создаёт копию текстуры в системной памяти и автоматически восстанавливает из неё ту, что в видеопамяти. Хотя основное назначение этой фичи - обеспечение нормальной производительности при нехватке видеопамяти (нужные в данный момент текстуры автоматически подгружаются в видео, ненужные выкидываются). Но расходуется системная память, которая тоже не бесконечна.
← →
max_ (2007-08-22 14:17) [13]спасибо, наверное я перейду все таки на DirectX.
← →
DevilDevil © (2007-08-22 15:45) [14]> Sapersky (22.08.07 13:47) [12]
очень интересное демо...
- если нажать на крестик, то приложение закрывается, а процесс живёт и жрёт 90% времени
- а можно например сначала блиттинг, потом 3D, потом опять блиттинг ? Блиттинг можно выполнять в моментBeginScene/EndScene
?
- не вижу, что тыClear
вызываешь...
- а нет ли у тебя на данной основе более функциональонго движочка?
- так и недопонял по поводу потери поверхностей... т.е. можно както при создании поверхности, указать ей, чтобы в случае чего, сама восстановилась? С потерей текстур никогда проблем не было, не думал, что такой ценой. Логичнее хранить на диске. Ну или как минимум в очень упакованном виде...
← →
DevilDevil © (2007-08-22 16:52) [15]такой вот ещё вопрос....
имеет ли в DX7 место вопрос вертикальной синхронизации ?
← →
Sapersky (2007-08-22 19:37) [16]- если нажать на крестик, то приложение закрывается, а процесс живёт и жрёт 90% времени
Забыл добавить в WndProc обработку крестика (т.к. сам всегда жму Esc):
Case msg of
WM_CLOSE : bQuit := True;
<...>
- а можно например сначала блиттинг, потом 3D, потом опять блиттинг ? Блиттинг можно выполнять в момент BeginScene/EndScene ?
Вроде бы никаких ограничений нет, хотя, наверное, для производительности не очень полезно постоянно дёргать карту из одного режима в другой.
- не вижу, что ты Clear вызываешь...
В данном случае незачем. Вращающийся квадрат перекрывает всё окно, Z-буфера нет.
- а нет ли у тебя на данной основе более функциональонго движочка?
Есть нечто немного более функциональное, кривое и недописанное. Наверное, проще писать с нуля, чем в нём разбираться.
так и недопонял по поводу потери поверхностей
В D3D7 и более ранних текстура = поверхность, созданная со спец. флагом. Указать, чтобы она была managed - можно, для моего примера sco := [scIsTexture, scManaged] в InitSprite, хотя этот пример всё равно не умеет восстанавливать primary, backbuffer, device...
Если потери поверхностей так уж напрягают, см. DX10 - там ничего не теряется в принципе, т.к. видеопамять - разделяемый ресурс.
имеет ли в DX7 место вопрос вертикальной синхронизации ?
В смысле, можно ли включить? Так же как и обычно в DDraw (вроде по умолчанию в полноэкранном режиме она уже включена).
← →
DevilDevil © (2007-08-27 10:32) [17]> Sapersky (22.08.07 19:37) [16]
так и не получилось восстанавливать Primary и BackBuffer
> Есть нечто немного более функциональное, кривое и недописанное.
> Наверное, проще писать с нуля, чем в нём разбираться.
выложи всёравно - очень интересно.
ИМХО Managed - нехороший механизм. помоему правильнее хранить в сжатом виде - памяти меньше расходуется. Лучше этот механизм самому реализовывать.
← →
Sapersky (2007-08-28 17:23) [18]ИМХО Managed - нехороший механизм. помоему правильнее хранить в сжатом виде - памяти меньше расходуется. Лучше этот механизм самому реализовывать.
Ну и сильно ты сожмёшь? В лучшем случае раза в 2, скорее меньше.
Может, тогда сразу использовать сжатые форматы текстур, DXT1-5. Хотя лично мне не нравится качество, которое они дают.
Всё-таки с managed меньше проблем + быстрее выполняется копирование картинки в текстуру, что заметно при большом кол-ве и размере текстур. В DX8-9 не-managed текстуру вообще невозможно залочить, т.е. нужно доп. буфер создавать.
выложи всёравно - очень интересно.
Сейчас перетряхиваю этот "движок" - очень много "лишнего" исходного кода, т.е. модулей, которые используются процентов на 5. С говорящим названием вроде my_sysutils.pas.
Попробую кое-что выкинуть.
Пока можешь посмотреть DDUtil.pas, это некий framework для DDraw (D3D несложно прикрутить). Имеется в составе любых заголовков от Clootie или отдельно:
http://www.clootie.ru/delphi/DirectXExamples/All_DirectDraw.zip
← →
DevilDevil © (2007-08-29 10:06) [19]> Ну и сильно ты сожмёшь? В лучшем случае раза в 2, скорее
> меньше.
Ну если вместо 30мб будет занимать 15 - тоже неплохо
> Пока можешь посмотреть DDUtil.pas
Да, интересно. Там, правда, маловато, пример один завис, при восстановление из полноэкранного режима не прорисовывается заголовок окна... но в общем очень даже ничего!
Была бы такая же библиотечка ("движочек") для DD + D3D...
← →
Sapersky (2007-08-29 16:37) [20]http://sapersky.narod.ru/files/AnyDX2D_v0.5.rar
Требуются стандартные заголовки DX от Clootie.
Ещё нашёл у себя переведённый на Delphi D3D framework из DX7 SDK:
http://sapersky.narod.ru/files/D3D7_SDK_Framework.rar
← →
DevilDevil © (2007-08-29 16:39) [21]> Sapersky (29.08.07 16:37) [20]
большое спасибо, очень интересно, буду изучать!
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2011.01.09;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.003 c