2011-11-22 33 views
5

Tôi đang sử dụng glReadPixels để chụp nhanh định kỳ theo phương thức drawFrameGLSurfaceView.Renderer. Tôi cần thực hiện ảnh chụp nhanh này theo các khoảng thời gian đều đặn để tiếp tục lưu dữ liệu của mình theo yêu cầu ứng dụng của tôi.glReadPixels quá chậm để sử dụng

Tuy nhiên glReadPixels hiệu suất thực sự chậm và hiển thị độ trễ. Dưới đây là cách tôi sử dụng phương pháp:

gl.glReadPixels(0, 0, 1280, 752, GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE, bb); 

Có cách nào khác để sử dụng glReadPixels? Làm cách nào để lưu hình ảnh mà không gây lag?

+2

Xin chào, tôi tự hỏi nếu bạn đã giải quyết vấn đề này bằng cách nào đó? Tôi đang phải đối mặt với một nút cổ chai glReadPixels tương tự. Tôi thấy câu trả lời của bernie đã được chấp nhận. PBO có giúp hoặc chuyển đổi định dạng màu không? –

Trả lời

10

Tôi không biết liệu điều đó có khả dụng trên Android hay không, nhưng có thể PBO (đối tượng bộ đệm Pixel) sẽ tăng hiệu suất. Xem này OpenGL.org thread.

Tuy nhiên, đừng mong đợi phép lạ! Với hình ảnh 1280 * 752 RGBA, bạn đang chuyển 3,67 MB dữ liệu mỗi khung hình. Tôi không biết các con số cho Android, nhưng tôi sẽ đặt cược bạn đang phải đối mặt với một băng thông bộ nhớ hoặc ổ cứng ghi nút cổ chai. Nếu bạn giảm kích thước của readPixel và nhận được hiệu suất tốt hơn nhiều, bạn biết đó là vấn đề.

Ngoài ra, bạn có cần thành phần "A" không? Có lẽ đọc lại RGB nhanh hơn. Thử đọc lại ở các định dạng khác nhau. Một số cách là cách nhanh hơn các loại khác vì chúng ánh xạ tốt hơn đến biểu diễn bộ nhớ OpenGL. Ví dụ, BGRA có thể nhanh hơn RGBA. Khi bạn yêu cầu một định dạng không khớp với những gì OpenGL có, mỗi pixel phải được chuyển đổi trong khi hoạt động.

Các vấn đề liên quan