Go OpenGL atau GLSL murni? [Tutup]

11

Saya tertarik mempelajari pemrograman grafis sehingga titik masuk yang jelas adalah belajar OpenGL. Tetapi mengumpulkan informasi yang tersebar di sekitar forum dan situs, tampaknya implementasi OpenGL murni mulai memudar karena sebagian besar hal pra-3.0 sudah ditinggalkan dan mengutip ulasan di Amazon, "karena 3.0 semua tentang shaders". Juga dari buku-buku yang saya lihat, sepertinya hanya yang luar biasa yang mencakup versi yang lebih baru, tetapi hanya sebagian karena sebagian besar buku ini mengajarkan fungsi yang sudah usang, dan ada buku-buku khusus untuk GLSL.

Di sinilah saya mengalami masalah pertama saya, beberapa perangkat tidak mendukung GLSL, termasuk notebook dengan grafik terintegrasi intel yang telah saya rencanakan untuk digunakan. Fungsinya

GLuint vertShader = glCreateShader(GL_VERTEX_SHADER);

menyebabkan kesalahan segmentasi dan dari tampilannya driver saya tidak mendukung shader

Jadi pertanyaan saya adalah, apa kelayakan membuat game hanya di OpenGL? Apakah saya akan kehilangan fitur baik yang tidak tergantikan dari bahasa shader? Dan jenis perangkat keras apa (gen lama i3, i5, i7, VGA lama) yang dapat saya harapkan untuk menjalankan game dengan shader dengan benar?

ibrabeicker
sumber
1
GLSL adalah OpenGL, saya pikir pertanyaan Anda terkait dengan apakah perangkat keras yang ingin Anda gunakan kompatibel dengan OpenGL 3, tidak khusus yang kompatibel dengan GLSL.
deceleratedcaviar
@Aniel jadi jika perangkat keras / driver kompatibel OpenGL 3.0 itu kompatibel dengan GLSL?
ibrabeicker
1
GLSL adalah bagian dari spesifikasi OpenGL 3.0, jadi ya, itulah masalahnya.
deceleratedcaviar
1
Anda berkata, "dari kelihatannya sopir saya tidak mendukung shader." Apa versi OpenGL yang Anda dapatkan? Apakah Anda memuat semua fungsi OpenGL dengan benar?
Nicol Bolas
1
@Papavoikos: Jika mengembalikan NULL, Anda memiliki masalah yang jauh lebih besar daripada apakah menggunakan shader. Apakah Anda membuat konteks OpenGL Anda dengan benar? Ingat: Anda tidak dapat memanggil fungsi GL apa pun sampai Anda memiliki konteks yang valid dibuat dan dibuat mutakhir.
Nicol Bolas

Jawaban:

9

Kode Shader jelas lebih jelas dan lebih mudah dipahami daripada kekacauan panggilan glTexEnv, glTexGen dan matrix, dan memiliki bonus yang dapat Anda ungkapkan dengan operasi matematika sewenang-wenang yang lebih atau kurang menggunakannya (yang tidak dapat Anda lakukan dengan fixed pipeline - apa yang Anda sebut "OpenGL murni"). Satu-satunya downside potensial adalah bahwa Anda perlu menulis sejumlah infrastruktur pendukung dalam kode Anda sebelum Anda dapat mulai menggunakannya, sedangkan dengan cara lama Anda bisa menyelam cukup dalam. Saya menyebutnya "potensi" downside karena saya benar-benar berpikir bahwa itu membuat Anda mempersiapkan hal-hal dan belajar sedikit lebih banyak di muka - OpenGL memiliki reputasi sebagai "mudah" dan Anda kadang-kadang melihat orang-orang tertipu oleh hal ini dan masuk tanpa benar-benar tahu apa yang mereka lakukan pertama kali,

Dari sisi hardware Anda dapat mengandalkan hampir semua yang dirilis dalam 5/6/7 tahun terakhir untuk mendapatkan dukungan shader, tetapi - untuk Intel yang lebih lama (beberapa dari seri 9xx) - tidak akan menjadi GLSL, tetapi sebaliknya akan menjadi ekstensi GL_ARB_vertex_program dan GL_ARB_fragment_program yang lebih tua . Ini menggunakan bahasa shader seperti bahasa assembly, tetapi - waktu pengakuan - Saya pribadi cukup menyukainya. Ini sebenarnya cukup mudah digunakan, jika kurang dalam beberapa fitur yang lebih modern (seperti bercabang) dan membutuhkan lebih banyak baris kode shader untuk melakukan hal yang sama. Infrastruktur pendukung yang diperlukan dalam program utama Anda untuk ekstensi ini jauh lebih ringan daripada untuk GLSL juga.

Itu bukan untuk mengatakan bahwa saya akan merekomendasikan mereka lebih dari GLSL, tetapi mereka adalah pilihan yang ada jika Anda benar-benar perlu berjalan pada kelas perangkat keras ini dan berguna untuk menyadari bahwa mereka ada, yang membawa saya ke titik akhir . Apakah Anda benar-benar yakin bahwa Anda benar-benar perlu menjalankan kelas perangkat keras ini (mis. Dalam kasus notebook Anda, Anda mungkin baru saja mengabaikan untuk mendapatkan titik masuk)?

Maximus Minimus
sumber
Saya benar-benar mengabaikan fakta bahwa Mesa3d masih menggunakan spesifikasi opengl 2.1. Saya akan memperbaikinya
ibrabeicker
6

Juga harus dicatat bahwa tidak ada "OpenGL murni" lagi.

OpenGL ES 2.0 membuang semua hal yang bukan shader, dan karena WebGL didasarkan padanya, ia juga hanya bekerja dengan shader. OpenGL 3.0 menghentikan semua hal-hal fungsi tetap, dan 3.1 menghapusnya (dalam profil inti. Sebagian besar implementasi mendukung profil kompatibilitas, tetapi MacOSX tidak untuk implementasi 3.2 mereka).

Jadi saya tidak akan menyarankan untuk belajar OpenGL non-shader.

Nicol Bolas
sumber
6

Jika Anda pernah melakukan pemrograman di masa lalu, menulis kode shader Anda sendiri menggunakan GLSL akan jauh lebih menyenangkan. Saya awalnya mencoba belajar fungsi tetap OpenGL dan itu lebih sulit bagi saya karena itu tidak masuk akal. Kemudian saya mencoba belajar GLSL menggunakan buku oranye dan itu jauh lebih mudah dan menghasilkan lebih banyak sejak itu. Hanya 2 sen saya.

Saya pasti akan menuju GLSL karena kekuatan untuk menulis program untuk GPU.

Joey Green
sumber