Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.01.09;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.008 c
15-1285225294
Дмитрий С
2010-09-23 11:01
2011.01.09
Безопастная передача пароля по http


2-1286734500
Askorbinka
2010-10-10 22:15
2011.01.09
ComPort ы


6-1233220277
apic
2009-01-29 12:11
2011.01.09
Сетевое имя компа


9-1187680845
max_
2007-08-21 11:20
2011.01.09
DirectDraw - Поверхности


2-1287398190
AnGel
2010-10-18 14:36
2011.01.09
Пеоедача данных через локальную сеть