Sto cercando di capire quale sia il modo migliore per generare una trama OpenGL usando uno shader di calcolo. Finora, ho letto che gli oggetti pixel buffer sono buoni per CPU non bloccanti -> trasferimenti GPU e che gli shader di calcolo sono in grado di leggere e scrivere buffer indipendentemente da come sono associati. Idealmente, vorrei evitare quante più copie possibile. In altre parole, vorrei allocare un buffer sulla GPU, scrivere dati di trama compressi su di esso e quindi utilizzare quel buffer come oggetto trama in uno shader.
Attualmente, il mio codice è simile al seguente:
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);
È corretto? Ho letto da qualche parte anche su come garantire la sincronizzazione. Cosa devo aggiungere per assicurarmi che il mio shader di calcolo completi l'esecuzione prima di copiare dall'oggetto buffer?