2012-02-23 38 views
6

Có loại bool cho các biến shader tôi muốn sử dụng, nhưng tôi không thể tìm thấy kích thước của nó. Vấn đề này vì khi thiết lập đỉnh thuộc tính con trỏ tôi chỉ định kiểu dữ liệu có thể đượcKích thước của GLSL boolean

GL_BYTE, 
GL_UNSIGNED_BYTE, 
GL_SHORT, 
GL_UNSIGNED_SHORT, 
GL_INT, 
GL_UNSIGNED_INT, 
GL_FLOAT, or 
GL_DOUBLE 

Trong C++ thường bool nên có kích thước tương tự như 4 byte int, nhưng tôi có thể giả định tương tự cho GLSL hoặc dùng nó chỉ có 1 byte?

+1

Tôi khá chắc chắn bool thường chỉ có 1 byte trong C++ (ít nhất là nó được thực hiện được xác định), nhưng tôi đã chuẩn bị để chứng tỏ điều ngược lại. –

+0

@ChristianRau Tôi đã tìm kiếm trên web và bạn đúng, ngay cả lợi nhuận của sizeof 1. Không thể nhớ từ nơi tôi nhận được điều đó. – Raven

+2

Điều duy nhất bạn có thể nói là đó là 'sizeof (bool)'. Quyền của Christian, nó được thực hiện xác định và thậm chí có thể phụ thuộc vào cài đặt trình biên dịch. – MSalters

Trả lời

11

này quan trọng bởi vì khi thiết lập đỉnh thuộc tính con trỏ tôi chỉ định kiểu dữ liệu có thể được

Đó là không thích hợp, kể từ đỉnh thuộc tính không có thể boolean. Từ đặc tả GLSL 3.30:

Đầu vào đổ bóng Vertex chỉ có thể nổi, vectơ dấu phẩy động, ma trận, số nguyên đã ký và không dấu và vectơ số nguyên. Đầu vào của đầu đổ Vertex cũng có thể tạo thành các mảng của các loại này, nhưng không phải là các cấu trúc.

Booleans không có trong danh sách đó.

Tuy nhiên, nếu bạn muốn biết kích thước của GLSL bool là gì theo số uniform blocks, nó có cùng kích thước với uint: 32 bit.

+0

vì vậy tất cả các loại đó (ngoại trừ đôi từ GL 4.0) cuối cùng được mở rộng thành 4 byte và chúng chỉ liên quan đến phía máy khách? – Raven

+1

@Raven: Đó là các loại GLSL của đầu vào đổ bóng đỉnh. Những gì bạn vượt qua chúng như là các giá trị thuộc tính là trong nhiều trường hợp tùy thuộc vào bạn; OpenGL có vĩ độ rộng để chuyển đổi dữ liệu khi cần. Bạn không phải truyền các số nguyên 32 bit; bạn có thể sử dụng số nguyên 8 bit nếu muốn. Bạn có thể chuyển các thuộc tính số nguyên chuẩn hóa cho các đầu vào dấu phẩy động. Và kể từ đó trở đi. –