cuốn sách gpt4 ai đã làm

Căn chỉnh cấu trúc theo std140, phía CPU

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-03 00:29:49 26 4
mua khóa gpt4 Nike

Tôi đoán đây là sự giao thoa giữa vấn đề C++ thuần túy và vấn đề OpenGL. Tôi có một bộ đệm thống nhất và phân bổ byte sizeof(ShaderData) không gian trong đó. Tôi đang sử dụng bố cục std140 ở phía GPU của trình đổ bóng.

Theo quy tắc std140, tôi cần thêm phần đệm ở nhiều vị trí khác nhau trong cấu trúc của mình để đảm bảo rằng những thứ như vectơ được căn chỉnh chính xác. Cấu trúc sau đây là một ví dụ (đối với tôi):

cấu trúc ShaderData {

thả nổi Light_Intensity;
float _pad1[3]; // căn chỉnh theo vec3 trên ranh giới 4N
Toán::Vec3f Light_Position;
float _pad2; // căn chỉnh theo vec4 trên ranh giới 4N
Toán::Color4f Light_Ambient;
Toán::Color4f Light_Diffuse;
Toán::Color4f Light_Specular;
float Light_AttenuationMin;
float Light_AttenuationMax;

} MyShaderData;

Đây có phải là cách mọi người thường làm trong C++ hay có những từ khóa hoặc pragma đặc biệt để sắp xếp các phần tử riêng lẻ ở phía CPU của cấu trúc gọn gàng hơn một chút?

câu trả lời hay nhất

Không, điều này sẽ chỉ lãng phí không gian. Bạn phải tìm một bố cục được tối ưu hóa theo quy tắc std140.

  • float Yêu cầu 4 byte và được căn chỉnh 4 byte
  • vec3 Yêu cầu 12 byte và được căn chỉnh 16 byte
  • vec4 Yêu cầu 16 byte và được căn chỉnh 16 byte

Điều này có nghĩa là bạn có thể tìm thấy bố cục tốt hơn cho cấu trúc của mình:

thả nổi Light_Intensity X;
float _pad1[3];
Toán::Vec3f Light_Position XXX;
nổi _pad2;

Như bạn có thể thấy, bạn lãng phí 4 byte và điều tệ hơn là bạn có thể làm điều gì đó như thế này:

Toán::Vec3f Light_Position XXX
thả nổi Light_Intensity X;

Làm cho nó được căn chỉnh và không lãng phí một byte nào. Điều này là có thể bởi vì vec3 sẽ được căn chỉnh theo ranh giới 16 byte, trong khi float Vẫn sẽ được căn chỉnh trên ranh giới 4 byte.

Về c++ - căn chỉnh cấu trúc theo std140, phía CPU, chúng tôi tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/19956906/

26 4 0
Taklimakan
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress