github.com/razvanm/vanadium-go-1.3@v0.0.0-20160721203343-4a65068e5915/src/runtime/ppapi/image_data_nacl.go (about) 1 // Copyright 2014 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 ppapi 6 7 import ( 8 "errors" 9 "unsafe" 10 ) 11 12 // ImageData represents a 2D image. 13 type ImageData struct { 14 Resource 15 } 16 17 // ImageDataDesc is a description of an ImageData resource. 18 type ImageDataDesc struct { 19 format ImageDataFormat 20 size Size 21 stride int32 22 } 23 24 var ( 25 errImageDataCreateFailed = errors.New("ImageData creation failed") 26 errImageDataDescribeFailed = errors.New("ImageData.Describe operation failed") 27 errImageDataMapFailed = errors.New("ImageData.Map operation failed") 28 ) 29 30 // NewImageData returns a new ImageData object for 2D graphics. 31 func (inst Instance) NewImageData(fmt ImageDataFormat, size Size, initToZero bool) (id ImageData, err error) { 32 rid := ppb_imagedata_create(inst.id, fmt, &size, toPPBool(initToZero)) 33 if rid == 0 { 34 err = errImageDataCreateFailed 35 return 36 } 37 id.id = rid 38 return 39 } 40 41 // Describe returns the ImageData description. 42 func (data ImageData) Describe() (desc ImageDataDesc, err error) { 43 ok := ppb_imagedata_describe(data.id, &desc) 44 if ok == 0 { 45 err = errImageDataDescribeFailed 46 return 47 } 48 return 49 } 50 51 // Map returns a slice referring to the image data. 52 func (data ImageData) Map() ([]uint8, error) { 53 // Get the data size. 54 desc, err := data.Describe() 55 if err != nil { 56 return nil, err 57 } 58 size := desc.size.Width * desc.size.Height * 4 59 60 // Map the data. 61 p := ppb_imagedata_map(data.id) 62 if p == nil { 63 return nil, errImageDataMapFailed 64 } 65 b := (*[1 << 24]uint8)(unsafe.Pointer(p))[:size:size] 66 return b, nil 67 } 68 69 // Unmap unmaps the image data. 70 func (data ImageData) Unmap() { 71 ppb_imagedata_unmap(data.id) 72 }