Tôi đang cố gắng tìm ra cách tốt nhất để tạo ra kết cấu OpenGL bằng cách sử dụng trình đổ bóng tính toán. Cho đến nay, tôi đã đọc được rằng các đối tượng bộ đệm pixel rất tốt cho CPU không chặn -> truyền GPU và các shader tính toán có khả năng đọc và ghi bộ đệm bất kể chúng bị ràng buộc như thế nào. Lý tưởng nhất là tôi muốn tránh càng nhiều bản sao càng tốt. Nói cách khác, tôi muốn phân bổ bộ đệm trên GPU, ghi dữ liệu kết cấu nén vào nó và sau đó sử dụng bộ đệm đó làm đối tượng kết cấu trong trình đổ bóng.
Hiện tại, mã của tôi trông giống như thế này:
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);
Điều này có đúng không? Tôi cũng đọc ở đâu đó về việc đảm bảo đồng bộ hóa. Tôi cần thêm gì để đảm bảo rằng trình đổ bóng tính toán của tôi hoàn thành việc thực thi trước khi sao chép từ đối tượng bộ đệm?