LibGdx haruskah saya menggunakan gl30?

Dalam konfigurasi libgdx, ada boolean useGL30. Karena saya belum pernah bekerja dengan OpenGL, saya tidak yakin apa fungsi metode itu. Dan omong-omong. haruskah saya menyetelnya ke false atau true? Mana yang lebih baik untuk permainan saya?


person Joza100    schedule 15.10.2017    source sumber
comment
Konfigurasi Android atau konfigurasi desktop?   -  person Zoe    schedule 15.10.2017
comment
ini untuk desktop   -  person Joza100    schedule 15.10.2017


Jawaban (2)


Jawaban lainnya sangat luas namun sayangnya tidak benar di beberapa bagian. Pertama untuk menjawab pertanyaan Anda:

Anda ingin menyetel anggota config.useGL30 menjadi false, apa pun platformnya (desktop atau Android).

Anda tidak menyetel anggota config.useGL30 ke true, kecuali Anda benar-benar perlu menggunakan fungsionalitas OpenGL ES 3.0. Dalam hal ini (jika Anda perlu menggunakan fungsionalitas GLES3) Anda harus memperhatikan kompatibilitasnya, bahkan di tempat di mana Anda tidak memerlukan fungsionalitas tersebut.

Menyetel config.useGL30 ke true saja tidak akan lebih baik untuk game Anda. Faktanya, hal ini mungkin menimbulkan masalah.

Untuk memperjelas beberapa hal:

OpenGL dan OpenGL ES adalah dua hal yang berbeda, versinya tidak dapat dibandingkan. Jika Anda benar-benar ingin membandingkan versinya, maka OpenGL ES 2.0 dapat dibandingkan dengan (merupakan subset dari) OpenGL 4.3 dan OpenGL ES 3.0 dapat dibandingkan dengan (merupakan subset dari) OpenGL 4.5.

Dalam hal ini penamaan useGL30, Gdx.gl20, Gdx.gl30 dapat dianggap menyesatkan, karena 20 dan 30 pada penamaan tersebut sebenarnya mengacu pada versi OpenGLES dan bukan versi OpenGL. Penamaan yang lebih baik mungkin adalah useGLES30, Gdx.gles20 dan Gdx.gles30.

OpenGL ES 3.0 tidak sepenuhnya kompatibel dengan OpenGL ES 2.0, dan hal ini juga berlaku untuk desktop (di mana OpenGL ES ditiru melalui OpenGL). Meskipun API itu sendiri kompatibel, hal ini tidak berlaku untuk bahasa shader yang digunakan. Jadi, jika Anda menyetel config.useGL30 ke true maka kemungkinan besar shader Anda tidak akan berfungsi lagi seperti yang Anda harapkan. Ini termasuk shader yang disertakan dengan libgdx (SpriteBatch, ShapeRenderer, ModelBatch, dll).

Jadi, tidak masuk akal untuk menyetel anggota useGL30 hanya ke true untuk proyek desktop Anda, terutama jika Anda juga tidak membuat penyesuaian lain pada kode Anda.

person Xoppa    schedule 15.10.2017
comment
Tapi, perubahan kode apa yang harus saya tambahkan? - person Joza100; 17.10.2017
comment
Seperti disebutkan di atas, Anda harus (setidaknya) memodifikasi shader. Perubahan pasti pada kode Anda bergantung pada penggunaan serta pertimbangan lainnya (termasuk versi konteks terbuka yang Anda pilih di konfigurasi jika Anda menargetkan desktop). Itu akan menjadi pertanyaan yang berbeda dan tidak cocok untuk bagian komentar. - person Xoppa; 17.10.2017
comment
Tidak dapat mengonfirmasi hal ini untuk iOS, namun OpenGL ES 3 kompatibel dengan versi sebelumnya GLES 2 di Android:The OpenGL ES 3.x API is backwards-compatible with the 2.0 API, which means you can be more flexible with your implementation of OpenGL ES in your application - person Zoe; 18.10.2017
comment
Anda mungkin ingin membaca jawabannya lagi @Zoe: Meskipun API itu sendiri kompatibel, hal ini tidak berlaku untuk bahasa shader yang digunakan. - person Xoppa; 18.10.2017
comment
Anda juga harus: OpenGL ES 3.0 is *not* fully backwards compatible with OpenGL ES 2.0, which is also true for desktop - person Zoe; 19.10.2017
comment
Maksudmu aku harus membaca apa yang aku tulis sendiri? Kalimat itu sangat bagus dan benar. Tolong hentikan omong kosong ini, itu tidak menambah nilai apa pun pada jawaban dan juga tidak membantu OP. - person Xoppa; 19.10.2017

Dari dokumen LwjglApplicationConfiguration:

apakah akan mencoba menggunakan OpenGL ES 3.0.

LibGDX menggunakan banyak fitur untuk menjaga kompatibilitas di berbagai platform. Jika Anda tidak mengaktifkan pengaturan tersebut, Anda tidak dapat menggunakan OpenGL 3 jika memungkinkan (IIRC). Pada dasarnya apa yang dilakukan metode ini adalah mengaktifkan penggunaan OpenGL ES 3. (Saya pikir semua komputer baru mendukung OpenGL 3, masalahnya terletak pada Android yang ditambahkan di API 18 dan itu tergantung pada implementasi khusus oleh produsen. Saya akan kembali untuk itu nanti)

Sebaiknya periksa jawaban ini meskipun pertanyaannya sedikit berbeda, ini menjelaskan cara kerja LibGDX:

LibGDX menjalankan OpenGL ES2.0, yang kuno menurut standar modern. Hal ini terjadi karena alasan kompatibilitas: Sebagian besar perangkat seluler tidak mendukung standar yang lebih tinggi.

OpenGL ES2.0 mirip dengan OpenGL 2.0, tetapi dengan beberapa perubahan, dan dirilis pada tahun 2007. LWJGL, sebaliknya, mendukung yang terbaru dan terhebat (OpenGL 4.5) dan semua yang ada di bawahnya. Ia juga memiliki binding OpenCL (pemrosesan GPU), OpenAL (audio 3D) dan Vulkan (Driver ajaib dan lainnya).

OpenGL ES 3 adalah versi terbaru yang tersedia di Android (dan saya berasumsi perangkat iOS juga), sedangkan OpenGL 4.6 adalah versi terbaru yang tersedia di perangkat desktop (di mana terdapat kartu grafis yang mendukungnya).

Satu hal yang perlu diperhatikan adalah OpenGL ES 3 juga cukup lama (2012) tetapi kompatibel dengan OpenGL ES 2.

Tidak mengetahui banyak tentang bagian khusus ini, ini kurang lebih merupakan tebakan: ketika Anda menulis kode menggunakan LibGDX Anda membuat panggilan ke Gdx.gl (atau Gdx.gl20 atau Gdx.gl30). LibGDX kemudian melakukan panggilan ke API yang sesuai (OpenGL ES di Android dan iOS, LWJGL/JOGL di desktop, dll)

AFAIK, menggunakan useGl30 memungkinkan penggunaan OpenGL ES 3. Alasan utama Anda tidak boleh menggunakan OpenGL 3 adalah Android. OpenGL 3 ditambahkan di API 18, dan:

Perhatian: Dukungan OpenGL ES 3.0 API pada perangkat memerlukan implementasi pipeline grafis yang disediakan oleh produsen perangkat. Perangkat yang menjalankan Android 4.3 atau lebih tinggi mungkin tidak mendukung OpenGL ES 3.0 API

Tapi itu tidak menjadi masalah bagi Anda karena Anda (dari apa yang saya pahami) tidak menargetkan Android. Jadi menggunakan yang terbaru yang tersedia adalah ide yang bagus.

Artinya Anda bisa menggunakan Open GL 4.6. Namun ini berarti Anda harus memanggil binding LWJGL secara langsung.

Soalnya Anda hanya bisa melakukan itu untuk hal tertentu, LibGDX sendiri akan tetap menggunakan 2.0/3.0.

Dengan mengingat semua itu, saya akan menjawab dua pertanyaan terakhir:

Dan omong-omong. haruskah saya menyetelnya ke false atau true?

Anda harus menyetelnya ke true jika Anda tidak menargetkan Android. Akan ada masalah karena tidak semua perangkat yang menjalankan API 18+ mendukungnya (tautan ke sana ada di awal jawaban ini). Jika Anda menjalankan desktop, Anda harus menargetkan versi terbaru yang dapat Anda temukan, karena versi yang lebih baru juga menambahkan fitur baru yang mungkin Anda perlukan. Kecuali ada hal-hal spesifik di OpenGL 4+ (4+ bukan salah ketik) Anda harus tetap menggunakan kerangka itu sendiri dan tidak melakukan panggilan langsung ke LWJGL (LibGDX di desktop dibuat di atas LWJGL).

Anda bisa membuat game dengan OpenGL 2.0 saja. OpenGL 1 dan 2 tidak kompatibel, tetapi 2 dan 3 kompatibel. Artinya jika Anda memutuskan ingin menggunakan OpenGL 3, Anda masih dapat melakukan panggilan ke OpenGL 2 (AFAIK, dari pengalaman dengan LWJGL, versi yang lebih baru saling mengandalkan agar berfungsi dengan baik. Jika menggunakan 4 Anda masih perlu melakukan panggilan ke 2 dan 3 untuk mendapatkan API yang sesuai. Namun saya mungkin salah)

Mana yang lebih baik untuk permainan saya?

Ini adalah masalah opini, namun ada satu hal penting yang harus Anda ingat: Jika Anda menggunakan OpenGL 3, Anda masih dapat menggunakan OpenGL 2. Pada saat itu, tidak ada pilihan di antara mana yang Anda pilih. Jika Anda mengaktifkan OpenGL 3, Anda dapat menggunakan 2 dan 3 karena openGL ES 3 kompatibel dengan versi sebelumnya OpenGL ES 2.

Sesuatu yang belum saya sebutkan adalah menggunakan versi yang berbeda.

Gdx.gl secara default menggunakan OpenGL 2. Artinya jika ingin mengakses fitur 3.0, Anda harus memanggil Gdx.gl30.* ke metode yang relevan. Karena kompatibel ke belakang, fitur 2.0 (menurut saya) harus dipanggil menggunakan Gdx.gl20.* karena fitur tersebut tidak langsung ada di 3.0 (sebagai akibat dari kompatibilitas ke belakang, jika Anda memiliki 3.0, Anda juga memiliki 2.0)

Saya menggunakan LWJGL beberapa waktu lalu, dan untuk memanggil beberapa bidang yang ditambahkan di versi sebelumnya (tetapi tidak dihapus) Anda harus memanggil versi yang relevan. Jika Anda menggunakan 4.6, Anda masih perlu memanggil 2.0 untuk menghapus warna. Tapi ini terjadi beberapa waktu yang lalu, jadi saya mungkin salah mengingatnya

Jadi kesimpulannya:

  • Anda harus menggunakan OpenGL 3 jika Anda hanya menggunakan desktop (karena Android API 18+ mungkin tidak mendukungnya. Jika Anda menargetkan Android juga, Anda harus mempertimbangkan apakah Anda ingin menggunakan OpenGL 3 atau tidak, dan karena itu kehilangan dukungan untuk banyak perangkat)
  • useGl30 memungkinkan penggunaan 3.0 jika tersedia.
  • 2.0 dan 3.0 kompatibel, jadi Anda tidak perlu khawatir tentang versi mana yang Anda dukung. Anda dapat menggunakan keduanya secara berdampingan.
person Zoe    schedule 15.10.2017
comment
Jadi di proyek libgdx ada konfigurasi run terpisah untuk Android dan desktop yang berarti di desktop saya saya akan mengaktifkannya dan di Android saya saya akan menonaktifkannya! Terima kasih atas jawabannya :) - person Joza100; 15.10.2017