Pengikatan OpenGL dan hubungan antar entitas

12

Ini sebagian besar merupakan pertanyaan dokumentasi. Saya harap ini adalah tempat yang tepat untuk bertanya dan tidak, misalnya, programmer atau stackoverflow.

Saya tidak membaca spesifikasi OpenGL, tetapi dari buku (Buku Merah) dan berbagai tutorial, saya tidak dapat memahami dengan benar bagaimana berbagai objek dan bagian API berinteraksi dan berhubungan.

Misalnya, saya tahu bahwa jika VAO terikat, maka mengikat VBO dan mengatur atribut akan menghasilkan VBO terikat ke VAO.

Tetapi ada banyak objek, hubungannya mungkin berbeda. Misalnya, VAO sama sekali tidak terkait dengan program naungan saat ini, tetapi hasil dari operasi menggambar mungkin tergantung pada keduanya.

Di antara semua berbagai komponen OpenGL, saya bisa melihat beberapa hubungan seperti A-binds-to-B atau A-dan-B-digunakan-oleh-C. Semua hubungan ini sepakat dalam menentukan bagaimana seseorang dapat mengubah keadaan konteks, bagaimana dapat mengubah hal-hal, bagaimana cara menyelamatkan hal-hal bersama dan mengoptimalkan.

Saya mencari sumber daya yang menjelaskan hubungan ini saja . Seperti diagram UML, grafik, atau bahkan dokumen teks, yang tidak fokus tentang panggilan, tetapi menjelaskan secara ringkas bagaimana berbagai komponen OpenGL berinteraksi dan saling berhubungan satu sama lain.

Apakah Anda tahu di mana menemukan sumber daya seperti itu?

AkiRoss
sumber
3
Pertanyaan yang bagus Saya memiliki seluruh pustaka / engine OpenGL saya dan berjalan tanpa jawaban yang sangat jelas untuk pertanyaan kunci itu.
david van
1
Mengikat VBO tidak mengikatnya ke VAO. Ini malah dicapai dengan glVertexAttribPointer(). Diagram untuk objek OpenGL akan cukup dangkal dan sederhana, sebenarnya tidak ada lebih dari beberapa objek berbeda di OpenGL. VAO menggunakan buffer untuk atribut. Tekstur penyangga didukung oleh buffer. Framebuffer memiliki lampiran tekstur. Perintah menggambar menggunakan VAO saat ini, program saat ini, framebuffer saat ini, pengaturan sampler saat ini, dan buffer indeks saat ini / buffer tidak langsung. Anda mungkin bisa menggambar diagram sendiri.
Dietrich Epp
1
Maaf, saya tidak akan menggambar untuk Anda.
Dietrich Epp
2
Pertanyaan yang bagus, dan dari tempat saya berdiri, semoga sukses mendapatkan jawaban yang komprehensif tanpa memberi hadiah yang berarti.
Insinyur
2
Desain OpenGL adalah argumen yang bagus tentang mengapa Anda tidak harus menggunakan variabel global ;)(seluruh API adalah satu kekacauan besar data global)
glampert

Jawaban:

7

Jadi, saya mencoba melukis diagram saya sendiri. Ini tidak komprehensif, sebagian besar karena saya tidak menarik dalam beberapa hal sekarang, tetapi juga karena saya ingin itu dapat dibaca (bahkan jika itu bukan grafik yang ditentukan secara formal, saya pikir itu harus mudah dibaca).

Juga, karena tampaknya menarik bagi sebagian orang, saya ingin membagikannya di sini untuk mendapatkan umpan balik dan memeriksanya. Saya menggunakan wiki OpenGL sebagai referensi untuk memeriksa kebenarannya, tetapi saya mungkin telah melakukan kesalahan.

Juga, jika informasi yang diberikan tidak cukup untuk Anda, atau saya meninggalkan hubungan penting yang layak untuk dimasukkan dalam diagram, jangan ragu untuk menyarankannya, dan saya akan mencoba untuk tetap memperbaruinya.

Diagram hubungan-mengikat OpenGL

Sekali lagi, silakan melaporkan kesalahan, masalah, atau saran, mereka disambut dengan hangat.

EDIT

  1. Hubungan antara gambar dan atribut tidak ada: atribut harus diaktifkan agar efektif saat rendering
AkiRoss
sumber