2014-10-23 22 views
5

Hạt nhân tính kim loại của tôi ghi vào một kết cấu có định dạng MTLPixelFormat.RG16Float, một nửa số dấu chấm động chính xác. Điều này là bởi vì Metal không hỗ trợ ghi đến 32 bit kết cấu dấu chấm động.Làm cách nào để đọc một nửa số điểm nổi chính xác từ kết cấu Kim loại với Swift?

Tôi cần đọc các số chính xác một nửa này trong chương trình nhanh của mình? Tôi đã di chuyển texture vào một mảng Swift UInt8, nhưng tôi không thể tìm ra cách chuyển đổi một nửa float chính xác thành Swift float.

+0

Nói, "Hạt nhân tính kim loại" là gì? URL ?? chúc mừng! – Fattie

+0

https://developer.apple.com/library/ios/documentation/Metal/Reference/MetalShadingLanguageGuide/func-var-qual/func-var-qual.html – Hallgrim

+0

wow. cảm ơn ..... – Fattie

Trả lời

3

EDIT: câu trả lời dưới đây được viết cho Swift v1. Các phiên bản sau của Swift hỗ trợ thêm thông qua kiểu float16_t. Chuyển đổi thủ công có thể vẫn hữu ích trong một số trường hợp.


Không có được xây dựng trong phương pháp để giải thích halfs như phao, bạn phải chuyển đổi nó cho mình. Kiểu dữ liệu nửa là định dạng dấu chấm động sau IEEE 754. Bạn có thể đọc các giá trị trong chương trình nhanh bằng UInt16 và sau đó chuyển đổi từ giá trị này thành giá trị float. Tôi không biết về bất kỳ chuyển đổi thói quen viết bằng Swift, nhưng đây là hai thư viện viết bằng C++ có thể được chuyển đổi một cách dễ dàng đủ:

http://mrob.com/pub/math/s10e5.h.txt

http://half.sourceforge.net/

Trong thư viện đầu tiên nó là function float() mà bạn cần phải chuyển đổi, điều đó có biến thành viên UInt16 _h và xuất ra một float.

3

Thực ra câu trả lời của @ Muzza là không chính xác. Bạn có thể đã đọc chúng từ con trỏ float16_t và truyền chúng đến một số float32_t bình thường. Không cần sử dụng thư viện bên ngoài. Chỉ cần nhập tiêu đề arm_neon.

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