البته حق با شماست:cheesygri, نمیدونم چرا برنامه نویسای xna کلی در مورد directx بحث میکنند.
بابا این دیگه خیلی واضحه, مایکرو توسعه دهنده directx, حالا شما میگی در 360 از directx استفاده نمیکنه, قبول. از چی استفاده میکنه؟ opengl . یا نکنه دوباره نشستن api های جدید نوشتن.
حالا شما لطفا یه منبع (هرچی باشه) بیار که این حرفو تصدیق کنه:
پ.ن: همچنان :wallbash:
البته حق با شماست منم زیاد حال و حوصله ندارم حرف های هزار بار گفته شده رو دوباره تکرار کنم. شما ظاهرا هنوز نه می دونی API چی هست، نه میدونی کنسول چی هست و نه خیلی نه های دیگه :cheesygri
فقط در یه حد خیلی خلاصه و ساده، جوری که تقریبا برای همه قابل فهم باشه توضیح میدم اگه گرفتی که گرفتی اگرم نگرفتی بیشتر از این سر این موضوع بحث نمیکنم چون فایده ای نداره.
API صرفا در مورد PC معنی پیدا می کنه. اصولا باید اول بفهمی که چرا از software abstraction layer استفاده میشه. توی بازار PC هزاران قطعه مختلف وجود داره که ممکنه هر کسی هر ترکیبی از این قطعات رو توی PC خودش داشته باشه، هر کدوم از این قطعات یه ویژگی هایی دارن و با یه ترتیب و دستورالعمل خاصی باید براشون برنامه نویسی و کد نویسی کرد. حالا فرض کن یه بازی می خواهد برای PC ساخته بشه پس باید روی تمامی این ترکیبات مختلف از قطعات مختلف موجود اجرا بشه. چند تا راه داره تا اینکار صورت بگیره؟
1. بیان میلیون ها نسخه از این بازی رو برای میلیون ها ترکیب مختلف از هزاران قطعه موجود بنویسن تا بازی روی همه اون سیستم ها اجرا بشه.
2. بیان از یه software abstraction layer استفاده کنن که به بازیساز ها اجازه میده از یه سری کد و دستورالعمل عمومی و استاندارد استفاده کنن و بعد هر کدوم از تولید کننده های اون قطعات (به عنوان مثال ATi یا nVIDIA) با عرضه یکسری نرم افزار ترجمه (همون driver ها) اون کد های عمومی رو قابل فهم برای قطعات ساخته شده توسط خودشون بکنن.
مسلمه که فقط و فقط انجام دادن گزینه دوم عملیه پس اینجاست که از software abstraction layer استفاده میشه و api خلق میشه.
اما استفاده از گزینه دوم فقط حسن نداره، بلکه یه عیب بزرگ هم داره و اونم اینه که محدود کننده هستش. به عنوان مثال ممکنه یه GPU توانایی ای داشته باشه که در بین کد ها و دستورالعمل های فلان api، اصلا کد عمومی ای نباشه که اجرا کننده اون ویژگی باشه پس وقتی یه بازی بر اساس اون api ساخته میشه نمیتونه از اون ویژگی و توانایی خاص اون GPU استفاده کنه.
یه مثال ساده میزنم تا شاید درک این قضیه راحت تر باشه. این مثالی که میزنم به هیچ وجه نشون دهنده برنامه نویسی برای GPU ها نیست، فقط یه مثاله برای اینکه به فهم این مسئله کمک کنه.
فرض کن میخواهیم توی صفحه یه دایره بکشیم. دو تا GPU مختلف داریم. GPU1 با این کد ها میفهمه که باید دایره مد نظر ما رو بکشه:
Code:
SetPoint 400,300
SetRadius 50,50
DrawCircle
و GPU2 هم با این کد ها:
Code:
Do
x = 400 + sin(angle)*50
y = 300 + cos(angle)*50
DrawPoint x,y
angle = angle + 1
Repeat until angle = 360
خوب حالا به جای اینکه توی کد های بازی بیاییم هر دوی اینها رو بنویسیم و بعد کد درست رو با توجه به GPU ای که شما توی خونه ات داری، انتخاب کنیم و اجرا کنیم، میاییم از این کد عمومی برای کشیدن دایره استفاده میکنیم:
Code:
DX_DrawCircle(400,300,50,50)
یه مجموعه از کد های عمومی مثل این آخری رو بهش میگن api که مثلا توی این مثال آخری اون api همون directx هستش.
خوب بازیساز این کد رو می نویسه بعدشم درایور هر کدوم از اون GPU ها این کد رو میگیره و به کدی که اون GPU میفهمه تبدیلش میکنه و دایره کشیده میشه.
اما حالا فرض کن GPU2 توانایی این رو هم داشته باشه که رنگ نقطه ای که داره دایره رو میکشه رو هم عوض کنه یعنی یه همچین کدی براش قابل فهم باشه:
Code:
Do
x = 400 + sin(angle)*50
y = 300 + cos(angle)*50
[B] ChangeColour (random colour)[/B]
DrawPoint x,y
angle = angle + 1
Repeat until angle = 360
اما توی کد های عمومی اون api دستورالعملی که اینکار رو انجام بده نباشه پس اگه سازنده بازی بخواهد بازیش رو بر اساس اون api بسازه نمیتونه از اون ویژگی استفاده کنه.
توی بازار PC به همون علت که گفتم همه مجبورن از یه api خاص استفاده کنن اما توی یه کنسول که معلومه چه چیپ هایی داره چه لزومی داره که بازیساز خودشو به یه api محدود کنه؟ قرار نیست اون کد هایی که برای یه کنسول نوشته میشه روی هزاران ترکیب دیگه از قطعات اجرا بشه پس چرا از api استفاده بشه؟؟
http://www.pcmag.com/encyclopedia_term/0,2542,t=abstraction+layer&i=37353,00.asp
A software translation layer that provides a common interface between applications and other programs, typically control programs (OS, DBMS, etc.).
An abstraction layer implies that there are two or more implementations of the target program, so that one set of program calls (APIs) works on different platforms or environments. If there is only one target platform and this term is used, then this is just a fancy way of saying "programming interface."
خیلی از توانایی های GPU ها به خاطر همین api ها محدود و بلا استفاده میمونن اما توی دنیای کنسول این قضیه فرق داره برای همینم هستش که خیلی خیلی بهتر میشه بازی رو روی کنسول ها optimize کرد (چون میدونی داری با چه سخت افزاری کار میکنی) و میشه درصد بیشتری از قدرت اونها را به کار گرفت.
توی نسل قبل GPU PS2 اصلا حتی به اسم هم با DirectX سازگار نبود (منظورم به بیان عامیانه است) و اصلا در حد و اندازه های GPU های DirectX8 نبود و هیچ shader model ای رو هم ساپورت نمیکرد اما میتونست افکت های pixel shader و vertex shader رو اجرا کنه.
اووووفففف
اصلا نمی خواستم انقدر تایپ کنم. به هر حال دیگه حوصله بیشتر از این توضیح دادن رو ندارم فقط یه بار دیگه بگم که api در مورد کنسول بی معنیه. شاید xenos یا rsx خصوصیات و توانایی هایی داشته باشن (یا در کنار xenon و cell به دست بیارن) که حتی توی api ای نظیر DX10 هم نشه ازشون استفاده کرد و در عوض یک سری از خصوصیات DX10 رو هم نداشته باشن. خلاصه کنسول رو نمیشه با api طبقه بندی کرد. در ضمن من coder نیستم اما میدونم که اگه کدر ماهر باشه و روی ساخت بازی وقت گذاشته بشه و به اندازه کافی از پتانسیل کنسول ها استفاده بشه، میشه تمامی ویژگی های DX10 رو روی این کنسول ها شبیه سازی کرد. این اصلا معنیش این نمیشه که مثلا crysis روی کنسول ها قابل اجراست پس حرف من رو همونجوری که زدم بخونید و از قول خودتون تجزیه و تحلیلش نکنید. (crysis باید برای کنسول ها عرضه بشه تا بتونه هزینه ای که برای ساختش شده رو برگردونه اما bottleneck کنسول ها در این زمینه میزان حافظه شونه که بعیده با این کیفیت تکسچر ها سازنده های بازی بتونن این بازی رو با همین کیفیت برای کنسول ها بسازن، در ضمن مسلما اونها یه روند ساخت multiplatform رو انتخاب میکنن پس نمیتونن به اندازه کافی به پتانسیل واقعی کنسول ها نزدیک بشن)