github.com/graybobo/golang.org-package-offline-cache@v0.0.0-20200626051047-6608995c132f/x/exp/shiny/driver/internal/swizzle/swizzle_common.go (about) 1 // Copyright 2015 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // Package swizzle provides functions for converting between RGBA pixel 6 // formats. 7 package swizzle 8 9 // BGRA converts a pixel buffer between Go's RGBA and other systems' BGRA byte 10 // orders. 11 // 12 // It panics if the input slice length is not a multiple of 4. 13 func BGRA(p []byte) { 14 if len(p)%4 != 0 { 15 panic("input slice length is not a multiple of 4") 16 } 17 18 // Use asm code for 16- or 4-byte chunks, if supported. 19 if useBGRA16 { 20 n := len(p) &^ (16 - 1) 21 bgra16(p[:n]) 22 p = p[n:] 23 } else if useBGRA4 { 24 bgra4(p) 25 return 26 } 27 28 for i := 0; i < len(p); i += 4 { 29 p[i+0], p[i+2] = p[i+2], p[i+0] 30 } 31 }