2012-02-28 27 views
6

Tôi có PBO được cập nhật từng khung bởi CUDA. Sau đó, tôi cũng muốn cập nhật một kết cấu bằng cách sử dụng PBO này, mà tôi sử dụng glTexSubImage2d. Tôi sợ việc cập nhật toàn bộ texture là tốn kém và chỉ muốn cập nhật vùng có thể xem được của texture trong khi PBO của tôi có toàn bộ dữ liệu trên đó.Tìm kiếm giải pháp thay thế cho glTexSubImage2d với hỗ trợ bù đắp dữ liệu

Vấn đề là mặc dù glTexSubImage2d chấp nhận độ lệch, chiều rộng và chiều cao làm thông số, chúng chỉ được sử dụng khi vẽ lên kết cấu, trong khi tôi vẫn cần dữ liệu đệm được đặt tuyến tính. Tôi sợ việc chuẩn bị dữ liệu bộ đệm có thể quá đắt tiền (thực sự nó sẽ cực kỳ đắt đỏ, vì PBO của tôi nằm trong bộ nhớ GPU.)

Có bất kỳ thay thế nào cho số glTexSubImage2d. Tôi tiếp tục cập nhật toàn bộ kết cấu cùng một lúc?

Trả lời

7

Vui lòng đọc thông số lưu trữ pixel, được đặt bằng glPixelStore. Các thông số GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_PIXELSGL_UNPACK_SKIP_ROWS đang quan tâm nhất dành cho bạn:

Pixel Store Parameters

Những giá trị này được cung cấp như là một tiện nghi để các lập trình viên; họ cung cấp không có chức năng không thể được nhân đôi bằng cách tăng con trỏ được chuyển tới glDrawPixels, glTexImage1D, glTexImage2D, glTexSubImage1D, glTexSubImage2D, glBitmap hoặc glPolygonStipple. Đặt GL_UNPACK_SKIP_PIXELS thành i tương đương với việc tăng con trỏ bằng các thành phần hoặc chỉ mục i, trong đó n là số thành phần hoặc chỉ số trong mỗi pixel. Đặt GL_UNPACK_SKIP_ROWS thành j tương đương với việc tăng con trỏ bằng các thành phần hoặc chỉ mục j k, trong đó k là số thành phần hoặc chỉ số trên mỗi hàng, như được tính trong phần GL_UNPACK_ROW_LENGTH.

Bạn vẫn sẽ sử dụng glTexImage và/hoặc glTexSubImage để truyền dữ liệu.

+0

Tuyệt vời, nó trông giống như những gì tôi cần. Cảm ơn! – kaoD

+0

Sau khi đọc thêm ... tại sao nó nói "cung cấp không có chức năng không thể được nhân đôi bằng cách tăng con trỏ"? Đặt SKIP cho ROWS và PIXELS cùng một lúc sẽ hoạt động như tôi mong đợi? – kaoD

+1

@kaoD: Nó nói rằng đó là sự thật. Các giá trị SKIP đó * được xác định * bằng cách tăng con trỏ. Do đó, chúng tương đương với việc tăng con trỏ. Đó là ROW_LENGTH mà bạn không thể tự làm. –

0

glTexSubimage2D có lỗi khi nhận dữ liệu từ PBO nếu ROI được chọn trong kết cấu không bằng với toàn bộ kích thước họa tiết. Đó là sự cố đã biết có thể không khắc phục được (ví dụ: opengl forum thread).

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