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  }