OpenGL atau DirectX: yang lebih baik, ciri perbandingan, ciri, petua. Kad video

Nampaknya, ramai pengguna, khususnya, semua mereka yang lebih suka menggunakan komputer untuk memasang dan bermain permainan intensif sumber moden, tahu bahawa dalam tetapan grafik anda boleh menggunakan cara khas mempercepatkan output imej dan meningkatkan kualiti imej OpenGL atau DirectX. Apa yang lebih baik untuk digunakan kegunaan penuh semua sumber tersembunyi sistem komputer dan capai prestasi maksimum? Soalan ini agak kontroversial, dan biasanya tidak mungkin untuk menjawab dengan tegas memihak kepada mana-mana satu platform, kerana semuanya bergantung pada matlamat khusus yang pengguna atau pembangun tetapkan untuk dirinya sendiri, serta pada setiap situasi tertentu, yang mungkin sebahagiannya dikaitkan dengan perkakasan dalam bentuk pemecut grafik, its sokongan perisian dalam bentuk pemandu dan beberapa aspek tambahan. Mari cuba cari yang mana lebih baik - OpenGL atau DirectX - dengan beralih kepada sumber maklumat rasmi dan bergantung pada pendapat pengguna dan pembangun perisian yang mungkin memerlukan sokongan untuk teknologi tersebut.

Apakah OpenGL dan DirectX?

Mari kita mulakan dengan fakta bahawa di kalangan pengguna biasa terdapat salah tanggapan bahawa kedua-dua komponen yang diterangkan ini adalah enjin grafik. Di sinilah persoalan yang salah timbul tentang enjin mana yang lebih baik - OpenGL atau DirectX?

Hakikatnya adalah bahawa platform ini hanya sebahagiannya berkaitan dengan enjin ini, kerana ia secara eksklusif perisian, yang membolehkan enjin program (permainan) berinteraksi dengan peralatan yang dipasang(paling kerap dengan video dan kad bunyi) melalui pemandu mereka, yang bertindak sebagai perantara. Malah, OpenGL dan DirectX adalah sebahagian daripada antara muka pengaturcaraan aplikasi Dengan kit yang diperlukan perpustakaan, kelas, definisi, struktur, pemalar dan fungsi yang digunakan untuk memastikan berfungsi dengan produk perisian luaran yang dipasang di sistem operasi.

Untuk apa teknologi ini digunakan?

Sememangnya, selalunya anda boleh menemui soalan tentang grafik yang lebih baik - OpenGL atau DirectX? Kenyataan ini juga sebahagiannya tidak betul, kerana kita boleh bercakap bukan sahaja tentang menggunakan sumber kad video, tetapi juga bunyi atau mana-mana "perkakasan" dan peranti maya multimedia. Tetapi selalunya kita benar-benar bercakap tentang pemecut grafik. Pada masa yang sama, anda perlu memahami dengan jelas bahawa pilihan yang memihak kepada satu atau satu lagi "jambatan" yang memastikan interaksi kad video dengan permainan yang dipasang atau mana-mana program lain di mana perlu mungkin bergantung pada betapa wajibnya sokongan tersebut.

DALAM permainan moden Dengan tekstur yang kompleks dan adegan dinamik yang dilukis dengan teliti, sokongan sedemikian amat diperlukan. Tetapi masalahnya ialah tidak semua pemecut grafik boleh menggunakan sokongan sedemikian dengan betul. Dalam kes ini, semuanya bergantung kepada pemandu. Tidak kira betapa bergayanya kad itu, tetapi dengan perisian kawalan (pemacu) yang lapuk, ia tidak akan dapat menggunakan semua keupayaan yang pada asalnya diisytiharkan oleh pengilang. Walau bagaimanapun, dalam kebanyakan permainan atau dalam program untuk bekerja dengan multimedia (contohnya, untuk pemprosesan video), selalunya perlu memilih sokongan mana yang hendak dipasang dalam tetapan, mengadukan satu platform dengan yang lain (dalam versi bahasa Inggeris ini biasanya kelihatan seperti "OpenGL vs DirectX") .

Perbezaan utama antara DirectX dan OpenGL

Bagi perbezaan utama, tanpa pergi ke aspek teknikal berfungsi, segera boleh diperhatikan bahawa platform DirectX, yang merupakan pembangunan eksklusif Microsoft Corporation, bertujuan secara eksklusif untuk digunakan pada sistem Windows dan sebahagiannya pada Xbox, dan OpenGL ialah teknologi merentas platform yang diedarkan secara bebas yang boleh digunakan dalam sistem pengendalian lain ( malah yang mudah alih). Lesen GNU membenarkan sesiapa sahaja menyumbang kepada komponen API ini perubahan sendiri dan tambahan yang berkaitan dengan penambahbaikannya untuk meningkatkan prestasi kad video yang sama, manakala penambahbaikan DirectX hanya boleh dijangka apabila versi baharu platform dikeluarkan. Lebih-lebih lagi, walaupun dengan pemacu terbaharu, apabila digunakan pada versi lama jambatan, pemecut grafik tidak menghasilkan prestasi yang diisytiharkan oleh pengilang.

Kelebihan dan kekurangan utama

Bercakap tentang mana yang lebih baik - OpenGL atau DirectX 11 (12), perlu diperhatikan bahawa platform pertama hanya bertujuan untuk grafik, dan yang kedua boleh digunakan secara umum untuk semua yang berkaitan dengan multimedia (untuk grafik dalam dalam kes ini komponen Direct3D bertanggungjawab).

Di samping itu, ramai pakar ambil perhatian bahawa dalam sangat darjat tinggi pilihan yang memihak kepada satu jambatan atau yang lain mungkin juga bergantung pada jenisnya kad grafik. Tetapi, jika kita mendekati perbandingan dengan fikiran terbuka, dipercayai bahawa dari segi liputan platform OpenGL kelihatan lebih baik, tetapi DirectX menang dari segi menjadi produk perisian siap pakai kelas Plug&Play. Walau bagaimanapun, kita tidak harus lupa bahawa kit alat DirectX terkini versi sudah tersedia dalam OpenGL, tetapi sokongan maklum balas Tidak.

OpenGL atau DirectX: yang mana lebih baik untuk permainan?

Bagi permainan, walaupun di sini adalah mustahil untuk memberikan jawapan yang pasti. Sebagai contoh, agak kerap anda boleh mencari komen tentang fakta itu cip grafik Barisan Radeon 9800 markah tertinggi dalam ujian yang ditunjukkan berdasarkan DirectX, dan Kad GeForce Siri 5XXX - apabila menggunakan OpenGL. Tetapi DirectX mempunyai satu perkara lagi kelebihan yang tidak dapat dinafikan.

Memandangkan jambatan OpenGL pada asalnya dicipta untuk platform lain, pelbagai jenis pepijat mungkin muncul bersamanya dalam Windows, tetapi DirectX membolehkan anda menggunakan permainan dengan agak bertolak ansur walaupun pada relatifnya. komputer ketinggalan zaman tanpa brek ( contoh yang bersinar Itulah sebabnya permainan Age Of Empires).

Ia juga berlaku sebaliknya. Sebagai contoh, sesetengah pengguna ambil perhatian bahawa DOOM 3 pada kad siri Radeon X1XXX dengan menggunakan OpenGL ia hanya "terbang", dan Half-Life 2 "perlahan" sangat kerap. Tetapi di sini, nampaknya, semuanya juga bergantung kepada pemandu.

Tetapi, pada umumnya, jika permainan menyokong penggunaan kedua-dua teknologi, adalah lebih baik untuk melihat hasil kad video apabila menggunakan setiap mod secara bergilir-gilir. Tidak perlu dikatakan bahawa untuk mencapai prestasi optimum, kedua-dua platform itu sendiri dan pemacu pemecut grafik mesti dikemas kini kepada yang paling banyak. versi terkini.

Mana yang lebih baik untuk BlueStacks: DirectX atau OpenGL?

Selalunya anda boleh menemui soalan tentang penggunaan salah satu pengemula sistem Android paling popular yang dipanggil BlueStacks. Platform mana yang lebih disukai dalam BlueStacks - OpenGL atau DirectX? Malangnya, adalah mustahil untuk memberikan jawapan yang pasti di sini sama ada.

Walau bagaimanapun, tidak dinyatakan bahawa jika anda memasang permainan melalui emulator ini, adalah lebih baik menggunakan OpenGL, tetapi jika permainan menjadi perlahan, maka anda perlu bertukar kepada DirectX. Tetapi, sekali lagi, semua kebimbangan ini sahaja grafik permainan. Dalam kes pemprosesan profesional dan pemaparan video akan memerlukan beberapa percubaan yang serius.

Akhir sekali, jika kita bercakap tentang apa yang lebih baik - OpenGL atau DirectX - untuk pembangun yang baru mula menguasai teknologi ini dan mengambil langkah pertamanya, kebanyakan pakar dalam bidang ini ambil perhatian bahawa adalah lebih baik untuk membiasakan diri dengan prinsip operasi dahulu. dan kit alat DirectX, memandangkan platform ini kelihatan lebih mudah untuk pemula, dan kit SDK yang baik sentiasa dikeluarkan untuknya, direka hanya untuk memudahkan penyesuaian produk perisian kepada perkakasan, dan kemudian teruskan untuk mempelajari OpenGL.

Walau bagaimanapun, banyak yang mungkin bergantung pada matlamat akhir yang anda tetapkan untuk diri sendiri dan fungsi khusus setiap platform yang akan digunakan dalam setiap kes tertentu (hanya grafik, bunyi sahaja atau beberapa jenis penyelesaian gabungan).

Kesimpulan ringkas

Kesimpulannya, seperti yang sudah jelas, agak sukar untuk membuat kesimpulan yang tidak jelas yang memihak kepada satu atau komponen lain. Terdapat persaingan berterusan antara platform ini. Kadang-kadang versi baharu DirectX mendahului OpenGL dalam parameternya, tetapi apabila ia menjadi lapuk dan beberapa inovasi diperkenalkan ke OpenGL, ia mula kehilangan. Secara umum, apabila membuat pilihan, seseorang harus meneruskan semata-mata dari prinsip yang terkenal bahawa kebenaran diketahui melalui perbandingan. Cuba kedua-duanya! Hanya selepas memperoleh keputusan khusus dan untuk setiap kes tertentu, ia akan menjadi jelas bahagian mana dari skala pilihan anda akan bersandar.

Nampaknya, ramai pengguna, khususnya, semua mereka yang lebih suka menggunakan komputer untuk memasang dan bermain permainan intensif sumber moden, tahu bahawa dalam tetapan grafik anda boleh menggunakan alat khas untuk mempercepatkan output imej dan meningkatkan kualiti imej OpenGL atau DirectX. Apakah cara terbaik untuk menggunakan semua sumber tersembunyi sistem komputer dan mencapai prestasi maksimum? Soalan ini agak kontroversi, dan biasanya tidak mungkin untuk menjawab dengan tegas memihak kepada mana-mana satu platform, kerana segala-galanya bergantung pada matlamat khusus yang pengguna atau pembangun tetapkan untuk dirinya sendiri, serta pada setiap situasi tertentu, yang mungkin sebahagiannya berkaitan “ perkakasan dalam bentuk pemecut grafik, sokongan perisiannya dalam bentuk pemacu dan beberapa aspek tambahan. Mari cuba cari yang mana lebih baik - OpenGL atau DirectX - dengan beralih kepada sumber maklumat rasmi dan bergantung pada pendapat pengguna dan pembangun perisian yang mungkin memerlukan sokongan untuk teknologi tersebut.

Apakah OpenGL dan DirectX?

Mari kita mulakan dengan fakta bahawa di kalangan pengguna biasa terdapat salah tanggapan bahawa kedua-dua komponen yang diterangkan ini adalah enjin grafik. Di sinilah persoalan yang salah timbul tentang enjin mana yang lebih baik - OpenGL atau DirectX?

Hakikatnya adalah bahawa platform ini hanya sebahagiannya berkaitan dengan enjin ini, kerana ia adalah perisian eksklusif yang membolehkan enjin perisian program (permainan) berinteraksi dengan peralatan yang dipasang (paling kerap dengan kad video dan bunyi) melalui pemacu mereka, yang bertindak sebagai perantara. Malah, OpenGL dan DirectX adalah sebahagian daripada antara muka pengaturcaraan aplikasi dengan set perpustakaan, kelas, definisi, struktur, pemalar dan fungsi yang diperlukan yang digunakan untuk memastikan berfungsi dengan produk perisian luaran yang dipasang dalam sistem pengendalian.

Untuk apa teknologi ini digunakan?

Sememangnya, selalunya anda boleh menemui soalan tentang grafik yang lebih baik - OpenGL atau DirectX? Rumusan ini juga sebahagiannya tidak betul, kerana kita boleh bercakap bukan sahaja tentang menggunakan sumber kad video, tetapi juga bunyi atau mana-mana "perkakasan" dan peranti multimedia maya yang lain. Tetapi selalunya kita benar-benar bercakap tentang pemecut grafik. Pada masa yang sama, anda perlu memahami dengan jelas bahawa pilihan yang memihak kepada satu atau satu lagi "jambatan" yang memastikan interaksi kad video dengan permainan yang dipasang atau mana-mana program lain, jika perlu, mungkin juga bergantung pada bagaimana mewajibkan sokongan sedemikian. ialah.

Dalam permainan moden dengan tekstur yang kompleks dan adegan dinamik yang dilukis dengan teliti, sokongan sedemikian amat diperlukan. Tetapi masalahnya ialah tidak semua pemecut grafik boleh menggunakan sokongan sedemikian dengan betul. Dalam kes ini, semuanya bergantung kepada pemandu. Tidak kira betapa bergayanya kad itu, tetapi dengan perisian kawalan (pemacu) yang lapuk, ia tidak akan dapat menggunakan semua keupayaan yang pada asalnya diisytiharkan oleh pengilang. Walau bagaimanapun, dalam kebanyakan permainan atau dalam program untuk bekerja dengan multimedia (contohnya, untuk pemprosesan video), selalunya perlu memilih sokongan mana yang hendak dipasang dalam tetapan, mengadukan satu platform dengan yang lain (dalam versi bahasa Inggeris ini biasanya kelihatan seperti "OpenGL vs DirectX") .

Perbezaan utama antara DirectX dan OpenGL

Bagi perbezaan utama, tanpa pergi ke aspek teknikal operasi, kita boleh segera ambil perhatian bahawa platform DirectX, yang merupakan pembangunan eksklusif Microsoft Corporation, bertujuan secara eksklusif untuk digunakan pada sistem Windows dan sebahagiannya pada Xbox, dan OpenGL ialah teknologi merentas platform yang diedarkan secara bebas yang boleh digunakan dalam OS lain (malah mudah alih). Lesen GNU membenarkan sesiapa sahaja untuk menyumbang kepada komponen ini API sendiri perubahan dan penambahan yang berkaitan dengan penambahbaikannya untuk meningkatkan prestasi kad video yang sama, manakala penambahbaikan DirectX hanya boleh dijangka apabila versi baharu platform dikeluarkan. Lebih-lebih lagi, walaupun dengan pemacu terbaharu, apabila digunakan pada versi lama jambatan, pemecut grafik tidak menghasilkan prestasi yang diisytiharkan oleh pengilang.

Kelebihan dan kekurangan utama

Bercakap tentang mana yang lebih baik - OpenGL atau DirectX 11 (12), perlu diperhatikan bahawa platform pertama hanya bertujuan untuk grafik, dan yang kedua boleh digunakan secara umum untuk semua yang berkaitan dengan multimedia (dalam kes ini, komponen Direct3D adalah bertanggungjawab untuk grafik).

Di samping itu, ramai pakar menyatakan bahawa pada tahap yang sangat tinggi pilihan yang memihak kepada satu jambatan atau yang lain mungkin bergantung pada jenis kad grafik. Tetapi, jika kita mendekati perbandingan dengan fikiran terbuka, dipercayai bahawa dari segi liputan platform OpenGL kelihatan lebih baik, tetapi DirectX menang dari segi menjadi produk perisian siap pakai kelas Plug&Play. Walau bagaimanapun, kita tidak sepatutnya lupa bahawa versi terkini kit alat DirectX sudah tersedia dalam OpenGL, tetapi tiada sokongan terbalik.

OpenGL atau DirectX: yang mana lebih baik untuk permainan?

Bagi permainan, walaupun di sini adalah mustahil untuk memberikan jawapan yang pasti. Sebagai contoh, agak kerap anda boleh menemui komen tentang fakta bahawa cip grafik barisan Radeon 9800 menunjukkan keputusan terbaik dalam ujian berdasarkan DirectX, dan kad siri GeForce 5XXX menunjukkan hasil terbaik apabila menggunakan OpenGL. Tetapi DirectX mempunyai satu lagi kelebihan yang tidak dapat dinafikan.

Oleh kerana jambatan OpenGL pada asalnya dicipta untuk platform lain, pelbagai jenis pepijat mungkin muncul bersamanya dalam Windows, tetapi DirectX membolehkan anda menggunakan permainan dengan baik walaupun pada komputer yang agak ketinggalan zaman tanpa sebarang kelembapan (contoh yang menarik ialah permainan Age Of Empayar).

Ia juga berlaku sebaliknya. Sebagai contoh, sesetengah pengguna menyedari bahawa DOOM 3 pada kad siri Radeon X1XXX menggunakan OpenGL hanya "terbang", dan Half-Life 2 selalunya "melambatkan". Tetapi di sini, nampaknya, semuanya juga bergantung kepada pemandu.

Tetapi, pada umumnya, jika permainan menyokong penggunaan kedua-dua teknologi, adalah lebih baik untuk melihat hasil kad video apabila menggunakan setiap mod secara bergilir-gilir. Sudah semestinya untuk mencapai prestasi optimum, kedua-dua platform itu sendiri dan pemacu pemecut grafik harus dikemas kini kepada versi terkini.

Mana yang lebih baik untuk BlueStacks: DirectX atau OpenGL?

Selalunya anda boleh menemui soalan tentang penggunaan salah satu pengemula sistem Android paling popular yang dipanggil BlueStacks. Platform mana yang lebih disukai dalam BlueStacks - OpenGL atau DirectX? Malangnya, adalah mustahil untuk memberikan jawapan yang pasti di sini sama ada.

Walau bagaimanapun, tidak dinyatakan bahawa jika anda memasang permainan melalui emulator ini, adalah lebih baik menggunakan OpenGL, tetapi jika permainan menjadi perlahan, maka anda perlu bertukar kepada DirectX. Tetapi, sekali lagi, semua ini hanya melibatkan grafik permainan. Dalam kes pemprosesan dan pemaparan video profesional, anda perlu mencuba dengan agak serius.

Akhir sekali, jika kita bercakap tentang apa yang lebih baik - OpenGL atau DirectX - untuk pembangun yang baru mula menguasai teknologi ini dan mengambil langkah pertamanya, kebanyakan pakar dalam bidang ini ambil perhatian bahawa adalah lebih baik untuk membiasakan diri dengan prinsip operasi dahulu. dan kit alat DirectX, memandangkan platform ini kelihatan lebih mudah untuk pemula, dan kit SDK yang baik sentiasa dikeluarkan untuknya, direka khusus untuk memudahkan penyesuaian produk perisian kepada perkakasan, dan hanya kemudian meneruskan pembelajaran OpenGL.

Walau bagaimanapun, banyak yang mungkin bergantung pada matlamat akhir yang anda tetapkan untuk diri sendiri dan fungsi khusus setiap platform yang akan digunakan dalam setiap kes tertentu (hanya grafik, bunyi sahaja atau beberapa jenis penyelesaian gabungan).

Kesimpulan ringkas

Kesimpulannya, seperti yang sudah jelas, agak sukar untuk membuat kesimpulan yang tidak jelas yang memihak kepada satu atau komponen lain. Terdapat persaingan berterusan antara platform ini. Kadang-kadang baru Versi DirectX dari segi parameternya ia mendahului OpenGL, tetapi apabila ia menjadi ketinggalan zaman, serta beberapa inovasi diperkenalkan ke OpenGL, ia mula kalah. Secara umum, apabila membuat pilihan, seseorang harus meneruskan semata-mata dari prinsip yang terkenal bahawa kebenaran diketahui melalui perbandingan. Cuba kedua-duanya! Hanya selepas memperoleh keputusan khusus dan untuk setiap kes tertentu, ia akan menjadi jelas bahagian mana dari skala pilihan anda akan bersandar.

Selalunya terdapat pelbagai salah tanggapan tentang kedua-dua API ini.

Saya telah cuba menggariskan dalam artikel ini fakta asas yang perlu diketahui oleh pembangun dan pengguna akhir.

Memandangkan topik ini sangat holivar, saya cuba mengekalkan nada yang neutral yang mungkin.

Pandangan mata burung

Kedua-dua API menyediakan akses kepada fungsi pecutan perkakasan Grafik 3D.

Salah Tanggapan Biasa

OpenGL ketinggalan di belakang Direct3D, dan secara amnya, berdasarkan perubahan lembap seperti itu pada spesifikasi, mungkin sudah mati sepenuhnya.

Sebenarnya, sebab salah tanggapan ini adalah kejahilan tentang sambungan. Secara umumnya, OpenGL boleh dan selalunya di hadapan(!) Direct3D dari segi inovasi, kerana... pengilang boleh menambah sambungan pada OpenGL tanpa menunggu sesiapa, manakala perubahan kepada Direct3D hanya boleh dibuat oleh Microsoft.

OpenGL adalah untuk program grafik profesional, dan Direct3D adalah untuk permainan.

Kesalahpahaman ini mempunyai sebab sejarah. OpenGL pada asalnya direka sebagai perpustakaan grafik 3D yang BOLEH, tetapi TIDAK HARUS, dipercepatkan perkakasan. Ini juga menerangkan kehadiran beberapa ciri, seperti memaparkan imej stereo, yang tidak diperlukan permainan. Direct3D telah dibangunkan kemudian, serta-merta dengan mengambil kira pecutan GPU. Pada masa kemunculan banyak pakej, kerja profesional dengan grafik Direct3D tidak wujud.

Microsoft menghantar dengan Pemacu Windows tanpa sokongan OpenGL. OpenGL akan dipaparkan tanpa pecutan, atau meniru melalui DirectX. Jadi, jika anda memerlukan sokongan OpenGL di bawah Windows, anda perlu memasang pemacu dari tapak web pengilang. Sebab-sebab penolakan OpenGL ini kemungkinan besar sekali lagi adalah politik semata-mata.

Jadi apa yang perlu dilakukan, bagaimana untuk hidup?

Nota: Bahagian ini sangat subjektif.

Jika anda seorang pembangun dan sedang memutuskan API yang hendak digunakan, maka pertimbangkan perkara berikut:
Untuk OpenGL - platform merentas besar-besaran, khususnya, ketersediaan semua fungsi baharu pada Windows XP, di mana Direct3D 10/11 tidak wujud dan tidak akan pernah wujud.
Terhadap OpenGL - pemacu dalam Windows tidak mempunyai sokongan OpenGL di luar kotak, jadi anda perlu memasangnya dari tapak web pengilang.

Jika anda baru untuk membangunkan aplikasi 3D, dan ingin menguasai bidang ini, maka saya akan mengesyorkan melakukan ini: mula-mula faham Direct3D (sebabnya mudah - Microsoft menyediakan SDK berkualiti tinggi), dan kemudian faham OpenGL (ini akan menjadi sangat mudah selepas Direct3D). Malangnya, tiada perkara seperti SDK untuk OpenGL. Oleh itu, ia akan menjadi lebih sukar untuk menguasai dari awal.

Itu sahaja. Semoga berjaya dengan perkembangan anda!

Anda bertanya: siapa mereka? Mereka adalah syarikat mati yang saya anggap sebagai pembunuh OpenGL sebenar. Sudah tentu, ketidakupayaan keseluruhan Jawatankuasa menyebabkan OpenGL terdedah apabila ia sepatutnya mengoyakkan D3D. Tetapi pada pendapat saya, Makmal 3D mungkin satu-satunya sebab keadaan semasa OpenGL di pasaran. Apa yang mereka lakukan untuk ini?

Mereka membangunkan bahasa shader untuk OpenGL.

3D Labs ialah sebuah syarikat yang hampir mati. GPU mahal mereka telah ditolak keluar dari pasaran stesen kerja dengan meningkatkan tekanan daripada Nvidia. Dan tidak seperti nVidia, Makmal 3D tidak mempunyai kehadiran dalam pasaran pengguna; kemenangan untuk nVidia bermakna kematian untuk Makmal 3D.

Itulah yang akhirnya berlaku.

Dalam usaha untuk kekal bertahan dalam dunia yang tidak memerlukan produk mereka, Makmal 3D muncul di Persidangan Pembangun Permainan dengan pembentangan apa yang mereka panggil "OpenGL 2.0." Ia adalah API OpenGL yang ditulis semula dari awal. Dan ini masuk akal, kerana pada zaman itu di OpenGL API ia penuh dengan sampah (yang, bagaimanapun, kekal di sana hingga ke hari ini). Lihat sahaja betapa esoteriknya pemuatan dan pengikatan tekstur.

Sebahagian daripada cadangan mereka adalah bahasa shader. Ya, itu sahaja. Walau bagaimanapun, tidak seperti sambungan merentas platform sedia ada, bahasa shadernya ialah "tahap tinggi" (C ialah tahap tinggi untuk bahasa shader).

Pada masa yang sama, Microsoft sedang mengusahakan bahasa shadernya sendiri. Yang mana mereka, menggunakan semua imaginasi kolektif mereka, dipanggil... High Level Shader Language (HLSL). Tetapi pendekatan mereka terhadap bahasa pada asasnya berbeza.

Masalah terbesar dengan bahasa Makmal 3D ialah ia boleh dibenamkan. Microsoft mentakrifkan bahasanya sepenuhnya secara bebas. Mereka mengeluarkan pengkompil yang menjana kod pemasangan untuk pelorek SM 2.0 (atau lebih tinggi), yang seterusnya boleh disalurkan kepada D3D. Pada masa D3D v9, HLSL tidak pernah menyentuh D3D secara langsung. Ia adalah abstraksi yang baik, tetapi tidak perlu. Pembangun sentiasa mempunyai peluang untuk mengambil ekzos pengkompil dan mengubahnya untuk prestasi maksimum.

Dalam bahasa daripada Makmal 3D tiada apa ini tidak berlaku. Anda memberi pemandu bahasa seperti C dan ia mencipta shader. Itu sahaja. Tiada shader pemasangan, tiada apa yang boleh disalurkan kepada sesuatu yang lain. Hanya objek OpenGL yang mewakili shader.

Bagi pengguna OpenGL, ini bermakna mereka tertakluk kepada kehendak pembangun OpenGL yang baru belajar cara menyusun bahasa seperti pemasangan. Pepijat berleluasa dalam penyusun bahasa peneduh baru lahir OpenGL (GLSL). Apa yang lebih teruk, jika anda berjaya mendapatkan shader untuk disusun dengan betul pelbagai platform(yang dengan sendirinya merupakan pencapaian yang hebat), dia masih tertakluk kepada pengoptimum masa-masa yang tidak optimum seperti yang mungkin.

Ini adalah besar, tetapi bukan satu-satunya kelemahan GLSL. Jauh bukan satu-satunya.

Dalam D3D, seperti dalam bahasa pemasangan OpenGL lama, anda boleh mencampur dan memadankan bucu dan pelorek serpihan dalam setiap cara yang mungkin. Anda boleh menggunakan mana-mana pelorek puncak dengan mana-mana pelorek serpihan yang serasi, asalkan ia berkomunikasi melalui antara muka yang sama. Selain itu, walaupun beberapa ketidakserasian dibenarkan: sebagai contoh, pelorek puncak boleh mengeluarkan nilai yang tidak digunakan oleh pelorek serpihan.

Tiada apa-apa seperti itu dalam GLSL. Puncak dan pelorek serpihan disatukan untuk membentuk sesuatu Makmal 3D yang dipanggil "objek perisian." Oleh itu, untuk perkongsian berbilang bucu dan pelorek serpihan masuk pelbagai kombinasi, saya terpaksa mencipta beberapa objek perisian. Ini menyebabkan masalah kedua terbesar.

Makmal 3D menganggap mereka adalah yang paling bijak. Mereka menggunakan C/C++ sebagai asas untuk model kompilasi GLSL. Ini adalah apabila anda mengambil satu fail c dan menyusunnya ke dalam fail objek, dan kemudian mengambil beberapa fail objek dan memautkannya ke dalam atur cara. Beginilah cara GLSL menyusun: mula-mula anda menyusun bucu atau pelorek serpihan ke dalam objek pelorek, kemudian anda meletakkan objek tersebut ke dalam objek perisian dan meletakkan mereka bersama-sama untuk akhirnya membentuk satu program.

Secara teorinya, ini membenarkan perkara yang menarik seperti shader "perpustakaan", yang mengandungi kod yang dipanggil oleh shader utama. Dalam amalan, ini menyebabkan shader tidak dikompil dua kali: sekali pada peringkat penyusunan dan kali kedua pada peringkat pautan. Khususnya, pengkompil dari nVidia terkenal dengan ini. Ia tidak menjana sebarang kod objek perantaraan; ia disusun pada mulanya, membuang hasilnya dan disusun semula pada peringkat pautan.

Oleh itu, untuk melampirkan shader bucu pada dua shader serpihan yang berbeza, anda perlu menyusun lebih banyak daripada dalam D3D. Terutama memandangkan semua kompilasi telah dilakukan luar talian, dan bukan sebelum pelaksanaan sebenar program.

GLSL mempunyai masalah lain juga. Mungkin salah untuk meletakkan semua kesalahan pada Makmal 3D, kerana ARB akhirnya meluluskan dan memasukkan bahasa shader dalam OpenGL (tetapi tidak ada yang lain dari cadangan 3DLabs). Walau bagaimanapun, idea asal masih dengan Makmal 3D.

Dan sekarang perkara yang paling menyedihkan: Makmal 3D adalah betul(kebanyakannya). GLSL bukan bahasa vektor seperti HLSL pada masa itu. Ini adalah kerana perkakasan Makmal 3D adalah skalar (seperti perkakasan nVidia moden), dan mereka betul-betul betul dalam mengambil arah yang diikuti oleh banyak pengeluar perkakasan.

Mereka betul tentang pilihan model kompilasi untuk bahasa "peringkat tinggi". Malah D3D akhirnya datang kepada ini.

Masalahnya ialah Makmal 3D adalah betul tentang salah masa. Dan dalam usaha untuk memasuki masa depan lebih awal, dalam cubaan untuk bersedia untuk masa depan, mereka mengetepikan masa kini. Ini kelihatan seperti fungsi T&L dalam OpenGL yang sentiasa ada. Kecuali bahawa saluran paip OpenGL T&L adalah berguna dan sebelum kemunculan T&L perkakasan, dan GLSL adalah liabiliti sebelum seluruh dunia terperangkap.

GLSL ialah bahasa yang baik Sekarang. Tetapi apa yang berlaku pada masa itu? Dia sangat teruk. Dan OpenGL mengalami ini.

Dalam perjalanan ke apotheosis

Saya menyokong pandangan bahawa Makmal 3D telah memberikan pukulan maut kepada OpenGL, tetapi ARB sendiri memalu paku terakhir ke dalam keranda.

Anda mungkin pernah mendengar cerita ini. Pada masa OpenGL 2.1, OpenGL telah masalah besar. Dia sedang mengheret bersama besar beban keserasian. API tidak lagi mudah digunakan. Satu perkara boleh dilakukan dengan lima cara yang berbeza dan tidak jelas yang mana lebih cepat. Ia mungkin untuk "mempelajari" OpenGL dengan panduan mudah, tetapi anda belum mempelajari OpenGL, yang memberikan kuasa dan prestasi grafik sebenar.

ARB memutuskan untuk membuat satu lagi percubaan untuk mencipta semula OpenGL. Ia seperti "OpenGL 2.0" daripada Makmal 3D, tetapi lebih baik kerana ARB berada di belakang usaha itu. Mereka memanggilnya "Longs Peak".

Apa yang buruk tentang meluangkan sedikit masa untuk meningkatkan API? Berita buruknya ialah Microsoft berada dalam kedudukan yang agak tidak menentu. Ini adalah masa peralihan ke Vista.

DALAM Vista Microsoft memutuskan untuk membuat perubahan yang lama ditunggu-tunggu kepada pemacu grafik. Mereka memaksa pemandu untuk beralih kepada OS untuk virtualisasi ingatan grafik dan lain-lain lagi.

Seseorang boleh berhujah untuk masa yang lama tentang kebaikan pendekatan ini, dan sama ada ia mungkin, tetapi hakikatnya tetap: Microsoft membuat D3D 10 hanya untuk Vista dan lebih tinggi. Malah pada menyokong Adalah mustahil bagi perkakasan D3D untuk menjalankan aplikasi D3D tanpa Vista.

Anda mungkin masih ingat bahawa Vista... katakan saja ia tidak berfungsi dengan baik. Jadi kami mempunyai OS yang santai, API baharu, yang hanya berfungsi pada OS ini, dan perkakasan generasi baharu, yang diperlukan dalam API dan OS ini untuk melakukan lebih daripada sekadar mengatasi prestasi generasi sebelumnya.

Walau bagaimanapun, pemaju boleh Gunakan fungsi tahap D3D 10 melalui OpenGL. Iaitu, mereka boleh jika ARB tidak sibuk bekerja di Long Peaks.

ARB menghabiskan satu setengah tahun hingga dua tahun yang baik untuk mempertingkatkan API. Apabila OpenGL 3.0 keluar, peralihan kepada Vista telah tamat, Windows 7 sedang dalam perjalanan, dan pembangun permainan tidak lagi mengambil berat tentang fungsi 10 peringkat D3D. Lagipun, perkakasan D3D 10 berfungsi dengan baik dengan aplikasi D3D 9. Sebagai kadar port PC meningkat, konsol (atau dengan peralihan pembangun PC ke pasaran konsol), pembangun memerlukan fungsi D3D 10 semakin kurang.

Jika pembangun mempunyai akses kepada fungsi ini walaupun pada Windows XP, pembangunan OpenGL boleh digiatkan. Tetapi ARB terlepas peluang ini. Adakah anda ingin tahu apa yang paling teruk?

ARB gagal mencipta API dari awal walaupun membuang masa dua tahun yang berharga untuk melakukannya. Jadi mereka mengembalikan status quo, hanya menambah mekanisme untuk menghentikan fungsi.

Akibatnya, ARB bukan sahaja terlepas kunci peluang, tetapi juga tidak melakukan kerja yang membawa mereka kepada peninggalan ini. Ia adalah kegagalan epik dalam semua bidang.

Ini adalah kisah penentangan terhadap OpenGL dan Direct3D. Sebuah kisah tentang peluang yang terlepas, kebodohan yang besar, kecerobohan yang disengajakan dan kemustahilan yang tidak masuk akal.

Oh, sekiranya ia begitu mudah dengan OpenGL. Kini, satu cara atau yang lain, terdapat 6 piawaian yang tidak serasi digunakan (2.1,3.3,4.x, ES 1.0, ES 2.0, ES 3.0), yang mempunyai bahasa shader berbeza dan API yang berbeza sebahagian (dan kadang-kadang hampir sepenuhnya) . Lebih teruk lagi, tiada pelaksanaan rujukan dan kawalan kualiti yang sangat sedikit. Akibatnya, pada kebanyakan pasaran PC (Intel dan AMD), OpenGL dilaksanakan secara bengkok, dan pada telefon mudah alih, sebagai tambahan kepada pemandu yang sering bengkok (untuk Adreno (ex-ATI, apa yang anda mahukan), pendekatan untuk pengoptimuman berbeza-beza. sangat

DiDi

Mikhail, awak silap sikit. Anda hanya perlu memilih DirectX dalam satu kes. Jika anda ingin mengehadkan khalayak anda bukan sahaja kepada platform Windows, tetapi juga kepada satu versi Windows dan padanan tepat pengeluar dan siri komponen komputer yang digunakan untuk pembangunan. Dan walaupun tiada siapa yang akan berhujah bahawa apa yang ditulis menggunakan langsung akan berfungsi pada komponen lain dan juga beberapa versi Windows, namun, sekiranya terdapat sebarang percanggahan, gambar akan berbeza dalam sisi yang paling teruk serta prestasi. Dalam semua kes lain, jika pembangun ingin menyampaikan ciptaannya dalam bentuk di mana dia melakukannya, dia hanya perlu memilih OpenGL.

crsib

DiDi, awak cakap pelik. Pertama sekali, D3D9 ada di mana-mana bermula dari XP, dan, mengejutkan, pada XBox dan beberapa Windows Telefon bimbit. D3D11 tersedia pada semua PC dengan Vista+, WinRT, WP8. Nampaknya ia akan berada dalam generasi XBox yang akan datang.

OpenGL berfungsi dengan teruk pada PC. Terdapat sedikit peluang bahawa semuanya akan berfungsi pada AMD. Saya tidak akan mengatakan apa-apa tentang Intel sama sekali. Pengguna, terutamanya babi, mungkin tidak mempunyai pemandu, yang akan memberikannya pemaparan perisian yang hebat dan sokongan untuk API 1.1. Pada masa yang sama, terdapat peluang yang sangat baik bahawa permainan D3D akan berfungsi dengan baik.

DiDi

crsib, saya harap anda mempunyai projek permainan anda sendiri.. cukup bagi saya bahawa saya telah melihat kod yang mencukupi untuk menulis supaya gambar itu akan berada di mana-mana di mana D3D9 ini, saya tidak akan membantah bahawa kebanyakan pengaturcara yang menggunakan DirectX bukanlah orang yang malas, tidak seperti mereka yang lebih suka OpenGL, tetapi ia tidak menambah apa-apa nilai kepada DirectX itu sendiri. Pada akhirnya, bagi saya secara peribadi, ukurannya ialah kos pemaju, dan dalam kes langsung, mereka adalah tidak seimbang lebih tinggi dengan output yang lebih kurang berguna pada akhirnya.

crsib

Saya hanya mempunyainya. Dan pada OpenGL ES. Saya tidak memahami jenaka tentang kos buruh sama sekali. Memantau keadaan saluran paip pada OpenGL masih merupakan penyeksaan, kerana atas sebab tertentu sebahagian besar daripadanya terkandung dalam "primitif" grafik. Mengekalkan kod mudah alih biasanya sukar. ES 1 tidak mempunyai keperluan untuk format pemampatan tekstur perkakasan sama sekali, ES 2.0 mempunyai ETC yang lemah. Akibatnya, untuk android yang sama anda perlu memasang pek binaan dengan tekstur masuk format yang berbeza. Saya tidak bercakap tentang fakta bahawa PowerVR dan Mali dan Adreno di beberapa tempat mempunyai pendekatan yang bertentangan secara langsung untuk pengoptimuman di peringkat OpenGL (dengan pendekatannya terhadap abstraksi perkakasan). Saya tidak mahu bercakap tentang PC. Disebabkan fakta bahawa OpenGL perlu berfungsi, komputer saya akan sentiasa mempunyai pemecut nVidia. Saya benar-benar tiada pilihan. Saya hampir boleh menjamin bahawa kod yang ditulis mengikut piawaian pada Intel GMA/HD tidak akan berfungsi dengan bodoh, walaupun saya memasang 10 pemacu. Nah, atau ia akan berfungsi dengan cara yang lebih baik jika ia secara jujur ​​tidak berfungsi. Hampir sama cerita dengan ATI/AMD, cuma keadaannya lebih baik sedikit.

Secara umum, ulasan anda berbunyi dalam semangat pembangun pemula yang masih belum mempunyai masa untuk melalui semua lingkaran pembangunan pengeluaran di OpenGL