Tôi đang sử dụng FBO + RBO và thay vì đệm kép thông thường trên bộ đệm khung mặc định, tôi vẽ đến RBO và sau đó ghi trực tiếp lên bộ đệm GL_FRONT của FBO mặc định (0) trong một bối cảnh OpenGL đệm duy nhất.đệm đôi với FBO + RBO và glFinish()
Điều đó là tốt và tôi không nhận được bất kỳ nhấp nháy nào, nhưng nếu cảnh trở nên phức tạp một chút, tôi trải qua một lượt giảm HUGE trong fps, điều gì đó kỳ lạ đến mức tôi biết điều gì đó đã sai. Và tôi không có nghĩa là từ 1/60 đến 1/30 vì một đồng bộ bỏ qua, tôi có nghĩa là giảm 90% fps đột ngột.
Tôi đã thử một glFlush() sau khi blit - không có sự khác biệt, sau đó tôi đã thử một glFinish() sau blit, và tôi đã tăng 10x fps.
Vì vậy, tôi đã sử dụng bộ đệm ngẫu nhiên thường xuyên trên bộ đệm khung mặc định và bộ đệm(), và khung hình/giây cũng có tăng cường, như khi sử dụng glFinish().
Tôi không thể hiểu được điều gì đang xảy ra. Tại sao glFinish() tạo nên nhiều sự khác biệt khi nó không nên? và, nó là ok để sử dụng một RBO và blit trực tiếp trên bộ đệm phía trước, thay vì sử dụng một cuộc gọi swapbuffers trong một bối cảnh đệm đôi? Tôi biết Im thiếu vsync nhưng người quản lý tổng hợp sẽ đồng bộ hóa anyway (infact im không nhìn thấy bất kỳ rách), nó chỉ là nếu màn hình bị thiếu 9 trong số 10 khung hình.
Và chỉ vì tò mò, có phải là người dùng swapbuffers() sử dụng glFinish() trên một trong hai cửa sổ hoặc Linux không?
* "sau đó tôi đã thử glFinish() sau blit, và tôi đã tăng 10x fps" * - Thay vào đó giống như một vấn đề với phương pháp định thời gian của bạn, một cái gì đó như nó không được đồng bộ hóa tốt với GPU của bạn. glFinish' tất nhiên đạt được). Một số mã nữa sẽ là thú vị. –
Tôi không thấy làm thế nào reimplementing đệm đôi sẽ tốt hơn anyway, xem xét tất cả những thứ trong các trình điều khiển như Triple đệm, Adaptive VSync và như vậy. –
@BartekBanachewicz Nó có ý nghĩa nếu bạn cần bộ đệm cho cả màn hình trên màn hình và hiển thị ngoài màn hình, nhưng bạn sẽ thực sự có một số công việc để (lại) tối ưu hóa phần trên màn hình. – KillianDS