-
Всем привет. У меня такой вопрос - как лучше сделать, одну большую поверхность или кучу маленьких (наверное все-таки большую), и еще вопрос, я читал, что лучше не создавать внеэкранные поверхности больше первичной (главной)? ------------------------------------------- Спасибо
-
DirectDraw вроде бы изжыл себя... Сейчас, елси не ошибаюсь все делаеться через Direct3D.
-
Просто рассуждения, не подкрепленные документально.
Много мелких — лишний расход памяти на служебные структуры, но возможна в карточках есть какая-то оптимизация, если блитится поверхность целеком, а не кусочек.
-
> Сейчас, елси не ошибаюсь все делаеться через Direct3D
c 2D, на мой взгяд, проще работать в DirectDraw'е
-
> [3] max_ (21.08.07 19:46)
Не понимаю, что может быть проще. чем нарисовать текстурированный полик... а в 2Д большего и не надо.
По сабжу - реально не знаб ответа, работал с DD только один раз и хороших впечатлений о нем не осталось.
-
> [3] max_ (21.08.07 19:46)
В DD некоторые веши реализовываються либо очень сложно, либо очень медленно, либо и так и так сразу. Яркий пример — полупрозрачный блиттинг. А в 3D никто не запретит хоть шейдеры использовать.
-
помоему было бы здорово совмещать....
Нужно например отобразить фон 800x600... В 3D потребуется создавать текстуру 1024x1024. Ну и кнопочки всякие, панельки. ColorKey тоже очень быстро работает. Предполагаю, быстрее, чем через 3D. + в 3D имеет место проблема "тексель в пиксель"; я до сих пор не могу решить.
А все остальные вещи, требующие альфу, повороты и т.д. и т.п реализовывать через 3D.
Интересно, такое совмещение вообще осуществимо ? Ну, скажем DX7 есть же что то DD-3D-подобное...
Единственное, что меня приводит в ужас - это восстановление поверхностей. Не знаете, можно ли обходиться без перезагрузки из файла?
-
Нужно например отобразить фон 800x600... В 3D потребуется создавать текстуру 1024x1024.
Сейчас многие карты поддерживают "небинарные" текстуры, во всяком случае, при выводе в 2D. Нужно проверять соотв. флаги.
ColorKey тоже очень быстро работает. Предполагаю, быстрее, чем через 3D.
В своё время тестировал - на большом кол-ве спрайтов D3D быстрее (если выводить их одним вызовом).
+ в 3D имеет место проблема "тексель в пиксель"
Решается через -0.5 ко всем координатам, если не ошибаюсь.
Интересно, такое совмещение вообще осуществимо ? Ну, скажем DX7 есть же что то DD-3D-подобное...
Ну если очень хочется, то можно, именно в DX7. Там device D3D создаётся на базе поверхности-бэкбуфера (созданной со спец. флагом). Можно использовать как блиттинг, так и вывод через D3D. Пример могу выложить.
Единственное, что меня приводит в ужас - это восстановление поверхностей. Не знаете, можно ли обходиться без перезагрузки из файла?
Managed-текстуры в D3D7 поддерживаются.
-
> [6] DevilDevil © (22.08.07 11:22)
Тексель в пиксел не проблема. Просто нужно учитывать разрешение при выводе полигона.
-
> В своё время тестировал - на большом кол-ве спрайтов D3D > быстрее (если выводить их одним вызовом).
Далеко не всегда получается выводить "массив" спрайтов, тем более, чтобы спрайты располагались на одной текстуре. Чаще приходится прибегать к DrawPrimitiveUp... да и не в этом суть! :)
> Сейчас многие карты поддерживают "небинарные" текстуры что значить "небинарные" ? не кратные двойке ? в таком случае... карты может и есть, только их среди казуальщиков мало
> Решается через -0.5 ко всем координатам, если не ошибаюсь. вроде не ошибаешься... только у меня наскоком решить не удалось
> Ну если очень хочется, то можно, именно в DX7. Там device > D3D создаётся на базе поверхности-бэкбуфера (созданной со > спец. флагом). Можно использовать как блиттинг, так и вывод > через D3D. Пример могу выложить.
Выложи, пожалуйста, очень интересно
> Managed-текстуры в D3D7 поддерживаются. что это такое?
-
> @!!ex © (22.08.07 12:53) [8]
недопонял. предполагаю, ты не то имеешь ввиду :)
-
> [10] DevilDevil © (22.08.07 13:02)
Я имею ввиду, что вывести полик на экран так, чтобы каждый тексель лег ровно в пиксель экрана - не порблема.
-
Далеко не всегда получается выводить "массив" спрайтов, тем более, чтобы спрайты располагались на одной текстуре. Ну всякие там системы частиц и т.п. Кстати, здесь у 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 создаёт копию текстуры в системной памяти и автоматически восстанавливает из неё ту, что в видеопамяти. Хотя основное назначение этой фичи - обеспечение нормальной производительности при нехватке видеопамяти (нужные в данный момент текстуры автоматически подгружаются в видео, ненужные выкидываются). Но расходуется системная память, которая тоже не бесконечна.
-
спасибо, наверное я перейду все таки на DirectX.
-
> Sapersky (22.08.07 13:47) [12]очень интересное демо... - если нажать на крестик, то приложение закрывается, а процесс живёт и жрёт 90% времени - а можно например сначала блиттинг, потом 3D, потом опять блиттинг ? Блиттинг можно выполнять в момент BeginScene/EndScene ? - не вижу, что ты Clear вызываешь... - а нет ли у тебя на данной основе более функциональонго движочка? - так и недопонял по поводу потери поверхностей... т.е. можно както при создании поверхности, указать ей, чтобы в случае чего, сама восстановилась? С потерей текстур никогда проблем не было, не думал, что такой ценой. Логичнее хранить на диске. Ну или как минимум в очень упакованном виде...
-
такой вот ещё вопрос.... имеет ли в DX7 место вопрос вертикальной синхронизации ?
-
- если нажать на крестик, то приложение закрывается, а процесс живёт и жрёт 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 (вроде по умолчанию в полноэкранном режиме она уже включена).
-
> Sapersky (22.08.07 19:37) [16]
так и не получилось восстанавливать Primary и BackBuffer
> Есть нечто немного более функциональное, кривое и недописанное. > Наверное, проще писать с нуля, чем в нём разбираться.
выложи всёравно - очень интересно.
ИМХО Managed - нехороший механизм. помоему правильнее хранить в сжатом виде - памяти меньше расходуется. Лучше этот механизм самому реализовывать.
-
ИМХО 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
-
> Ну и сильно ты сожмёшь? В лучшем случае раза в 2, скорее > меньше.
Ну если вместо 30мб будет занимать 15 - тоже неплохо
> Пока можешь посмотреть DDUtil.pas Да, интересно. Там, правда, маловато, пример один завис, при восстановление из полноэкранного режима не прорисовывается заголовок окна... но в общем очень даже ничего!
Была бы такая же библиотечка ("движочек") для DD + D3D...
|