2011-10-16 24 views
8

Tôi đang gọi glTexSubImage2D. Nếu định dạng pixel của tôi là GL_RGBA thì các loại pixel GL_UNSIGNED_BYTEGL_UNSIGNED_INT_8_8_8_8 có tương đương hoàn toàn không?Tải lên kết cấu OpenGL: UNSIGNED_BYTE và UNSIGNED_INT_8_8_8_8

Ngoài ra, hai cặp này có tương đương không?

  • Format = GL_RGBA, Type = GL_UNSIGNED_INT_8_8_8_8
  • Format = GL_BGRA, Type = GL_UNSIGNED_INT_8_8_8_8_REV

Tôi đã thử đọc spec OpenGL và spec GL_EXT_packed_pixels, nhưng thật sự tôi không thể làm cho người đứng đầu hoặc đuôi của chúng.

Trả lời

16

Câu trả lời là Không và Không. Bạn phải suy nghĩ về thứ tự byte trong máy tính của bạn. Nếu bạn có GL_RGBAGL_UNSIGNED_INT_8_8_8_8, điều đó có nghĩa là pixel được lưu trữ trong các số nguyên 32 bit và màu sắc nằm trong thứ tự hợp lý RGBA trong một số nguyên như vậy, ví dụ: màu đỏ nằm trong byte bậc cao và alpha nằm trong byte bậc thấp. Tuy nhiên, nếu máy tính là một thiết bị nhỏ (như với các CPU của Intel), nó tuân theo thứ tự thực tế trong bộ nhớ là ABGR. Trong khi đó, GL_RGBA với GL_UNSIGNED_BYTE sẽ lưu trữ các byte theo thứ tự RGBA bất kể máy tính có nhỏ gọn hay lớn.

GL_BGRA với GL_UNSIGNED_INT_8_8_8_8_REV sẽ lưu trữ màu trong một số nguyên theo thứ tự logic ARGB, nhưng sau đó trên máy tính nhỏ, bạn nhận được thứ tự BGRA trong bộ nhớ.

+3

Điều đáng nói là 'GL_UNSIGNED_BYTE' và' GL_UNSIGNED_INT _... 'trong ví dụ này là các loại chuyển pixel. Họ không nói bất cứ điều gì về cách GL lưu trữ màu sắc, chỉ làm thế nào màu sắc "đóng gói" được giải thích bởi GL khi dữ liệu màu sắc được gửi đến nó. Phân loại một sự khác biệt quan trọng vì thường là mục tiêu với các định dạng kỳ lạ hơn này là khớp với định dạng máy khách (CPU) và máy chủ (GPU) để GL không cần thực hiện chuyển đổi dữ liệu và có thể thực hiện chuyển khối đơn giản. –

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