Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
2-1287133819
coolon81
2010-10-15 13:10
2011.01.09
Не могу разобраться со связями таблиц


2-1287398656
mfender
2010-10-18 14:44
2011.01.09
RTTI. Как обратиться к потомку, заведомо не зная его класс?


15-1285160295
yurikon
2010-09-22 16:58
2011.01.09
Проблема с перенесенными ветками


15-1285572618
12
2010-09-27 11:30
2011.01.09
TDBLookupComboBox, не работает должным образом


15-1285524433
TUser
2010-09-26 22:07
2011.01.09
Не все ж на семинары эмберкадеро ходить :)





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский