View Full Version : سوال: محدودیت سایز تکسچر در Direct3D
khorzu
دوشنبه 22 شهریور 1389, 11:09 صبح
سلام
می خواستم بدونم چه محدودیت هایی برای سایز بافت توی DX و همچنین کارت های گرافیک وجود داره ؟ + چرا اگه سایز مبنای دو باشه مناسب تره ؟ + برای چک کردن این محدودیت ها توی سیستم مقصد چی کار باید کرد ؟
SeganX
دوشنبه 22 شهریور 1389, 23:44 عصر
بعد از اینکه آلجکت Direct3D رو با صدا زدن تابع :
p_D3D = Direct3DCreate9(D3D_SDK_VERSION);ساختی یک تابعی هست که بهت یک data structure میده که توانایی های سیستم مقصد رو بهت میده. بهش می گن Device Capabilities :
D3DCAPS9 m_Caps;
p_D3D->GetDeviceCaps(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, &m_Caps);توی این m_Caps به مقدار کافی می تونی توانایی هایی رو که سیستم مقصد ساپورت میده پیدا کنی.
توانایی هایی مثل ساپورت شیدرها، سایز و تعداد اسلات های تکسچرها و ...
مثلا واسه بزرگترین سایز تکسچر می توانی از این استفاده کنی؟
m_Caps.MaxTextureWidth و m_Caps.MaxTextureHeight
در مورد اینکه چرا تکسچر ها رو به توان دو میگیرن خوب این برمیگرده به الگوریتمی که واسه پیدا کردن و سمپل کردن رنگ داخل یک تکسچر در یک مختصات مشخص استفاده میشه. الگوریتم هایی که برای اینکار استفاده می شه روی تکسچرهایی که سایزشون به توان دو هست خیلی سریعتر جواب میده.
khorzu
سه شنبه 23 شهریور 1389, 09:48 صبح
http://www.pic4ever.com/images/47b20s0.gif
- این محدودیتی که توی MaxTextureHeight و MaxTextureWidth بدست می آد محدودیت DX هست یا کارت گرافیک . OGL هم این محدودیت رو داره ؟
- در مورد حجم کل بافت هایی که روی کارت گرافیک می شه لود کرد چی؟ مثلا من چطور مطمئن باشم که اپلیکیشنم روی گرافیک 32 مگی کار می کنه یا نه .
- اگر سایز بافت اجبارا بیشتر از حد ابعاد DX باشه -مثلا یه بیلبورد پهن- راهی وجود داره ؟
- با در نظر گرفتن این افزایش سرعت در کل این کار بهینه هست که ابعاد بافت رو به توان دو اسکیل کنبم . باتوجه به اینکه ممکنه حجم بافت افزایش پیدا کنه .
SeganX
سه شنبه 23 شهریور 1389, 17:33 عصر
- این محدودیتی که توی MaxTextureHeight و MaxTextureWidth بدست می آد محدودیت DX هست یا کارت گرافیک . OGL هم این محدودیت رو داره ؟DX و OGL فقط API هایی هستند که راه دسترسی به سخت افزار گرافیکی رو برای برنامه نویس هموار می کنند و اینطور توانایی ها و محدودیت هایی که ارایه می دهند مربوط به سخت افزار است.
- در مورد حجم کل بافت هایی که روی کارت گرافیک می شه لود کرد چی؟ مثلا من چطور مطمئن باشم که اپلیکیشنم روی گرافیک 32 مگی کار می کنه یا نه .خوب وقتی که مشخصات سخت افزاری رو بدست آوردی، مدیریت اینکه چندتا بافت و ... لود کنی دست خودته. البته توی DX کمی هم به POOL ی که واسش انتخاب می کنی بستگی داره. مثلا اگه حافظه کارت گرافیک کم باشه و بخوای یه Resource با POOL_DEFAULT بسازی failed میشه و میگه که حافظه جا نداره. اما اگه با POOL های دیگه بخوای بسازی اونوقت Resource رو تو حافظه سیستم میسازه که خب محدودیت هایی هم داره. واسه اطلاعات بیشتر میتونی به خود SDK مراجعه کنی.
- اگر سایز بافت اجبارا بیشتر از حد ابعاد DX باشه -مثلا یه بیلبورد پهن- راهی وجود داره ؟من نمی دونم چی میشه. تا حالا بهش بر نخوردم. ولی می تونی بجای استفاده از یک بیلبورد خیلی خیلی بزرگ از چند تا بیلبورد کوچکتر که در کنار هم قرار دارند استفاده کنی.
- با در نظر گرفتن این افزایش سرعت در کل این کار بهینه هست که ابعاد بافت رو به توان دو اسکیل کنبم . باتوجه به اینکه ممکنه حجم بافت افزایش پیدا کنه . در اینکه بهینه تر هستش شک نکن. اگه بهینه تر نبود مهندسان و طراحان اینگونه سیستمها روی استفاده از بافت هایی با ابعاد توان دو اصرار نمی کردند. ( حتی یادم می یاد سخت افزارهای قدیمیتر فقط و فقط بافت هایی با ابعاد توان دو رو ساپورت می کردن )
mahdi1373
سه شنبه 23 شهریور 1389, 17:57 عصر
اگر سایز بافت اجبارا بیشتر از حد ابعاد DX باشه -مثلا یه بیلبورد پهن- راهی وجود داره ؟
یه بیلبورد کوچیک بساز و اونو اسکیل اش کن.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.