2013-02-08 14 views
6

Tôi cần nối tiếp một đối tượng kết cấu OpenGL tùy ý để có thể khôi phục lại sau đó với trạng thái và dữ liệu giống hệt nhau .Làm cách nào để lấy dữ liệu kết cấu thô (không được chuyển đổi) trong OpenGL?

Tôi đang tìm cách lấy dữ liệu hình ảnh kết cấu. Dưới đây là những gì tôi đã tìm thấy cho đến thời điểm này:

  • glGetTexImage.

    Nó cho phép để nhận được hình ảnh kết cấu, nhưng nó đòi hỏi một cặp dạng/loại cụ thể (như (GL_RGB,   GL_HALF_FLOAT) mà nó thực hiện chuyển đổi.

    Các định dạng cho phép và các loại bản đồ không 1 : Mặc dù vậy, các định dạng hình ảnh 1 sẽ không cho phép nhận các định dạng tối nghĩa hơn như GL_R3_G3_B2 mà không cần chuyển đổi bổ sung. .

  • ARB_internalformat_query2 cho phép yêu cầu GL_GET_TEXTURE_IMAGE_FORMATGL_GET_TEXTURE_IMAGE_TYPE đại diện cho các lựa chọn tốt nhất cho glGetTexImage cho một kết cấu nhất định.

    Tốt, nhưng bị hạn chế giống như glGetTexImage và không có sẵn rộng rãi.

  • Cótuyệt vời trả về dữ liệu của kết cấu nén một cách thanh lịch, nhưng nó không hoạt động đối với hình ảnh không nén cũng như không có đối tác.

Không ai trong số này cho phép nhận hoặc đặt dữ liệu thô cho kết cấu không bị nén. Là có một cách?

Trả lời

2

Bí quyết là, để tìm các kết quả phù hợp với định dạng và nhập sản lượng bố cục dữ liệu phù hợp.

Định dạng và loại được phép không ánh xạ 1: 1 sang định dạng hình ảnh và sẽ không cho phép nhận các định dạng tối nghĩa hơn như GL_R3_G3_B2 mà không cần chuyển đổi bổ sung.

Đó sẽ là GL_RGB, GL_UNSIGNED_BYTE_3_3_2

Cũng đúng việc xác định loại C cho các định dạng nội bộ cơ sở (như GL_RGB không có size) liên quan đến một số lao động không tầm thường.

Có. * đeo kính râm * Đối phó với nó! ;)

Đối với định dạng nội bộ. Tôi theo đây refer you to

glGetTexLevelParameter(GL_TEXTURE_…, …, GL_TEXTURE_INTERNAL_FORMAT,…); 
glGetTexLevelParameter(GL_TEXTURE_…, …, GL_TEXTURE_{RED,GREEN,BLUE,ALPHA,DEPTH}_TYPE, …); 
glGetTexLevelParameter(GL_TEXTURE_…, …, GL_TEXTURE_{RED,GREEN,BLUE,ALPHA,DEPTH}_SIZE, …); 
+0

Danke schön! Bây giờ tôi biết những gì tôi đang đối phó với. Tôi đã [đặt một số nỗ lực để đưa * điều này * lại với nhau] (https://gist.github.com/Kos/4739337) và tôi, er, mong được thử nghiệm nó. Và tôi không thể tìm thấy các kết quả phù hợp nhất cho một số định dạng như RGB10 hoặc RGBA2. Tôi ước tôi đã có 'ARB_internalformat_query2' để xác minh tất cả điều đó một cách dễ dàng ... – Kos