Saya mencoba mencari tahu apa cara terbaik untuk menghasilkan tekstur OpenGL menggunakan compute shader. Sejauh ini, saya telah membaca bahwa objek penyangga piksel baik untuk CPU non-blocking -> transfer GPU, dan penghitung komputasi mampu membaca dan menulis buffer terlepas dari bagaimana mereka terikat. Idealnya, saya ingin menghindari salinan sebanyak mungkin. Dengan kata lain, saya ingin mengalokasikan buffer pada GPU, menulis data tekstur terkompresi, dan kemudian menggunakan buffer itu sebagai objek tekstur dalam shader.
Saat ini, kode saya terlihat seperti ini:
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, buffer);
glBufferStorage(GL_SHADER_STORAGE_BUFFER, tex_size_in_bytes, 0, 0);
glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
// Bind buffer to resource in compute shader
// execute compute shader
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer);
glCompressedTexImage2D(GL_TEXTURE_2D, 0, fmt, w, h, 0, tex_size_in_bytes, 0);
Apakah ini benar? Saya membaca di suatu tempat tentang jaminan sinkronisasi. Apa yang perlu saya tambahkan untuk memastikan bahwa penghitung shader saya menyelesaikan eksekusi sebelum menyalin dari objek buffer?