Tôi đang cố gắng đọc các giá trị pixel alpha bằng cách sử dụng glReadPixels. Điều đầu tiên tôi làm là đọc từng pixel một. Để cố gắng tăng tốc mọi thứ, tôi đã thử đọc tất cả các pixel cùng một lúc:glReadPixels và GL_ALPHA
GLubyte *pixels = new GLubyte[w*h*4];
glReadPixels(0, 0, w, h, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
và nó hoạt động nhưng thực sự chậm. Bây giờ tôi đang cố gắng lấy lại giá trị alpha, mà không lãng phí không gian cho các thành phần RGB:
GLubyte *pixels = new GLubyte[w*h];
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glReadPixels(0, 0, w, h, GL_ALPHA, GL_UNSIGNED_BYTE, pixels);
Nhưng tôi nhận được: OpenGL error 0x0500 in -[EAGLView swapBuffers]
.
Bất kỳ ý tưởng nào về lý do tại sao một số INVALID_ENUM (0x0500)
bị ném?
Cảm ơn bạn vì điều này. Về đề xuất cuối cùng của bạn, bạn có bất kỳ gợi ý nào về cách thực hiện điều đó không? – sharvey
@sharvey - Xem bài viết của tôi tại đây: http://www.sunsetlakesoftware.com/2010/10/22/gpu-accelerated-video-processing-mac-and-ios. Ứng dụng mẫu tôi có ở đó: http://www.sunsetlakesoftware.com/sites/default/files/ColorTracking.zip sử dụng framebuffer ngoài màn hình để hiển thị kết cấu, mặc dù tôi lấy kết quả bằng cách sử dụng 'glReadPixels()' vì tôi không thể hoàn thành màu trung bình dựa trên GPU mà tôi muốn. Tôi đã kết thúc bằng cách sử dụng một thói quen C chậm hơn để làm điều này. Tôi sẽ hoàn thành điều này tại một số điểm. –