Apakah DirectX lebih mudah atau lebih baik daripada OpenGL, bahkan jika OpenGL adalah lintas-platform? Mengapa kita tidak melihat game yang sangat kuat untuk Linux seperti ada untuk Windows?
Premis palsu - di mana bukti bahwa pengembang game lebih suka windows? Saya pikir @ user17674 memilikinya lebih akurat - mereka ingin mengembangkan untuk platform sehingga mereka dapat menjual lebih banyak dan menghasilkan lebih banyak uang :-)
Rory Alsop
258
Pengembang virus juga lebih suka Windows. Ini semua tentang basis pengguna.
CesarGon
4
Mengapa programmer Windows lebih menyukai DirectX daripada OpenGL mungkin merupakan pertanyaan yang lebih menarik secara historis. Seperti yang mungkin ditunjukkan oleh tautan ke wawancara Carmack di bawah ini, DX dulu benci. Akan menarik untuk mengetahui bagaimana ini membuat cukup banyak pengguna untuk MS untuk mendukungnya sampai Xbox dan penulisan ulang modern membuatnya lebih populer. Atau mungkin itu selalu cukup baik sehingga orang terjebak dengannya.
CodexArcanum
100
Mengapa orang merampok bank? Karena di situlah uang itu berada .
GrandmasterB
7
@CesarGon: Ini bukan hanya karena basis pengguna tetapi juga untuk kemudahan pengembangan.
Giorgio
Jawaban:
1154
Banyak jawaban di sini benar-benar bagus. Tetapi masalah OpenGL dan Direct3D (D3D) mungkin harus diatasi. Dan itu membutuhkan ... pelajaran sejarah.
Dan sebelum kita mulai, saya tahu lebih banyak tentang OpenGL daripada yang saya lakukan tentang Direct3D . Saya tidak pernah menulis sederet kode D3D dalam hidup saya, dan saya telah menulis tutorial tentang OpenGL. Jadi apa yang akan saya katakan bukanlah masalah bias. Ini hanyalah masalah sejarah.
Kelahiran Konflik
Suatu hari, sekitar awal 90-an, Microsoft melihat sekeliling. Mereka melihat SNES dan Sega Genesis menjadi luar biasa, menjalankan banyak game aksi dan semacamnya. Dan mereka melihat DOS . Pengembang mengkodekan game DOS seperti game konsol: langsung ke logam. Namun tidak seperti konsol, di mana pengembang yang membuat permainan SNES tahu perangkat keras apa yang akan dimiliki pengguna, pengembang DOS harus menulis untuk beberapa kemungkinan konfigurasi. Dan ini agak sulit daripada kedengarannya.
Dan Microsoft memiliki masalah yang lebih besar: Windows. Lihat, Windows ingin memiliki perangkat keras, tidak seperti DOS yang memungkinkan pengembang melakukan apa saja. Memiliki perangkat keras diperlukan untuk memiliki kerjasama antar aplikasi. Kerja sama persis seperti yang dibenci pengembang game karena membutuhkan sumber daya perangkat keras berharga yang bisa mereka gunakan untuk menjadi luar biasa.
Untuk mempromosikan pengembangan game di Windows, Microsoft membutuhkan API yang seragam yang tingkatannya rendah, dijalankan pada Windows tanpa diperlambat, dan sebagian besar dari semua lintas-perangkat keras . API tunggal untuk semua perangkat keras grafis, suara, dan input.
Akselerator 3D lahir beberapa bulan kemudian. Dan Microsoft mengalami masalah. Lihat, DirectDraw, komponen grafis dari DirectX, hanya berurusan dengan grafik 2D: mengalokasikan memori grafis dan melakukan bit-blits antara berbagai bagian memori yang dialokasikan.
Jadi Microsoft membeli sedikit middleware dan mengubahnya menjadi Direct3D Versi 3. Secara universal dicerca. Dan dengan alasan yang bagus; melihat kode D3D v3 seperti menatap ke Tabut Perjanjian.
John Carmack yang lama di Id Software memandang sampah itu dan berkata, "Persetan!" dan memutuskan untuk menulis ke API lain: OpenGL.
Lihat, bagian lain dari beast berkepala banyak yaitu Microsoft telah sibuk bekerja dengan SGI pada implementasi OpenGL untuk Windows. Idenya di sini adalah untuk pengadilan pengembang aplikasi GL khas: aplikasi workstation. Alat CAD, pemodelan, hal semacam itu. Game adalah hal terjauh di pikiran mereka. Ini terutama Windows NT, tetapi Microsoft memutuskan untuk menambahkannya ke Win95 juga.
Sebagai cara untuk menarik pengembang workstation ke Windows, Microsoft memutuskan untuk mencoba menyuap mereka dengan akses ke kartu grafis 3D bermodel baru ini. Microsoft menerapkan protokol Driver Klien yang Dapat Diinstal: pembuat kartu grafis dapat mengesampingkan implementasi OpenGL perangkat lunak Microsoft dengan yang berbasis perangkat keras. Kode dapat secara otomatis hanya menggunakan implementasi OpenGL perangkat keras jika ada.
Pada hari-hari awal, kartu video tingkat konsumen tidak memiliki dukungan untuk OpenGL. Itu tidak menghentikan Carmack dari hanya porting Quake ke OpenGL (GLQuake) di workstation SGI-nya. Seperti yang bisa kita baca dari readme GLQuake:
Secara teoritis, glquake akan berjalan pada OpenGL apa pun yang mendukung yang mendukung ekstensi objek tekstur, tetapi kecuali perangkat keras yang sangat kuat yang mempercepat semua yang dibutuhkan, permainan game tidak akan dapat diterima. Jika harus melalui jalur emulasi perangkat lunak apa pun, kinerjanya kemungkinan besar akan di bawah satu frame per detik.
Pada saat ini (Maret '97), satu-satunya perangkat keras pembuka standar yang dapat memainkan glquake secara wajar adalah intergraph realizm, yang merupakan kartu yang SANGAT mahal. 3dlabs telah meningkatkan kinerja mereka secara signifikan, tetapi dengan driver yang tersedia masih belum cukup baik untuk dimainkan. Beberapa driver 3dlabs saat ini untuk papan kilat dan permedia juga dapat crash NT ketika keluar dari menjalankan layar penuh, jadi saya tidak merekomendasikan menjalankan glquake pada perangkat keras 3dlabs.
3dfx telah menyediakan opengl32.dll yang mengimplementasikan semua kebutuhan glquake, tetapi ini bukan implementasi opengl penuh. Aplikasi opengl lain sangat tidak mungkin untuk bekerja dengannya, jadi anggap itu pada dasarnya "driver glquake".
Ini adalah kelahiran driver miniGL. Ini berkembang menjadi implementasi OpenGL penuh pada akhirnya, karena perangkat keras menjadi cukup kuat untuk mengimplementasikan sebagian besar fungsi OpenGL dalam perangkat keras. nVidia adalah yang pertama menawarkan implementasi OpenGL penuh. Banyak vendor lain yang berjuang, yang merupakan salah satu alasan mengapa pengembang lebih menyukai Direct3D: mereka kompatibel pada perangkat keras yang lebih luas. Akhirnya hanya nVidia dan ATI (sekarang AMD) yang tersisa, dan keduanya memiliki implementasi OpenGL yang baik.
Ascendant OpenGL
Jadi panggungnya diatur: Direct3D vs OpenGL. Ini benar-benar cerita yang luar biasa, mengingat betapa buruknya D3D v3.
OpenGL Architectural Review Board (ARB) adalah organisasi yang bertanggung jawab untuk memelihara OpenGL. Mereka mengeluarkan sejumlah ekstensi, mempertahankan repositori ekstensi, dan membuat versi baru API. ARB adalah komite yang dibuat oleh banyak pemain industri grafis, serta beberapa pembuat OS. Apple dan Microsoft pada berbagai waktu menjadi anggota ARB.
3Dfx keluar dengan Voodoo2. Ini adalah perangkat keras pertama yang dapat melakukan multitexturing, yang merupakan sesuatu yang tidak bisa dilakukan OpenGL sebelumnya. Sementara 3Dfx sangat menentang OpenGL, NVIDIA, pembuat chip grafis multitexturing berikutnya (TNT1), menyukainya. Jadi ARB mengeluarkan ekstensi: GL_ARB_multitexture, yang akan memungkinkan akses ke multitexturing.
Sementara itu, Direct3D v5 keluar. Sekarang, D3D telah menjadi API yang sebenarnya , dan bukannya sesuatu yang mungkin dimuntahkan kucing. Masalah? Tidak ada multitexturing.
Ups.
Sekarang, yang satu tidak akan sakit sebanyak yang seharusnya, karena orang tidak menggunakan multitexturing banyak. Tidak secara langsung. Multitexturing sedikit melukai kinerja, dan dalam banyak kasus tidak sepadan dengan multi-passing. Dan tentu saja, pengembang gim senang memastikan bahwa gim mereka bekerja pada peranti keras yang lebih lama, yang tidak memiliki multitekstur, sehingga banyak gim yang dikirimkan tanpa itu.
D3D dengan demikian diberi penangguhan hukuman.
Waktu berlalu dan NVIDIA menyebarkan GeForce 256 (bukan GeForce GT-250; GeForce pertama), cukup banyak kompetisi kartu grafis yang berakhir untuk dua tahun ke depan. Titik penjualan utama adalah kemampuan untuk melakukan transformasi vertex dan pencahayaan (T&L) dalam perangkat keras. Tidak hanya itu, NVIDIA sangat mencintai OpenGL sehingga mesin T&L mereka secara efektif adalah OpenGL. Hampir secara harfiah; seperti yang saya mengerti, beberapa register mereka benar-benar mengambil enumerator OpenGL secara langsung sebagai nilai.
Direct3D v6 keluar. Multitexture akhirnya tetapi ... tidak ada perangkat keras T&L. OpenGL selalu memiliki pipa T&L, meskipun sebelum 256 itu diterapkan dalam perangkat lunak. Jadi sangat mudah bagi NVIDIA untuk hanya mengubah implementasi perangkat lunak mereka menjadi solusi perangkat keras. Tidak akan sampai D3D v7 sampai D3D akhirnya memiliki dukungan T&L perangkat keras.
Dawn of Shaders, Twilight of OpenGL
Kemudian, GeForce 3 keluar. Dan banyak hal terjadi pada saat yang bersamaan.
Microsoft telah memutuskan bahwa mereka tidak akan terlambat lagi. Jadi, alih-alih melihat apa yang dilakukan NVIDIA dan kemudian menyalinnya setelah fakta, mereka mengambil posisi menakjubkan untuk pergi ke mereka dan berbicara dengan mereka. Dan kemudian mereka jatuh cinta dan memiliki konsol kecil bersama.
Perceraian berantakan terjadi kemudian. Tapi itu untuk lain waktu.
Apa artinya ini untuk PC adalah bahwa GeForce 3 keluar bersamaan dengan D3D v8. Dan tidak sulit untuk melihat bagaimana GeForce 3 memengaruhi shader D3D 8. Pixel shader Shader Model 1.0 sangat spesifik untuk perangkat keras NVIDIA. Tidak ada upaya apa pun yang dilakukan pada abstrak perangkat keras NVIDIA; SM 1.0 adalah apa pun yang dilakukan GeForce 3.
Ketika ATI mulai terjun ke perlombaan kartu grafis dengan Radeon 8500, ada masalah. Pipa pemrosesan piksel 8500 lebih kuat dari pada barang-barang NVIDIA. Jadi Microsoft mengeluarkan Shader Model 1.1, yang pada dasarnya adalah "Apapun yang dilakukan 8500."
Itu mungkin terdengar seperti kegagalan pada bagian D3D. Tetapi kegagalan dan kesuksesan adalah masalah derajat. Dan kegagalan epik terjadi di OpenGL-land.
NVIDIA menyukai OpenGL, jadi ketika GeForce 3 hit, mereka merilis sejumlah ekstensi OpenGL. Ekstensi OpenGL eksklusif : Khusus NVIDIA. Tentu, ketika 8500 muncul, itu tidak bisa menggunakan salah satu dari mereka.
Lihat, setidaknya di tanah D3D 8, Anda bisa menjalankan shader SM 1.0 pada perangkat keras ATI. Tentu, Anda harus menulis shader baru untuk memanfaatkan kesejukan 8500, tetapi setidaknya kode Anda berfungsi .
Untuk mendapatkan shaders dalam bentuk apa pun pada Radeon 8500 di OpenGL, ATI harus menulis sejumlah ekstensi OpenGL. Ekstensi OpenGL eksklusif : Hanya ATI. Jadi Anda membutuhkan NVIDIA codepath dan ATI codepath, hanya untuk mendapatkan shader sama sekali.
Sekarang, Anda mungkin bertanya, "Di mana OpenGL ARB, yang tugasnya menjaga OpenGL sekarang?" Di mana banyak komite sering berakhir: menjadi bodoh.
Lihat, saya sebutkan ARB_multitexture di atas karena sangat mempengaruhi semua ini. ARB tampaknya (dari sudut pandang orang luar) ingin menghindari gagasan tentang shader sama sekali. Mereka berpikir bahwa jika mereka menampar konfigurabilitas yang cukup ke pipeline fungsi-tetap, mereka dapat menyamai kemampuan pipa shader.
Jadi ARB merilis ekstensi demi ekstensi. Setiap ekstensi dengan kata-kata "tekstur_env" di dalamnya adalah upaya lain untuk menambal desain penuaan ini. Periksa registri: antara ekstensi ARB dan EXT, ada delapan ekstensi yang dibuat. Banyak yang dipromosikan ke versi inti OpenGL.
Microsoft adalah bagian dari ARB saat ini; mereka pergi sekitar waktu D3D 9 melanda. Jadi sangat mungkin bahwa mereka bekerja untuk menyabot OpenGL dalam beberapa cara. Saya pribadi meragukan teori ini karena dua alasan. Satu, mereka harus mendapatkan bantuan dari anggota ARB lain untuk melakukan itu, karena setiap anggota hanya mendapat satu suara. Dan yang paling penting dua, ARB tidak membutuhkan bantuan Microsoft untuk mengacaukan segalanya. Kami akan melihat bukti lebih lanjut tentang itu.
Akhirnya ARB, kemungkinan di bawah ancaman baik dari ATI dan NVIDIA (keduanya anggota aktif) akhirnya menarik kepala mereka cukup lama untuk memberikan shader gaya perakitan yang sebenarnya.
Ingin sesuatu yang lebih bodoh?
T&L perangkat keras. Sesuatu yang dimiliki OpenGL terlebih dahulu . Yah, ini menarik. Untuk mendapatkan kinerja semaksimal mungkin dari perangkat keras T&L, Anda perlu menyimpan data vertex Anda di GPU. Bagaimanapun, itu adalah GPU yang benar-benar ingin menggunakan data vertex Anda.
Di D3D v7, Microsoft memperkenalkan konsep Vertex Buffer. Ini adalah petak memori GPU yang dialokasikan untuk menyimpan data titik.
Ingin tahu kapan OpenGL mendapatkan yang setara dengan ini? Oh, NVIDIA, sebagai pencinta segala hal OpenGL (selama itu adalah ekstensi NVIDIA yang dipatenkan), merilis ekstensi rentang array vertex ketika GeForce 256 hit pertama kali. Tetapi kapan ARB memutuskan untuk menyediakan fungsionalitas serupa?
Dua tahun kemudian . Ini setelah mereka menyetujui vertex dan fragmen shaders (pixel dalam bahasa D3D). Untuk itu diperlukan waktu berapa lama ARB mengembangkan solusi lintas platform untuk menyimpan data verteks dalam memori GPU. Sekali lagi, sesuatu yang hardware T & L perlu untuk mencapai performa maksimal.
Satu Bahasa untuk Merusak Mereka Semua
Jadi, lingkungan pengembangan OpenGL retak untuk sementara waktu. Tidak ada shader lintas-perangkat keras, tidak ada penyimpanan simpul GPU lintas-perangkat keras, sementara pengguna D3D menikmati keduanya. Bisakah ini menjadi lebih buruk?
Anda ... Anda bisa mengatakan itu. Masukkan Labs 3D .
Siapa mereka, Anda mungkin bertanya? Mereka adalah perusahaan mati yang saya anggap sebagai pembunuh OpenGL yang sebenarnya. Tentu, ketidakmampuan umum ARB membuat OpenGL rentan ketika seharusnya memiliki D3D. Tapi 3D Labs mungkin satu-satunya alasan terbesar dalam pikiran saya untuk keadaan pasar OpenGL saat ini. Apa yang bisa mereka lakukan untuk menyebabkan itu?
Mereka merancang Bahasa Shading OpenGL.
Lihat, 3D Labs adalah perusahaan yang sedang sekarat. GPU mahal mereka sedang dipinggirkan oleh meningkatnya tekanan NVIDIA di pasar workstation. Dan tidak seperti NVIDIA, 3D Labs tidak memiliki kehadiran di pasar utama; jika NVIDIA menang, mereka mati.
Yang mereka lakukan.
Jadi, dalam upaya untuk tetap relevan di dunia yang tidak menginginkan produk mereka, 3D Labs muncul ke Konferensi Pengembang Game yang mengadakan presentasi untuk sesuatu yang mereka sebut "OpenGL 2.0". Ini akan menjadi penulisan ulang lengkap dari awal dari OpenGL API. Dan itu masuk akal; ada banyak cruft di API OpenGL pada saat itu (catatan: cruft itu masih ada). Lihat saja bagaimana pemuatan tekstur dan pengikatan bekerja; itu semi-misterius.
Bagian dari proposal mereka adalah bahasa yang teduh. Tentu saja. Namun, tidak seperti ekstensi ARB lintas-platform saat ini, bahasa shading mereka adalah "tingkat tinggi" (C adalah tingkat tinggi untuk bahasa bayangan. Ya, sungguh).
Sekarang, Microsoft sedang mengerjakan bahasa shading tingkat tinggi mereka sendiri. Yang mereka, dalam semua imajinasi kolektif Microsoft, disebut ... High Level Shading Language (HLSL). Namun, pendekatan mereka berbeda secara mendasar terhadap bahasa.
Masalah terbesar dengan bahasa shader 3D Labs adalah built-in. Lihat, HLSL adalah bahasa yang didefinisikan oleh Microsoft. Mereka merilis kompiler untuk itu, dan menghasilkan kode perakitan Shader Model 2.0 (atau yang lebih baru model shader), yang akan Anda masukkan ke D3D. Pada hari-hari D3D v9, HLSL tidak pernah disentuh oleh D3D secara langsung. Itu abstraksi yang bagus, tapi itu murni opsional. Dan seorang pengembang selalu memiliki kesempatan untuk pergi di belakang kompiler dan men-tweak output untuk kinerja maksimum.
Bahasa Lab 3D tidak memiliki itu. Anda memberi pengemudi bahasa seperti-C, dan menghasilkan shader. Akhir dari cerita. Bukan perakitan shader, bukan sesuatu yang Anda beri makan sesuatu yang lain. Objek OpenGL yang sebenarnya mewakili shader.
Apa ini artinya adalah bahwa pengguna OpenGL terbuka untuk keanehan pengembang yang baru saja terbiasa mengompilasi bahasa seperti perakitan. Bug kompiler merajalela di OpenGL Shading Language (GLSL) yang baru saja dibaptis. Yang lebih buruk, jika Anda berhasil mendapatkan shader untuk dikompilasi di beberapa platform dengan benar (tidak ada prestasi berarti), Anda masih mengalami pengoptimal hari ini. Yang tidak seoptimal mungkin.
Meskipun itu adalah kelemahan terbesar di GLSL, itu bukan satu-satunya kelemahan. Oleh jauh .
Dalam D3D, dan dalam bahasa assembly yang lebih lama di OpenGL, Anda bisa mencampur dan mencocokkan shader vertex dan fragmen (piksel). Selama mereka berkomunikasi dengan antarmuka yang sama, Anda bisa menggunakan vertex shader dengan shader fragmen yang kompatibel. Dan bahkan ada tingkat ketidakcocokan yang bisa mereka terima; vertex shader dapat menulis output yang tidak dibaca oleh shader fragmen. Dan seterusnya.
GLSL tidak memilikinya. Vertex dan fragmen shader digabungkan bersama menjadi apa yang disebut Lab 3D "objek program". Jadi jika Anda ingin berbagi program vertex dan fragmen, Anda harus membangun beberapa objek program. Dan ini menyebabkan masalah terbesar kedua.
Lihat, Labs 3D mengira mereka pintar. Mereka mendasarkan model kompilasi GLSL pada C / C ++. Anda mengambil .c atau .cpp dan mengkompilasinya ke file objek. Kemudian Anda mengambil satu atau lebih file objek dan menautkannya ke dalam suatu program. Jadi begitulah cara GLSL mengkompilasi: Anda mengkompilasi shader Anda (vertex atau fragmen) menjadi objek shader. Lalu Anda meletakkan objek shader tersebut di objek program, dan menautkannya bersama untuk membentuk program Anda yang sebenarnya.
Meskipun hal ini memungkinkan ide-ide keren yang potensial seperti memiliki shader "perpustakaan" yang berisi kode tambahan yang bisa disebut oleh shader utama, yang dimaksud dalam praktiknya adalah bahwa shader dikompilasi dua kali . Sekali dalam tahap kompilasi dan sekali dalam tahap menghubungkan. Kompiler NVIDIA khususnya dikenal pada dasarnya menjalankan kompilasi dua kali. Itu tidak menghasilkan semacam perantara kode objek; itu hanya mengkompilasinya sekali dan membuang jawabannya, lalu mengkompilasinya lagi pada waktu tautan.
Jadi, bahkan jika Anda ingin menautkan vertex shader Anda ke dua shader fragmen yang berbeda, Anda harus melakukan kompilasi lebih banyak daripada di D3D. Terutama karena kompilasi bahasa seperti C semua dilakukan secara offline , bukan pada awal pelaksanaan program.
Ada masalah lain dengan GLSL. Mungkin tampaknya salah untuk menyalahkan Labs 3D, karena ARB akhirnya menyetujui dan memasukkan bahasa (tapi tidak ada yang lain dari inisiatif "OpenGL 2.0" mereka). Tapi itu ide mereka.
Dan inilah bagian yang sangat menyedihkan: Labs 3D benar (kebanyakan). GLSL bukan bahasa shading berbasis vektor seperti HLSL pada saat itu. Ini karena perangkat keras 3D Labs adalah perangkat keras skalar (mirip dengan perangkat keras NVIDIA modern), tetapi mereka pada akhirnya tepat ke arah banyak pembuat perangkat keras menggunakan perangkat keras mereka.
Mereka benar untuk menggunakan model kompilasi-online untuk bahasa "tingkat tinggi". D3D bahkan akhirnya beralih ke itu.
Masalahnya adalah bahwa Lab 3D benar pada waktu yang salah . Dan dalam mencoba memanggil masa depan terlalu dini, dalam mencoba menjadi bukti masa depan, mereka mengesampingkan masa kini . Kedengarannya mirip dengan bagaimana OpenGL selalu memiliki kemungkinan untuk fungsi T&L. Kecuali bahwa pipa T&L OpenGL masih berguna sebelum T&L perangkat keras, sementara GLSL adalah kewajiban sebelum dunia menyadarinya.
GLSL adalah bahasa yang baik sekarang . Tetapi untuk saat ini? Itu mengerikan. Dan OpenGL menderita karenanya.
Jatuh Menuju Apotheosis
Sementara saya berpendapat bahwa Labs 3D menghantam pukulan fatal, itu adalah ARB sendiri yang akan mendorong paku terakhir di peti mati.
Ini adalah kisah yang mungkin pernah Anda dengar. Pada saat OpenGL 2.1, OpenGL mengalami masalah. Itu memiliki banyak peninggalan warisan. API tidak mudah digunakan lagi. Ada 5 cara untuk melakukan hal-hal, dan tidak tahu mana yang tercepat. Anda bisa "mempelajari" OpenGL dengan tutorial sederhana, tetapi Anda tidak benar-benar mempelajari OpenGL API yang memberi Anda kinerja nyata dan kekuatan grafis.
Jadi ARB memutuskan untuk mencoba penemuan ulang OpenGL lainnya. Ini mirip dengan 3D Labs "OpenGL 2.0", tetapi lebih baik karena ARB ada di belakangnya. Mereka menyebutnya "Longs Peak."
Apa yang sangat buruk tentang meluangkan waktu untuk meningkatkan API? Ini buruk karena Microsoft telah membiarkan diri mereka sendiri rentan. Lihat, ini pada saat peralihan Vista.
Dengan Vista, Microsoft memutuskan untuk melembagakan beberapa perubahan yang sangat dibutuhkan pada driver layar. Mereka memaksa pengemudi untuk tunduk pada OS untuk virtualisasi memori grafis dan berbagai hal lainnya.
Sementara orang dapat memperdebatkan manfaat dari ini atau apakah itu benar-benar mungkin, faktanya tetap ini: Microsoft menganggap D3D 10 sebagai Vista (dan di atas) saja. Bahkan jika Anda memiliki perangkat keras yang mampu D3D 10, Anda tidak bisa menjalankan aplikasi D3D 10 tanpa juga menjalankan Vista.
Anda mungkin juga ingat bahwa Vista ... um, katakan saja itu tidak bekerja dengan baik. Jadi Anda memiliki OS yang berkinerja buruk, API baru yang hanya berjalan pada OS itu, dan generasi baru perangkat keras yang membutuhkan API dan OS untuk melakukan sesuatu yang lebih cepat daripada generasi sebelumnya.
Namun, pengembang dapat mengakses fitur D3D 10-kelas melalui OpenGL. Yah, mereka bisa jika ARB tidak sibuk bekerja di Longs Peak.
Pada dasarnya, ARB menghabiskan waktu satu setengah tahun hingga dua tahun untuk membuat API lebih baik. Pada saat OpenGL 3.0 benar-benar keluar, adopsi Vista naik, Win7 sudah dekat untuk menempatkan Vista di belakang mereka, dan sebagian besar pengembang game tidak peduli dengan fitur kelas D3D-10. Bagaimanapun, perangkat keras D3D 10 menjalankan aplikasi D3D 9 dengan baik. Dan dengan meningkatnya port PC-ke-konsol (atau pengembang PC yang melompat ke pengembangan konsol. Pilihlah), pengembang tidak memerlukan fitur kelas D3D 10.
Sekarang, jika pengembang memiliki akses ke fitur-fitur itu sebelumnya melalui OpenGL pada mesin WinXP, maka pengembangan OpenGL mungkin telah menerima suntikan yang sangat dibutuhkan di lengan. Tetapi ARB melewatkan kesempatan mereka. Dan apakah Anda ingin tahu bagian terburuknya?
Meskipun menghabiskan dua tahun berharga untuk membangun kembali API dari awal ... mereka masih gagal dan baru saja kembali ke status quo (kecuali untuk mekanisme penghentian).
Jadi, ARB tidak hanya melewatkan kesempatan penting , mereka bahkan tidak menyelesaikan tugas yang membuat mereka kehilangan kesempatan itu. Cukup banyak epik yang gagal di sekitar.
Dan itulah kisah OpenGL vs Direct3D. Kisah tentang peluang yang terlewatkan, kebodohan besar, kebutaan yang disengaja, dan kebodohan sederhana.
Apakah Anda memiliki ini ditulis di suatu tempat, atau apakah Anda menulis jika di atas kepala Anda?
Kristofer Hoch
38
@Kristofer: Saya tidak tahu apakah Anda dapat menyebutnya "dari atas kepala Anda" untuk sesuatu yang membutuhkan waktu sekitar satu jam untuk menulis, tetapi saya tidak menuliskannya di suatu tempat.
Nicol Bolas
18
@ F.Aquino: Jadi, Anda bersedia mengaitkan ini dengan sistem rendering yang digunakan game FPS, alih-alih mesin itu sendiri? Meskipun CS didasarkan pada Half-Life 1, yang didasarkan pada Quake? Maaf; tidak membelinya. Memang, saya tidak membeli premis bahwa FPS baru tidak memiliki potensi e-sport, meskipun ada banyak turnamen e-sports yang berpusat di sekitar FPS baru. Mereka mungkin tidak memiliki ketertarikan yang sama dengan CS pada beberapa pemain, tetapi jangan membuat kesalahan dengan berpikir bahwa para pemain itu membuat semua e-sports FPS.
Nicol Bolas
165
Wow. Saya bahkan tidak peduli dengan sebagian besar dari barang-barang ini dan itu masih merupakan bacaan yang bagus!
Peter Rowell
12
Which they, in all of Microsoft's collective imagination, called... the High Level Shading Language (HLSL).LOLled selama lebih dari 6 menit.
ApprenticeHacker
133
Saya merasa aneh bahwa semua orang berfokus pada basis pengguna, ketika pertanyaannya adalah 'pengembang game', bukan 'editor game'.
Bagi saya, sebagai pengembang, Linux adalah kekacauan berdarah. Ada begitu banyak versi, manajer desktop, kit UI, dll ... Jika saya tidak ingin mendistribusikan karya saya sebagai sumber terbuka, di mana pengguna dapat (mencoba) mengkompilasi ulang sehingga cocok dengan kombinasi unik dari paket, perpustakaan dan pengaturan, ini adalah mimpi buruk !
Di sisi lain, Microsoft menyediakan (sebagian besar waktu) kompatibilitas yang luar biasa dan stabilitas platform. Dimungkinkan untuk menargetkan seluruh jajaran mesin dengan satu pemasang sumber tertutup, misalnya komputer yang menjalankan rasa Windows XP, Vista dan 7, 32 dan 64 bit, tanpa DX atau VC distribusi yang dapat diinstal, dll ...
Satu hal lagi, HARAP SEMUA ORANG DI INTERNET STOP MEMBANDINGKAN OPENGL DAN DIRECTX! Bandingkan Direct3D vs OpenGL atau jangan lakukan ini . DirectX menyediakan dukungan input, dukungan suara, pemutaran film, dll. Yang tidak dimiliki OpenGL.
"Bagi saya, sebagai pengembang, Linux sangat kacau." Memang! Saya bekerja di lingkungan dengan Fedora dan Ubuntu. Kami memiliki masalah bahkan di antara keduanya. (Saya harus menambahkan saya seorang fanboy Linux.)
David Poole
48
@ jv42: Ini sepertinya kesalahpahaman umum: Hampir semua versi dan manajer desktop dan perangkat UI, dll. cukup tidak relevan untuk mengaktifkan dan menjalankan game. Jika permainan Anda (seperti yang dikirimkan) bergantung pada lebih dari libGL, libX11, dan libasound (atau libopenal atau libao atau liboss), Anda melakukan sesuatu yang salah.
greyfade
19
@greyfade "Jika game Anda (seperti yang dikirim) bergantung pada lebih dari libGL, libX11, dan libasound (atau libopenal atau libao atau liboss), Anda melakukan sesuatu yang salah." - Dan kemudian Anda menautkan ke libao-0.0.4alpha, dan pengguna Anda memiliki libao-0.0.5beta dan tidak ada yang berhasil.
quant_dev
17
Mengemas biner sehingga dapat berjalan di semua distribusi Linux tidak terlalu sulit. Heck, pengembang Blender melakukannya dengan setiap rilis. Hanya ada satu paket rilis Linux Blender (baik dua, 32 bit dan 64 bit).
Itu karena ada lebih banyak pengguna Windows di planet ini daripada Linux dan Mac. Yang benar adalah bahwa orang membuat sesuatu yang memiliki pasar terbesar.
Hal yang sama berlaku untuk ponsel: Android dan iPhone memiliki gim yang luar biasa tetapi Windows Mobile dan Symbian tidak ...
@ Mahmoud Hossam: Itu tidak benar. Menggunakan OpenGL tidak berarti bahwa seluruh aplikasi Anda hanya akan secara ajaib bekerja di bawah lingkungan * nix, itu berarti bahwa mesin grafis akan (dan bahkan kemudian itu tidak berarti tidak ada kebiasaan pada (misalnya) Windows yang tidak ada di Linux dan sebaliknya). Itu bukan seluruh keranjang dan pasti ada biaya yang cukup besar untuk mempertahankan kode mereka untuk berbagai platform.
Ed S.
5
@ Mahmoud: Tepat. Dan jika Anda tidak akan repot porting ke Linux / Mac OS, lalu mengapa tidak menggunakan perpustakaan asli? DirectX jauh lebih baik didukung di Windows daripada OpenGL.
Dean Harding
10
@ Mahmoud: seluruh premis dari pertanyaan adalah "mengapa pengembang lebih suka Windows". Jawab: karena itulah yang digunakan gamer. Tidak ada gunanya porting ke Linux / Mac jika hanya membuat 2% dari pasar Anda, dan dalam hal ini, tidak ada gunanya menggunakan OpenGL jika Anda tidak akan melakukan porting.
Dean Harding
4
@ Mahmoud, ini bukan tugas pengembang game untuk membuat orang beralih ke Linux.
GrandmasterB
6
@John 10+ juta pemain World of Warcraft ingin berbicara dengan Anda. Dan ini hanya satu pertandingan.
Marcelo
50
Karena Windows memiliki lebih dari 90% pangsa pasar, dan Linux (karena Anda secara khusus bertanya tentang Linux) memiliki reputasi memiliki banyak pengguna yang tidak suka membayar untuk perangkat lunak. Benar atau tidaknya itu tidak relevan; persepsi ada di sana dan itu mempengaruhi keputusan orang.
Jika pengembang menggunakan OpenGL itu akan mendukung Windows dan linux sehingga itu akan menjadi keuntungan pemasaran untuk menarik pengguna Linux yang bersedia membayar dan menggunakan Linux karena mereka percaya itu lebih baik.
M.Sameer
9
Bahkan menggunakan OpenGL ada biaya dalam mengembangkan dan menguji lintas platform yang tidak dibenarkan oleh pasar Linux. Directx juga (sayangnya) platform yang lebih baik untuk gaming PC saat ini daripada OpenGL - ada sangat sedikit game baru pada PC yang dibangun di OpenGL.
Martin Beckett
25
Cross platforming tidak semudah "hanya kode untuk OpenGL".
Sistem Down
13
Sebenarnya itu tidak benar, bahwa pengguna Linux tidak akan membayar untuk perangkat lunak. Bundel Humble Indie (satu bundel game yang bisa Anda dapatkan dengan jumlah uang berapa pun yang ingin Anda bayar) telah dilakukan dua kali sekarang dan setiap kali itu menunjukkan pengguna Linux membayar lebih dari pengguna Windows untuk bundel.
Htbaa
9
@ Htbaa Tentu saja mereka membayar lebih, mereka putus asa, mungkin itu satu-satunya game yang bisa mereka mainkan di OS mereka.
Ini tidak benar untuk Mac, dan itu tidak benar sekarang. Bahkan untuk iOS. Apple tidak menyediakan alat untuk pengembangan game iOS. Tetapi ini adalah pasar yang sangat besar (ada lebih banyak iPhone di luar sana, dibandingkan dengan PC pada tahun 1995) dengan persaingan yang relatif kecil, jadi bagaimanapun orang melakukannya.
Sedangkan untuk Linux, bahkan tidak ada semacam institusi pusat, yang dapat menetapkan prioritas apa pun. Arah kemana Linux akan berjalan, lebih sedikit ditentukan oleh sekelompok programmer yang sangat bagus, namun sedikit tidak ramah.
Untuk membuat gim PC hari ini, Anda membutuhkan banyak artis 2d / 3d, perancang gim, penulis naskah, aktor, penguji, dan yang tidak. Mengenai pemrograman yang sebenarnya, Anda mungkin cukup menggunakan mesin gim yang sebenarnya (CryEngine, Unreal Engine, Quake Engine, Source Engine). Jadi, Anda mungkin dapat melakukan semuanya tanpa programmer yang sebenarnya.
Karena itu, dan karena sifat bisnis, programmer tidak banyak menentukan platform mana yang dipilih. Dan biasanya, manajer mencari dukungan, yang merupakan sesuatu yang diklaim Microsoft untuk ditawarkan, dan untuk menangani hal-hal yang entah bagaimana dapat disesuaikan dengan pola pikir mereka, yang bukan open source.
Karena alasan itu, sebagian besar pengembangan perangkat lunak pengguna akhir komersial dilakukan di windows.
Saya bekerja untuk sebuah perusahaan, yang menciptakan game flash, dan karenanya tidak terikat pada platform tertentu. Namun, kita semua mengembangkan di windows, karena sebagian besar alat yang kita gunakan tidak tersedia untuk Linux.
"Jadi, kamu mungkin bisa melakukan semuanya tanpa programmer yang sebenarnya." Anda lupa sarkasme.
Allon Guralnek
@ AllonGuralnek: Tidak ada sarkasme di sana. Dalam pengembangan gim klasik gim besar, pemrogram akan menciptakan mesin dan sarana untuk menyediakan konten dan perilaku (melalui editor visual atau skrip aktual) dan kemudian desainer gim / level / misi akan menggunakan sarana itu. Jika Anda membeli mesin yang berfungsi dan cukup bertenaga, pada dasarnya Anda dapat menghentikan langkah pertama.
back2dos
2
Apakah Anda memiliki contoh spesifik dari game yang cukup terkenal yang dibuat tanpa menulis satu baris kode pun?
Allon Guralnek
1
@ AllonGuralnek: Saya tidak mengatakan siapa pun akan membuat game tanpa kode , tetapi tanpa programmer . Anda tidak perlu menjadi seorang programmer untuk membuat mod yang sepenuhnya mengubah permainan. DotA adalah yang paling populer yang dapat saya pikirkan di atas kepala saya.
back2dos
1
@ AllonGuralnek: Tidak. Orang yang menulis kode adalah orang yang menulis kode. Desainer level harus memiliki pemahaman tertentu tentang scripting. Banyak programmer sering diminta untuk memiliki sejumlah keterampilan manajemen. Itu tidak membuat yang pertama seorang programmer, atau yang kedua seorang manajer. Penilaian Anda terhadap DotA juga salah. Pertama itu sepenuhnya mengubah permainan, mengubah RTS menjadi genre baru dan kedua dianggap sebagai permainan terpisah oleh banyak liga eSports termasuk ESWC
back2dos
10
Seperti yang telah dikatakan beberapa orang, bagian terpenting adalah basis pengguna. 95% pengguna PC menggunakan Windows. Gamer PC menggunakan hampir secara eksklusif Windows. Bahkan mereka yang menggunakan Mac atau Linux paling sering menjalankan permainan Windows melalui beberapa virtualisasi atau emulasi (dengan sangat sedikit pengecualian).
Tetapi demografis bukanlah segalanya. Saya tidak akan meremehkan bagian yang dilakukan Microsoft untuk membuat platform lebih menarik bagi pengembang game. Pada dasarnya Anda mendapatkan seperangkat alat berfitur lengkap gratis , yang paling penting XNA Game Studio . Ini memungkinkan tidak hanya pengembangan untuk Windows, tetapi juga untuk Xbox360 . Dan dengan edisi terbaru bahkan untuk ponsel WP7. Jelas karena ini adalah alat Microsoft, ia menggunakan DirectX, bukan OpenGL.
Catatan untuk setiap pembaca yang bepergian waktu: Pada April 2014, XNA akan mati secara resmi. Rilis terakhir (4.0) diterbitkan pada 2010 dan tidak akan melihat versi baru antara sekarang (2013) dan saat matahari terbenam.
Aren
1
Catatan lain untuk setiap pembaca yang bepergian dengan waktu: Pengembangan Windows 8 (dan lebih tinggi) tidak akan lagi gratis di masa depan.
Fouric
6
Ewwww, saya tidak. Saya menggunakan Linux hampir secara eksklusif. Saya dual-boot ke Windows untuk membuat Windows membangun, dan menggunakan Mac untuk membangun Mac, tapi hanya itu.
Triknya adalah kerangka kerja lintas platform yang telah kami kembangkan selama bertahun-tahun. Permainan kami dibangun di atas itu, dan berperilaku identik di Linux / OpenGL, Mac / OpenGL, dan Windows / Direct3D (dan segera di iOS / OpenGL).
Memang perusahaan saya tidak membuat judul AAA, jadi itu mungkin tidak berlaku untuk ini, tetapi kami membuat game kasual kasual (lihat situs web - CSI: NY, Pembunuhan yang Dia Tulis dan dua tahun 2011 mendatang adalah contoh judul yang menggunakan lisensi penting, The Kasing Sherlock Holmes 1 dan 2 yang Hilang juga cukup berhasil)
Saya tidak akan menyerah gedit + gcc + gdb + valgrind untuk hal lain.
@Alexander, diremehkan bahkan tidak mulai menjelaskan
Shahbaz
3
Maaf, pada akhirnya saya menyerah gedit. Saya sekarang menggunakan gvim dan saya jauh lebih bahagia :)
ggambett
4
Kelembaman. Jika Anda telah menggunakan Windows di masa lalu maka beralih ke sesuatu yang lain adalah masalah. Jika Anda menggunakan Windows DirectX lebih mudah dan lebih mungkin bekerja dengan baik daripada OpenGL.
Saham. Pangsa pasar Windows pada desktop lebih besar daripada OS X yang pada gilirannya lebih besar dari Linux. Pembicaraan uang.
Merek. DirectX lebih dikenal daripada hal-hal seperti SDL (yang merupakan hal yang Anda perlukan untuk meniru beberapa fitur DirectX yang melampaui OpenGL).
Kurang kebingungan. Apakah Linux pengguna hanya mendukung hingga OpenGL 1.4 atau OpenGL 2+? Bisakah Anda menggunakan tutorial OpenGL 2.0 seperti Intro ke OpenGL modern. Bab 1: Pipa Grafik pada Linux versi Anda?
Saat ini Linux lebih bersifat curio ketika menyangkut pengembangan game dan sebagian besar pengembang akan lebih baik secara finansial melakukan versi port OS X sebelum versi Linux (lihat hal-hal seperti Steam). Bahkan pasar konsol bernilai lebih dari dua platform yang digabungkan untuk game ...
Jika Anda ingin mono platform DirectX baik-baik saja. Jika Anda ingin menjadi cross platform, ada peluang besar Anda harus menggunakan OpenGL di setidaknya beberapa platform lainnya.
Jawaban untuk pertanyaan 4 adalah: 2+. Mesa3D mendukung hingga OpenGL 2.1, yang berarti bahwa semua driver grafis untuk perangkat keras 3D untuk X11 mendukung setidaknya OpenGL 2.1 sejak Mesa versi 6.8. Itu mencakup semua distro Linux yang dirilis dalam beberapa tahun terakhir, dan driver biner yang didukung NVIDIA dan AMD 3.0 dan lebih tinggi. Ini tidak termasuk pengguna intel895, tetapi mereka sudah usang.
greyfade
1
Saya khawatir ini bukan masalahnya. Komputer dengan chipset i915 / i945 (GMA 900/950) sedang (masih) dijual dan tidak usang. Bahkan pada distribusi modern dari beberapa bulan yang lalu (Ubuntu 11.04 / Fedora 15) glxinfo akan mengembalikan versi OpenGL tidak lebih tinggi dari 1,4 (Mesa 7.11-devel). Perangkat keras Intel semacam itu tidak dapat melakukan versi yang lebih baru tanpa bantuan perangkat lunak sehingga sampai softpipe tersedia secara default, Linux pada kartu semacam itu tidak akan pernah melakukan OpenGL versi yang lebih tinggi. Menargetkan OpenGL 2.0 (atau lebih tinggi) akan menghentikan program yang berjalan pada berbagai sistem desktop Linux ...
Anon
Meski begitu, saya gagal melihat kekhawatiran. Chipset yang sama memiliki keterbatasan pada Windows, sehingga sebagian besar gim yang berat grafis akan keluar dari pertanyaan .
greyfade
4
Jawabannya jelas. Tujuan penulisan game adalah untuk menghasilkan uang. Semakin banyak pengguna akhir yang menjalankan Windows, oleh karena itu ada pasar yang lebih besar dan Anda diharapkan menghasilkan lebih banyak uang dari permainan Windows daripada permainan Linux. Sesederhana itu.
Jika Anda pernah bertanya pada diri sendiri pertanyaan 'Mengapa seseorang melakukan ...', ingatlah bahwa uang membuat dunia berputar.
Ya tetapi Anda dapat membuat game lintas platform dan mendapatkan lebih dari sekadar pengguna windows;)
M.Sameer
Menjadi cross-platform bukanlah segalanya. Jika jumlah pengguna tambahan yang Anda peroleh adalah persentase yang relatif rendah, maka Anda perlu menyeimbangkan biaya pengembangan tambahan dan biaya dukungan berkelanjutan dengan jumlah tambahan yang akan Anda dapatkan dari mereka dan membuat keputusan berdasarkan informasi pada data keras aktual. Tidak ada jawaban yang benar atau salah secara global untuk yang satu itu, tetapi ada jawaban yang benar atau salah untuk masing-masing program, dan apa yang benar untuk satu program mungkin salah untuk yang lain.
Maximus Minimus
4
Alat, alat, alat.
Itulah sebabnya. Berkembang di Windows dan Anda mendapatkan akses ke beberapa alat pengembangan terbaik di planet ini. Tidak ada yang datang bahkan jauh dari debugger Visual Studio, DirectX Debug Runtimes mengagumkan, PIX mengagumkan, dan padanan yang sebanding tidak ada pada platform / API lain. Tentu, ada beberapa hal bagus di sana; Saya tidak mengatakan bahwa alat pada platform lain buruk, tetapi yang disediakan MS jauh di depan paket (pengecualian terhormat: Valgrind) yang bahkan tidak lucu.
Intinya adalah bahwa alat ini membantu Anda. Mereka membantu Anda menyelesaikan sesuatu, mereka membantu Anda menjadi produktif, mereka membantu Anda fokus pada kesalahan dalam kode Anda sendiri daripada bergulat dengan API yang tidak pernah berperilaku seperti yang didokumentasikan.
PIX adalah mengagumkan. Debugging shaders dengan mengklik pixel yang mengganggu dan melihat apa yang terjadi hebat!
Chris Pitman
4
Jadi saya telah memeriksa semua jawaban ini, dan sebagai pengembang game yang memiliki kode pada game konsol yang telah ada di rak Walmart, saya memiliki jawaban yang sangat berbeda.
Distribusi.
Lihat, jika Anda ingin berada di konsol Nintendo, Anda harus mendapatkan izin Nintendo, membeli dari pabrik Nintendo, membayar biaya overhead Nintendo, bernegosiasi dengan Walmart, berurusan dengan pergudangan, Anda memerlukan uang di depan untuk memproduksi, untuk mencetak kotak, untuk mengirim , untuk melakukan semua asuransi, dan lain-lain.
Jika Anda ingin masuk ke XBox, pasti ada XBLA, tetapi Anda masih membutuhkan restu dari Microsoft, Anda harus menunggu giliran, ada puluhan ribu dolar hanya untuk merilis patch, dll.
Di iOS, Anda masih membutuhkan Apple baik-baik saja, dan mereka dapat (dan memang) menarik Anda.
Pada Steam, Anda masih memerlukan izin Valve atau lampu hijau, dan banyak uang.
.
Di Windows? Anda membuat situs web dan tombol unduh.
.
Saya tidak mengatakan platform lain tidak berharga. Tapi ada begitu * banyak * hal mengerikan terjadi ketika Anda mencoba untuk mengembangkan permainan, itu padaku, janji bisa hanya menampar biner di situs dan fokus pada pekerjaan - setidaknya untuk memulai - benar-benar menurunkan banyak hambatan kegagalan potensial.
"Kita bisa melakukan port XBLA nanti, ketika keadaan sudah stabil" mentalitas.
Dan pada tingkat yang lebih rendah yakin ini juga baik untuk Linux, dan jika tujuh pelanggan baik, Anda bisa mulai dari sana.
Tetapi Windows memiliki tiga keuntungan besar: pengembangan yang benar-benar terbuka, penyebaran yang benar-benar terbuka, dan basis pelanggan yang sangat besar dan sangat aktif yang tertarik pada hal-hal unik.
Sulit membayangkan di mana lagi saya lebih suka memulai.
tidak ada, mereka menciptakan DX karena OGL tidak dioptimalkan untuk Windows, tidak dapat diperluas dengan cepat untuk mengambil keuntungan dari perangkat keras dan sistem operasi perkembangan baru, tidak memasukkan suara, mengontrol masukan, dll dll ..
jwenting
2
iow DX dikhususkan untuk Windows untuk alasan kinerja dan untuk memungkinkan Microsoft untuk tetap seperti itu dan cepat menggabungkan teknologi baru saat tersedia. OpenGL terjebak pada tingkat dukungan perangkat keras grafis yang ada 5 tahun yang lalu, mungkin lebih, karena ini adalah upaya komite.
jwenting
1
@jwenting Saya tidak berpikir kinerja adalah satu-satunya alasan mereka tidak mem-port-nya ke platform lain, maksud saya, jika mereka ingin mem-port-nya, setidaknya mereka akan membuka-sumbernya dan menyerahkannya kepada komunitas untuk diimplementasikan saya t.
Mahmoud Hossam
1
mereka tidak membuka sumber C #, mereka menyerahkan spesifikasi bahasa ke badan standar. Microsoft adalah anggota dari badan standar tersebut, dan melakukan hal-hal seperti itu setiap saat (mereka memiliki kontribusi besar pada html, javascript, dan standar lainnya misalnya). Buka sumber itu berarti melepaskan kode sumber untuk kompiler dan perpustakaan di bawah sesuatu seperti APL.
jwenting
1
@jwenting: Sebagai catatan, ada implementasi Direct3D 10 dan 11 di Linux yang menargetkan kerangka kerja Gallium3D. (Dan itu tidak ada hubungannya dengan Wine.) Saya juga tidak setuju dengan pernyataan Anda bahwa "OGL tidak dioptimalkan untuk Windows." Itu masalah implementasi driver perangkat keras, bukan batasan OpenGL.
greyfade
1
Banyak yang berkaitan dengan politik dan kontrol. Pada akhir 90-an, SGI dan MS sebenarnya setuju untuk menggabungkan upaya:
Hanya karena Linux gagal secara mengerikan sebagai sistem desktop. Seperti yang ditunjukkan seseorang sebelumnya, Linux adalah kekacauan bagi pengembang (pustaka yang berbeda, ui toolkit, dll)
Masalah lain adalah freetardism dan kurangnya dukungan untuk perangkat lunak berpemilik. Nvidia selalu menyediakan driver yang bagus (berpemilik) untuk Linux namun Ubuntu dan distro lainnya tidak mengirimkannya. Juga tidak ada antarmuka driver biner yang tersedia untuk Linux seperti untuk Windows. (Ada file teks bernama binaryApiNonsense.txt atau sesuatu di sumber Kernel) Setelah mengatakan bahwa hanya perangkat keras Nvidia yang didukung dengan benar di Linux. Anda dapat memainkan sebagian besar game perangkat lunak ID menggunakan perangkat keras Nvidia di Linux.
Alat pengembangan hal berikutnya. MSFT menyediakan dukungan C ++ yang luar biasa dan debugger Visual Studio lebih baik daripada gdb terkait C ++. Last but not least, alat lebih lanjut hilang seperti Photoshop. Juga .net memungkinkan Anda membuat alat gui dengan cepat. Banyak studio game memberi kode alat mereka untuk penggunaan internal menggunakan kerangka .net.
Saya hampir lupa: Sistem grafisnya mengerikan, pada hari-hari mereka baru saja mem-porting X11 karena itu adalah hal termudah yang berhasil. Mereka gagal merancang dan mengimplementasikan sistem grafis modern yang dimiliki OSx dan Win dengan benar.
Hmm? Kartu intel dan ati saya berfungsi dengan baik di Linux ... Dan apa yang salah dengan X11? Saya selalu merasa itu jauh lebih baik daripada alternatif untuk OS lain (terutama Windows) karena arsitektur client-server-nya.
alternatif
Tidak, mereka tidak mengetik glxinfo dan melihat cuaca baik-baik saja atau tidak! X11 rusak parah
Nils
dan jika Anda membaca kalimat terakhir, Linus sendiri mengimplementasikan patch level kernel - bukan patch X11.
alternatif
1
Saya tidak tahu banyak tentang sistem grafis (Anda mungkin ada benarnya) tetapi mengatakan bahwa Linux gagal sebagai sistem desktop tidak benar atau setidaknya tidak akurat. Saya pindah dari Windows ke Linux dan saya merasa jauh lebih produktif sejak itu. Kinerja Linux adalah dan lebih unggul daripada Windows di semua mesin yang saya gunakan. Saya juga tidak kode C ++ dan saya ingin tahu di mana Eclipse berdiri sebagai C ++ IDE dibandingkan dengan Visual Studio.
M.Sameer
Letakkan penyembur api. Saya pikir pendapat yang diterima secara umum adalah bahwa VS adalah IDE terbaik. Namun, Eclipse masih muda dan memiliki jalan untuk pergi - kita akan lihat. Saya hanya suka betapa mudahnya semua bisa skrip dan pipable di Linux!
Jawaban:
Banyak jawaban di sini benar-benar bagus. Tetapi masalah OpenGL dan Direct3D (D3D) mungkin harus diatasi. Dan itu membutuhkan ... pelajaran sejarah.
Dan sebelum kita mulai, saya tahu lebih banyak tentang OpenGL daripada yang saya lakukan tentang Direct3D . Saya tidak pernah menulis sederet kode D3D dalam hidup saya, dan saya telah menulis tutorial tentang OpenGL. Jadi apa yang akan saya katakan bukanlah masalah bias. Ini hanyalah masalah sejarah.
Kelahiran Konflik
Suatu hari, sekitar awal 90-an, Microsoft melihat sekeliling. Mereka melihat SNES dan Sega Genesis menjadi luar biasa, menjalankan banyak game aksi dan semacamnya. Dan mereka melihat DOS . Pengembang mengkodekan game DOS seperti game konsol: langsung ke logam. Namun tidak seperti konsol, di mana pengembang yang membuat permainan SNES tahu perangkat keras apa yang akan dimiliki pengguna, pengembang DOS harus menulis untuk beberapa kemungkinan konfigurasi. Dan ini agak sulit daripada kedengarannya.
Dan Microsoft memiliki masalah yang lebih besar: Windows. Lihat, Windows ingin memiliki perangkat keras, tidak seperti DOS yang memungkinkan pengembang melakukan apa saja. Memiliki perangkat keras diperlukan untuk memiliki kerjasama antar aplikasi. Kerja sama persis seperti yang dibenci pengembang game karena membutuhkan sumber daya perangkat keras berharga yang bisa mereka gunakan untuk menjadi luar biasa.
Untuk mempromosikan pengembangan game di Windows, Microsoft membutuhkan API yang seragam yang tingkatannya rendah, dijalankan pada Windows tanpa diperlambat, dan sebagian besar dari semua lintas-perangkat keras . API tunggal untuk semua perangkat keras grafis, suara, dan input.
Dengan demikian, DirectX lahir.
Akselerator 3D lahir beberapa bulan kemudian. Dan Microsoft mengalami masalah. Lihat, DirectDraw, komponen grafis dari DirectX, hanya berurusan dengan grafik 2D: mengalokasikan memori grafis dan melakukan bit-blits antara berbagai bagian memori yang dialokasikan.
Jadi Microsoft membeli sedikit middleware dan mengubahnya menjadi Direct3D Versi 3. Secara universal dicerca. Dan dengan alasan yang bagus; melihat kode D3D v3 seperti menatap ke Tabut Perjanjian.
John Carmack yang lama di Id Software memandang sampah itu dan berkata, "Persetan!" dan memutuskan untuk menulis ke API lain: OpenGL.
Lihat, bagian lain dari beast berkepala banyak yaitu Microsoft telah sibuk bekerja dengan SGI pada implementasi OpenGL untuk Windows. Idenya di sini adalah untuk pengadilan pengembang aplikasi GL khas: aplikasi workstation. Alat CAD, pemodelan, hal semacam itu. Game adalah hal terjauh di pikiran mereka. Ini terutama Windows NT, tetapi Microsoft memutuskan untuk menambahkannya ke Win95 juga.
Sebagai cara untuk menarik pengembang workstation ke Windows, Microsoft memutuskan untuk mencoba menyuap mereka dengan akses ke kartu grafis 3D bermodel baru ini. Microsoft menerapkan protokol Driver Klien yang Dapat Diinstal: pembuat kartu grafis dapat mengesampingkan implementasi OpenGL perangkat lunak Microsoft dengan yang berbasis perangkat keras. Kode dapat secara otomatis hanya menggunakan implementasi OpenGL perangkat keras jika ada.
Pada hari-hari awal, kartu video tingkat konsumen tidak memiliki dukungan untuk OpenGL. Itu tidak menghentikan Carmack dari hanya porting Quake ke OpenGL (GLQuake) di workstation SGI-nya. Seperti yang bisa kita baca dari readme GLQuake:
Ini adalah kelahiran driver miniGL. Ini berkembang menjadi implementasi OpenGL penuh pada akhirnya, karena perangkat keras menjadi cukup kuat untuk mengimplementasikan sebagian besar fungsi OpenGL dalam perangkat keras. nVidia adalah yang pertama menawarkan implementasi OpenGL penuh. Banyak vendor lain yang berjuang, yang merupakan salah satu alasan mengapa pengembang lebih menyukai Direct3D: mereka kompatibel pada perangkat keras yang lebih luas. Akhirnya hanya nVidia dan ATI (sekarang AMD) yang tersisa, dan keduanya memiliki implementasi OpenGL yang baik.
Ascendant OpenGL
Jadi panggungnya diatur: Direct3D vs OpenGL. Ini benar-benar cerita yang luar biasa, mengingat betapa buruknya D3D v3.
OpenGL Architectural Review Board (ARB) adalah organisasi yang bertanggung jawab untuk memelihara OpenGL. Mereka mengeluarkan sejumlah ekstensi, mempertahankan repositori ekstensi, dan membuat versi baru API. ARB adalah komite yang dibuat oleh banyak pemain industri grafis, serta beberapa pembuat OS. Apple dan Microsoft pada berbagai waktu menjadi anggota ARB.
3Dfx keluar dengan Voodoo2. Ini adalah perangkat keras pertama yang dapat melakukan multitexturing, yang merupakan sesuatu yang tidak bisa dilakukan OpenGL sebelumnya. Sementara 3Dfx sangat menentang OpenGL, NVIDIA, pembuat chip grafis multitexturing berikutnya (TNT1), menyukainya. Jadi ARB mengeluarkan ekstensi: GL_ARB_multitexture, yang akan memungkinkan akses ke multitexturing.
Sementara itu, Direct3D v5 keluar. Sekarang, D3D telah menjadi API yang sebenarnya , dan bukannya sesuatu yang mungkin dimuntahkan kucing. Masalah? Tidak ada multitexturing.
Ups.
Sekarang, yang satu tidak akan sakit sebanyak yang seharusnya, karena orang tidak menggunakan multitexturing banyak. Tidak secara langsung. Multitexturing sedikit melukai kinerja, dan dalam banyak kasus tidak sepadan dengan multi-passing. Dan tentu saja, pengembang gim senang memastikan bahwa gim mereka bekerja pada peranti keras yang lebih lama, yang tidak memiliki multitekstur, sehingga banyak gim yang dikirimkan tanpa itu.
D3D dengan demikian diberi penangguhan hukuman.
Waktu berlalu dan NVIDIA menyebarkan GeForce 256 (bukan GeForce GT-250; GeForce pertama), cukup banyak kompetisi kartu grafis yang berakhir untuk dua tahun ke depan. Titik penjualan utama adalah kemampuan untuk melakukan transformasi vertex dan pencahayaan (T&L) dalam perangkat keras. Tidak hanya itu, NVIDIA sangat mencintai OpenGL sehingga mesin T&L mereka secara efektif adalah OpenGL. Hampir secara harfiah; seperti yang saya mengerti, beberapa register mereka benar-benar mengambil enumerator OpenGL secara langsung sebagai nilai.
Direct3D v6 keluar. Multitexture akhirnya tetapi ... tidak ada perangkat keras T&L. OpenGL selalu memiliki pipa T&L, meskipun sebelum 256 itu diterapkan dalam perangkat lunak. Jadi sangat mudah bagi NVIDIA untuk hanya mengubah implementasi perangkat lunak mereka menjadi solusi perangkat keras. Tidak akan sampai D3D v7 sampai D3D akhirnya memiliki dukungan T&L perangkat keras.
Dawn of Shaders, Twilight of OpenGL
Kemudian, GeForce 3 keluar. Dan banyak hal terjadi pada saat yang bersamaan.
Microsoft telah memutuskan bahwa mereka tidak akan terlambat lagi. Jadi, alih-alih melihat apa yang dilakukan NVIDIA dan kemudian menyalinnya setelah fakta, mereka mengambil posisi menakjubkan untuk pergi ke mereka dan berbicara dengan mereka. Dan kemudian mereka jatuh cinta dan memiliki konsol kecil bersama.
Perceraian berantakan terjadi kemudian. Tapi itu untuk lain waktu.
Apa artinya ini untuk PC adalah bahwa GeForce 3 keluar bersamaan dengan D3D v8. Dan tidak sulit untuk melihat bagaimana GeForce 3 memengaruhi shader D3D 8. Pixel shader Shader Model 1.0 sangat spesifik untuk perangkat keras NVIDIA. Tidak ada upaya apa pun yang dilakukan pada abstrak perangkat keras NVIDIA; SM 1.0 adalah apa pun yang dilakukan GeForce 3.
Ketika ATI mulai terjun ke perlombaan kartu grafis dengan Radeon 8500, ada masalah. Pipa pemrosesan piksel 8500 lebih kuat dari pada barang-barang NVIDIA. Jadi Microsoft mengeluarkan Shader Model 1.1, yang pada dasarnya adalah "Apapun yang dilakukan 8500."
Itu mungkin terdengar seperti kegagalan pada bagian D3D. Tetapi kegagalan dan kesuksesan adalah masalah derajat. Dan kegagalan epik terjadi di OpenGL-land.
NVIDIA menyukai OpenGL, jadi ketika GeForce 3 hit, mereka merilis sejumlah ekstensi OpenGL. Ekstensi OpenGL eksklusif : Khusus NVIDIA. Tentu, ketika 8500 muncul, itu tidak bisa menggunakan salah satu dari mereka.
Lihat, setidaknya di tanah D3D 8, Anda bisa menjalankan shader SM 1.0 pada perangkat keras ATI. Tentu, Anda harus menulis shader baru untuk memanfaatkan kesejukan 8500, tetapi setidaknya kode Anda berfungsi .
Untuk mendapatkan shaders dalam bentuk apa pun pada Radeon 8500 di OpenGL, ATI harus menulis sejumlah ekstensi OpenGL. Ekstensi OpenGL eksklusif : Hanya ATI. Jadi Anda membutuhkan NVIDIA codepath dan ATI codepath, hanya untuk mendapatkan shader sama sekali.
Sekarang, Anda mungkin bertanya, "Di mana OpenGL ARB, yang tugasnya menjaga OpenGL sekarang?" Di mana banyak komite sering berakhir: menjadi bodoh.
Lihat, saya sebutkan ARB_multitexture di atas karena sangat mempengaruhi semua ini. ARB tampaknya (dari sudut pandang orang luar) ingin menghindari gagasan tentang shader sama sekali. Mereka berpikir bahwa jika mereka menampar konfigurabilitas yang cukup ke pipeline fungsi-tetap, mereka dapat menyamai kemampuan pipa shader.
Jadi ARB merilis ekstensi demi ekstensi. Setiap ekstensi dengan kata-kata "tekstur_env" di dalamnya adalah upaya lain untuk menambal desain penuaan ini. Periksa registri: antara ekstensi ARB dan EXT, ada delapan ekstensi yang dibuat. Banyak yang dipromosikan ke versi inti OpenGL.
Microsoft adalah bagian dari ARB saat ini; mereka pergi sekitar waktu D3D 9 melanda. Jadi sangat mungkin bahwa mereka bekerja untuk menyabot OpenGL dalam beberapa cara. Saya pribadi meragukan teori ini karena dua alasan. Satu, mereka harus mendapatkan bantuan dari anggota ARB lain untuk melakukan itu, karena setiap anggota hanya mendapat satu suara. Dan yang paling penting dua, ARB tidak membutuhkan bantuan Microsoft untuk mengacaukan segalanya. Kami akan melihat bukti lebih lanjut tentang itu.
Akhirnya ARB, kemungkinan di bawah ancaman baik dari ATI dan NVIDIA (keduanya anggota aktif) akhirnya menarik kepala mereka cukup lama untuk memberikan shader gaya perakitan yang sebenarnya.
Ingin sesuatu yang lebih bodoh?
T&L perangkat keras. Sesuatu yang dimiliki OpenGL terlebih dahulu . Yah, ini menarik. Untuk mendapatkan kinerja semaksimal mungkin dari perangkat keras T&L, Anda perlu menyimpan data vertex Anda di GPU. Bagaimanapun, itu adalah GPU yang benar-benar ingin menggunakan data vertex Anda.
Di D3D v7, Microsoft memperkenalkan konsep Vertex Buffer. Ini adalah petak memori GPU yang dialokasikan untuk menyimpan data titik.
Ingin tahu kapan OpenGL mendapatkan yang setara dengan ini? Oh, NVIDIA, sebagai pencinta segala hal OpenGL (selama itu adalah ekstensi NVIDIA yang dipatenkan), merilis ekstensi rentang array vertex ketika GeForce 256 hit pertama kali. Tetapi kapan ARB memutuskan untuk menyediakan fungsionalitas serupa?
Dua tahun kemudian . Ini setelah mereka menyetujui vertex dan fragmen shaders (pixel dalam bahasa D3D). Untuk itu diperlukan waktu berapa lama ARB mengembangkan solusi lintas platform untuk menyimpan data verteks dalam memori GPU. Sekali lagi, sesuatu yang hardware T & L perlu untuk mencapai performa maksimal.
Satu Bahasa untuk Merusak Mereka Semua
Jadi, lingkungan pengembangan OpenGL retak untuk sementara waktu. Tidak ada shader lintas-perangkat keras, tidak ada penyimpanan simpul GPU lintas-perangkat keras, sementara pengguna D3D menikmati keduanya. Bisakah ini menjadi lebih buruk?
Anda ... Anda bisa mengatakan itu. Masukkan Labs 3D .
Siapa mereka, Anda mungkin bertanya? Mereka adalah perusahaan mati yang saya anggap sebagai pembunuh OpenGL yang sebenarnya. Tentu, ketidakmampuan umum ARB membuat OpenGL rentan ketika seharusnya memiliki D3D. Tapi 3D Labs mungkin satu-satunya alasan terbesar dalam pikiran saya untuk keadaan pasar OpenGL saat ini. Apa yang bisa mereka lakukan untuk menyebabkan itu?
Mereka merancang Bahasa Shading OpenGL.
Lihat, 3D Labs adalah perusahaan yang sedang sekarat. GPU mahal mereka sedang dipinggirkan oleh meningkatnya tekanan NVIDIA di pasar workstation. Dan tidak seperti NVIDIA, 3D Labs tidak memiliki kehadiran di pasar utama; jika NVIDIA menang, mereka mati.
Yang mereka lakukan.
Jadi, dalam upaya untuk tetap relevan di dunia yang tidak menginginkan produk mereka, 3D Labs muncul ke Konferensi Pengembang Game yang mengadakan presentasi untuk sesuatu yang mereka sebut "OpenGL 2.0". Ini akan menjadi penulisan ulang lengkap dari awal dari OpenGL API. Dan itu masuk akal; ada banyak cruft di API OpenGL pada saat itu (catatan: cruft itu masih ada). Lihat saja bagaimana pemuatan tekstur dan pengikatan bekerja; itu semi-misterius.
Bagian dari proposal mereka adalah bahasa yang teduh. Tentu saja. Namun, tidak seperti ekstensi ARB lintas-platform saat ini, bahasa shading mereka adalah "tingkat tinggi" (C adalah tingkat tinggi untuk bahasa bayangan. Ya, sungguh).
Sekarang, Microsoft sedang mengerjakan bahasa shading tingkat tinggi mereka sendiri. Yang mereka, dalam semua imajinasi kolektif Microsoft, disebut ... High Level Shading Language (HLSL). Namun, pendekatan mereka berbeda secara mendasar terhadap bahasa.
Masalah terbesar dengan bahasa shader 3D Labs adalah built-in. Lihat, HLSL adalah bahasa yang didefinisikan oleh Microsoft. Mereka merilis kompiler untuk itu, dan menghasilkan kode perakitan Shader Model 2.0 (atau yang lebih baru model shader), yang akan Anda masukkan ke D3D. Pada hari-hari D3D v9, HLSL tidak pernah disentuh oleh D3D secara langsung. Itu abstraksi yang bagus, tapi itu murni opsional. Dan seorang pengembang selalu memiliki kesempatan untuk pergi di belakang kompiler dan men-tweak output untuk kinerja maksimum.
Bahasa Lab 3D tidak memiliki itu. Anda memberi pengemudi bahasa seperti-C, dan menghasilkan shader. Akhir dari cerita. Bukan perakitan shader, bukan sesuatu yang Anda beri makan sesuatu yang lain. Objek OpenGL yang sebenarnya mewakili shader.
Apa ini artinya adalah bahwa pengguna OpenGL terbuka untuk keanehan pengembang yang baru saja terbiasa mengompilasi bahasa seperti perakitan. Bug kompiler merajalela di OpenGL Shading Language (GLSL) yang baru saja dibaptis. Yang lebih buruk, jika Anda berhasil mendapatkan shader untuk dikompilasi di beberapa platform dengan benar (tidak ada prestasi berarti), Anda masih mengalami pengoptimal hari ini. Yang tidak seoptimal mungkin.
Meskipun itu adalah kelemahan terbesar di GLSL, itu bukan satu-satunya kelemahan. Oleh jauh .
Dalam D3D, dan dalam bahasa assembly yang lebih lama di OpenGL, Anda bisa mencampur dan mencocokkan shader vertex dan fragmen (piksel). Selama mereka berkomunikasi dengan antarmuka yang sama, Anda bisa menggunakan vertex shader dengan shader fragmen yang kompatibel. Dan bahkan ada tingkat ketidakcocokan yang bisa mereka terima; vertex shader dapat menulis output yang tidak dibaca oleh shader fragmen. Dan seterusnya.
GLSL tidak memilikinya. Vertex dan fragmen shader digabungkan bersama menjadi apa yang disebut Lab 3D "objek program". Jadi jika Anda ingin berbagi program vertex dan fragmen, Anda harus membangun beberapa objek program. Dan ini menyebabkan masalah terbesar kedua.
Lihat, Labs 3D mengira mereka pintar. Mereka mendasarkan model kompilasi GLSL pada C / C ++. Anda mengambil .c atau .cpp dan mengkompilasinya ke file objek. Kemudian Anda mengambil satu atau lebih file objek dan menautkannya ke dalam suatu program. Jadi begitulah cara GLSL mengkompilasi: Anda mengkompilasi shader Anda (vertex atau fragmen) menjadi objek shader. Lalu Anda meletakkan objek shader tersebut di objek program, dan menautkannya bersama untuk membentuk program Anda yang sebenarnya.
Meskipun hal ini memungkinkan ide-ide keren yang potensial seperti memiliki shader "perpustakaan" yang berisi kode tambahan yang bisa disebut oleh shader utama, yang dimaksud dalam praktiknya adalah bahwa shader dikompilasi dua kali . Sekali dalam tahap kompilasi dan sekali dalam tahap menghubungkan. Kompiler NVIDIA khususnya dikenal pada dasarnya menjalankan kompilasi dua kali. Itu tidak menghasilkan semacam perantara kode objek; itu hanya mengkompilasinya sekali dan membuang jawabannya, lalu mengkompilasinya lagi pada waktu tautan.
Jadi, bahkan jika Anda ingin menautkan vertex shader Anda ke dua shader fragmen yang berbeda, Anda harus melakukan kompilasi lebih banyak daripada di D3D. Terutama karena kompilasi bahasa seperti C semua dilakukan secara offline , bukan pada awal pelaksanaan program.
Ada masalah lain dengan GLSL. Mungkin tampaknya salah untuk menyalahkan Labs 3D, karena ARB akhirnya menyetujui dan memasukkan bahasa (tapi tidak ada yang lain dari inisiatif "OpenGL 2.0" mereka). Tapi itu ide mereka.
Dan inilah bagian yang sangat menyedihkan: Labs 3D benar (kebanyakan). GLSL bukan bahasa shading berbasis vektor seperti HLSL pada saat itu. Ini karena perangkat keras 3D Labs adalah perangkat keras skalar (mirip dengan perangkat keras NVIDIA modern), tetapi mereka pada akhirnya tepat ke arah banyak pembuat perangkat keras menggunakan perangkat keras mereka.
Mereka benar untuk menggunakan model kompilasi-online untuk bahasa "tingkat tinggi". D3D bahkan akhirnya beralih ke itu.
Masalahnya adalah bahwa Lab 3D benar pada waktu yang salah . Dan dalam mencoba memanggil masa depan terlalu dini, dalam mencoba menjadi bukti masa depan, mereka mengesampingkan masa kini . Kedengarannya mirip dengan bagaimana OpenGL selalu memiliki kemungkinan untuk fungsi T&L. Kecuali bahwa pipa T&L OpenGL masih berguna sebelum T&L perangkat keras, sementara GLSL adalah kewajiban sebelum dunia menyadarinya.
GLSL adalah bahasa yang baik sekarang . Tetapi untuk saat ini? Itu mengerikan. Dan OpenGL menderita karenanya.
Jatuh Menuju Apotheosis
Sementara saya berpendapat bahwa Labs 3D menghantam pukulan fatal, itu adalah ARB sendiri yang akan mendorong paku terakhir di peti mati.
Ini adalah kisah yang mungkin pernah Anda dengar. Pada saat OpenGL 2.1, OpenGL mengalami masalah. Itu memiliki banyak peninggalan warisan. API tidak mudah digunakan lagi. Ada 5 cara untuk melakukan hal-hal, dan tidak tahu mana yang tercepat. Anda bisa "mempelajari" OpenGL dengan tutorial sederhana, tetapi Anda tidak benar-benar mempelajari OpenGL API yang memberi Anda kinerja nyata dan kekuatan grafis.
Jadi ARB memutuskan untuk mencoba penemuan ulang OpenGL lainnya. Ini mirip dengan 3D Labs "OpenGL 2.0", tetapi lebih baik karena ARB ada di belakangnya. Mereka menyebutnya "Longs Peak."
Apa yang sangat buruk tentang meluangkan waktu untuk meningkatkan API? Ini buruk karena Microsoft telah membiarkan diri mereka sendiri rentan. Lihat, ini pada saat peralihan Vista.
Dengan Vista, Microsoft memutuskan untuk melembagakan beberapa perubahan yang sangat dibutuhkan pada driver layar. Mereka memaksa pengemudi untuk tunduk pada OS untuk virtualisasi memori grafis dan berbagai hal lainnya.
Sementara orang dapat memperdebatkan manfaat dari ini atau apakah itu benar-benar mungkin, faktanya tetap ini: Microsoft menganggap D3D 10 sebagai Vista (dan di atas) saja. Bahkan jika Anda memiliki perangkat keras yang mampu D3D 10, Anda tidak bisa menjalankan aplikasi D3D 10 tanpa juga menjalankan Vista.
Anda mungkin juga ingat bahwa Vista ... um, katakan saja itu tidak bekerja dengan baik. Jadi Anda memiliki OS yang berkinerja buruk, API baru yang hanya berjalan pada OS itu, dan generasi baru perangkat keras yang membutuhkan API dan OS untuk melakukan sesuatu yang lebih cepat daripada generasi sebelumnya.
Namun, pengembang dapat mengakses fitur D3D 10-kelas melalui OpenGL. Yah, mereka bisa jika ARB tidak sibuk bekerja di Longs Peak.
Pada dasarnya, ARB menghabiskan waktu satu setengah tahun hingga dua tahun untuk membuat API lebih baik. Pada saat OpenGL 3.0 benar-benar keluar, adopsi Vista naik, Win7 sudah dekat untuk menempatkan Vista di belakang mereka, dan sebagian besar pengembang game tidak peduli dengan fitur kelas D3D-10. Bagaimanapun, perangkat keras D3D 10 menjalankan aplikasi D3D 9 dengan baik. Dan dengan meningkatnya port PC-ke-konsol (atau pengembang PC yang melompat ke pengembangan konsol. Pilihlah), pengembang tidak memerlukan fitur kelas D3D 10.
Sekarang, jika pengembang memiliki akses ke fitur-fitur itu sebelumnya melalui OpenGL pada mesin WinXP, maka pengembangan OpenGL mungkin telah menerima suntikan yang sangat dibutuhkan di lengan. Tetapi ARB melewatkan kesempatan mereka. Dan apakah Anda ingin tahu bagian terburuknya?
Meskipun menghabiskan dua tahun berharga untuk membangun kembali API dari awal ... mereka masih gagal dan baru saja kembali ke status quo (kecuali untuk mekanisme penghentian).
Jadi, ARB tidak hanya melewatkan kesempatan penting , mereka bahkan tidak menyelesaikan tugas yang membuat mereka kehilangan kesempatan itu. Cukup banyak epik yang gagal di sekitar.
Dan itulah kisah OpenGL vs Direct3D. Kisah tentang peluang yang terlewatkan, kebodohan besar, kebutaan yang disengaja, dan kebodohan sederhana.
sumber
Which they, in all of Microsoft's collective imagination, called... the High Level Shading Language (HLSL).
LOLled selama lebih dari 6 menit.Saya merasa aneh bahwa semua orang berfokus pada basis pengguna, ketika pertanyaannya adalah 'pengembang game', bukan 'editor game'.
Bagi saya, sebagai pengembang, Linux adalah kekacauan berdarah. Ada begitu banyak versi, manajer desktop, kit UI, dll ... Jika saya tidak ingin mendistribusikan karya saya sebagai sumber terbuka, di mana pengguna dapat (mencoba) mengkompilasi ulang sehingga cocok dengan kombinasi unik dari paket, perpustakaan dan pengaturan, ini adalah mimpi buruk !
Di sisi lain, Microsoft menyediakan (sebagian besar waktu) kompatibilitas yang luar biasa dan stabilitas platform. Dimungkinkan untuk menargetkan seluruh jajaran mesin dengan satu pemasang sumber tertutup, misalnya komputer yang menjalankan rasa Windows XP, Vista dan 7, 32 dan 64 bit, tanpa DX atau VC distribusi yang dapat diinstal, dll ...
Satu hal lagi, HARAP SEMUA ORANG DI INTERNET STOP MEMBANDINGKAN OPENGL DAN DIRECTX! Bandingkan Direct3D vs OpenGL atau jangan lakukan ini . DirectX menyediakan dukungan input, dukungan suara, pemutaran film, dll. Yang tidak dimiliki OpenGL.
sumber
Itu karena ada lebih banyak pengguna Windows di planet ini daripada Linux dan Mac. Yang benar adalah bahwa orang membuat sesuatu yang memiliki pasar terbesar.
Hal yang sama berlaku untuk ponsel: Android dan iPhone memiliki gim yang luar biasa tetapi Windows Mobile dan Symbian tidak ...
sumber
Karena Windows memiliki lebih dari 90% pangsa pasar, dan Linux (karena Anda secara khusus bertanya tentang Linux) memiliki reputasi memiliki banyak pengguna yang tidak suka membayar untuk perangkat lunak. Benar atau tidaknya itu tidak relevan; persepsi ada di sana dan itu mempengaruhi keputusan orang.
sumber
Karena Windows didukung oleh organisasi besar, yang lebih dari satu dekade lalu memutuskan mereka ingin pengembangan game terjadi pada platform mereka .
Ini tidak benar untuk Mac, dan itu tidak benar sekarang. Bahkan untuk iOS. Apple tidak menyediakan alat untuk pengembangan game iOS. Tetapi ini adalah pasar yang sangat besar (ada lebih banyak iPhone di luar sana, dibandingkan dengan PC pada tahun 1995) dengan persaingan yang relatif kecil, jadi bagaimanapun orang melakukannya.
Sedangkan untuk Linux, bahkan tidak ada semacam institusi pusat, yang dapat menetapkan prioritas apa pun. Arah kemana Linux akan berjalan, lebih sedikit ditentukan oleh sekelompok programmer yang sangat bagus, namun sedikit tidak ramah.
Untuk membuat gim PC hari ini, Anda membutuhkan banyak artis 2d / 3d, perancang gim, penulis naskah, aktor, penguji, dan yang tidak. Mengenai pemrograman yang sebenarnya, Anda mungkin cukup menggunakan mesin gim yang sebenarnya (CryEngine, Unreal Engine, Quake Engine, Source Engine). Jadi, Anda mungkin dapat melakukan semuanya tanpa programmer yang sebenarnya.
Karena itu, dan karena sifat bisnis, programmer tidak banyak menentukan platform mana yang dipilih. Dan biasanya, manajer mencari dukungan, yang merupakan sesuatu yang diklaim Microsoft untuk ditawarkan, dan untuk menangani hal-hal yang entah bagaimana dapat disesuaikan dengan pola pikir mereka, yang bukan open source.
Karena alasan itu, sebagian besar pengembangan perangkat lunak pengguna akhir komersial dilakukan di windows.
Saya bekerja untuk sebuah perusahaan, yang menciptakan game flash, dan karenanya tidak terikat pada platform tertentu. Namun, kita semua mengembangkan di windows, karena sebagian besar alat yang kita gunakan tidak tersedia untuk Linux.
sumber
Seperti yang telah dikatakan beberapa orang, bagian terpenting adalah basis pengguna. 95% pengguna PC menggunakan Windows. Gamer PC menggunakan hampir secara eksklusif Windows. Bahkan mereka yang menggunakan Mac atau Linux paling sering menjalankan permainan Windows melalui beberapa virtualisasi atau emulasi (dengan sangat sedikit pengecualian).
Tetapi demografis bukanlah segalanya. Saya tidak akan meremehkan bagian yang dilakukan Microsoft untuk membuat platform lebih menarik bagi pengembang game. Pada dasarnya Anda mendapatkan seperangkat alat berfitur lengkap gratis , yang paling penting XNA Game Studio . Ini memungkinkan tidak hanya pengembangan untuk Windows, tetapi juga untuk Xbox360 . Dan dengan edisi terbaru bahkan untuk ponsel WP7. Jelas karena ini adalah alat Microsoft, ia menggunakan DirectX, bukan OpenGL.
sumber
Ewwww, saya tidak. Saya menggunakan Linux hampir secara eksklusif. Saya dual-boot ke Windows untuk membuat Windows membangun, dan menggunakan Mac untuk membangun Mac, tapi hanya itu.
Triknya adalah kerangka kerja lintas platform yang telah kami kembangkan selama bertahun-tahun. Permainan kami dibangun di atas itu, dan berperilaku identik di Linux / OpenGL, Mac / OpenGL, dan Windows / Direct3D (dan segera di iOS / OpenGL).
Memang perusahaan saya tidak membuat judul AAA, jadi itu mungkin tidak berlaku untuk ini, tetapi kami membuat game kasual kasual (lihat situs web - CSI: NY, Pembunuhan yang Dia Tulis dan dua tahun 2011 mendatang adalah contoh judul yang menggunakan lisensi penting, The Kasing Sherlock Holmes 1 dan 2 yang Hilang juga cukup berhasil)
Saya tidak akan menyerah gedit + gcc + gdb + valgrind untuk hal lain.
sumber
Saat ini Linux lebih bersifat curio ketika menyangkut pengembangan game dan sebagian besar pengembang akan lebih baik secara finansial melakukan versi port OS X sebelum versi Linux (lihat hal-hal seperti Steam). Bahkan pasar konsol bernilai lebih dari dua platform yang digabungkan untuk game ...
Jika Anda ingin mono platform DirectX baik-baik saja. Jika Anda ingin menjadi cross platform, ada peluang besar Anda harus menggunakan OpenGL di setidaknya beberapa platform lainnya.
sumber
Jawabannya jelas. Tujuan penulisan game adalah untuk menghasilkan uang. Semakin banyak pengguna akhir yang menjalankan Windows, oleh karena itu ada pasar yang lebih besar dan Anda diharapkan menghasilkan lebih banyak uang dari permainan Windows daripada permainan Linux. Sesederhana itu.
Jika Anda pernah bertanya pada diri sendiri pertanyaan 'Mengapa seseorang melakukan ...', ingatlah bahwa uang membuat dunia berputar.
sumber
Alat, alat, alat.
Itulah sebabnya. Berkembang di Windows dan Anda mendapatkan akses ke beberapa alat pengembangan terbaik di planet ini. Tidak ada yang datang bahkan jauh dari debugger Visual Studio, DirectX Debug Runtimes mengagumkan, PIX mengagumkan, dan padanan yang sebanding tidak ada pada platform / API lain. Tentu, ada beberapa hal bagus di sana; Saya tidak mengatakan bahwa alat pada platform lain buruk, tetapi yang disediakan MS jauh di depan paket (pengecualian terhormat: Valgrind) yang bahkan tidak lucu.
Intinya adalah bahwa alat ini membantu Anda. Mereka membantu Anda menyelesaikan sesuatu, mereka membantu Anda menjadi produktif, mereka membantu Anda fokus pada kesalahan dalam kode Anda sendiri daripada bergulat dengan API yang tidak pernah berperilaku seperti yang didokumentasikan.
sumber
Jadi saya telah memeriksa semua jawaban ini, dan sebagai pengembang game yang memiliki kode pada game konsol yang telah ada di rak Walmart, saya memiliki jawaban yang sangat berbeda.
Distribusi.
Lihat, jika Anda ingin berada di konsol Nintendo, Anda harus mendapatkan izin Nintendo, membeli dari pabrik Nintendo, membayar biaya overhead Nintendo, bernegosiasi dengan Walmart, berurusan dengan pergudangan, Anda memerlukan uang di depan untuk memproduksi, untuk mencetak kotak, untuk mengirim , untuk melakukan semua asuransi, dan lain-lain.
Jika Anda ingin masuk ke XBox, pasti ada XBLA, tetapi Anda masih membutuhkan restu dari Microsoft, Anda harus menunggu giliran, ada puluhan ribu dolar hanya untuk merilis patch, dll.
Di iOS, Anda masih membutuhkan Apple baik-baik saja, dan mereka dapat (dan memang) menarik Anda.
Pada Steam, Anda masih memerlukan izin Valve atau lampu hijau, dan banyak uang.
.
Di Windows? Anda membuat situs web dan tombol unduh.
.
Saya tidak mengatakan platform lain tidak berharga. Tapi ada begitu * banyak * hal mengerikan terjadi ketika Anda mencoba untuk mengembangkan permainan, itu padaku, janji bisa hanya menampar biner di situs dan fokus pada pekerjaan - setidaknya untuk memulai - benar-benar menurunkan banyak hambatan kegagalan potensial.
"Kita bisa melakukan port XBLA nanti, ketika keadaan sudah stabil" mentalitas.
Dan pada tingkat yang lebih rendah yakin ini juga baik untuk Linux, dan jika tujuh pelanggan baik, Anda bisa mulai dari sana.
Tetapi Windows memiliki tiga keuntungan besar: pengembangan yang benar-benar terbuka, penyebaran yang benar-benar terbuka, dan basis pelanggan yang sangat besar dan sangat aktif yang tertarik pada hal-hal unik.
Sulit membayangkan di mana lagi saya lebih suka memulai.
sumber
Saya pikir Anda harus membaca lebih lanjut tentang Sejarah DirectX dan Artikel Ini .
Saya pikir MS memilih DX daripada openGL karena mereka suka mengunci orang agar menggunakan OS mereka sendiri.
sumber
Banyak yang berkaitan dengan politik dan kontrol. Pada akhir 90-an, SGI dan MS sebenarnya setuju untuk menggabungkan upaya:
http://en.wikipedia.org/wiki/Fahrenheit_graphics_API
SGI banyak berinvestasi dalam proyek ini, MS tidak. SGI membutuhkan MS lebih dari MS membutuhkan SGI. Sisanya adalah sejarah.
D3D dan OpenGL adalah dua API yang sangat berbeda, tergantung pada pengembang untuk memilih mana yang tepat untuk kebutuhan Anda.
sumber
Hanya karena Linux gagal secara mengerikan sebagai sistem desktop. Seperti yang ditunjukkan seseorang sebelumnya, Linux adalah kekacauan bagi pengembang (pustaka yang berbeda, ui toolkit, dll)
Masalah lain adalah freetardism dan kurangnya dukungan untuk perangkat lunak berpemilik. Nvidia selalu menyediakan driver yang bagus (berpemilik) untuk Linux namun Ubuntu dan distro lainnya tidak mengirimkannya. Juga tidak ada antarmuka driver biner yang tersedia untuk Linux seperti untuk Windows. (Ada file teks bernama binaryApiNonsense.txt atau sesuatu di sumber Kernel) Setelah mengatakan bahwa hanya perangkat keras Nvidia yang didukung dengan benar di Linux. Anda dapat memainkan sebagian besar game perangkat lunak ID menggunakan perangkat keras Nvidia di Linux.
Alat pengembangan hal berikutnya. MSFT menyediakan dukungan C ++ yang luar biasa dan debugger Visual Studio lebih baik daripada gdb terkait C ++. Last but not least, alat lebih lanjut hilang seperti Photoshop. Juga .net memungkinkan Anda membuat alat gui dengan cepat. Banyak studio game memberi kode alat mereka untuk penggunaan internal menggunakan kerangka .net.
Saya hampir lupa: Sistem grafisnya mengerikan, pada hari-hari mereka baru saja mem-porting X11 karena itu adalah hal termudah yang berhasil. Mereka gagal merancang dan mengimplementasikan sistem grafis modern yang dimiliki OSx dan Win dengan benar.
sumber