From c1c1bae358e0fce23aaa109a31ad61a0afb050cb Mon Sep 17 00:00:00 2001
From: faiface <faiface@ksp.sk>
Date: Sun, 5 Mar 2017 11:47:09 +0100
Subject: [PATCH] change TrianglesPicture to return (pic Vec, ok bool)

---
 data.go      | 22 ++++++++++++----------
 interface.go |  2 +-
 2 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/data.go b/data.go
index 569f4b6..ce2e4f5 100644
--- a/data.go
+++ b/data.go
@@ -11,9 +11,10 @@ import (
 // TrianglesData specifies a list of Triangles vertices with three common properties: Position,
 // Color and Texture.
 type TrianglesData []struct {
-	Position Vec
-	Color    NRGBA
-	Picture  Vec
+	Position   Vec
+	Color      NRGBA
+	Picture    Vec
+	HasPicture bool
 }
 
 // MakeTrianglesData creates TrianglesData of length len initialized with default property values.
@@ -40,10 +41,11 @@ func (td *TrianglesData) SetLen(len int) {
 		needAppend := len - td.Len()
 		for i := 0; i < needAppend; i++ {
 			*td = append(*td, struct {
-				Position Vec
-				Color    NRGBA
-				Picture  Vec
-			}{V(0, 0), NRGBA{1, 1, 1, 1}, V(-1, -1)})
+				Position   Vec
+				Color      NRGBA
+				Picture    Vec
+				HasPicture bool
+			}{V(0, 0), NRGBA{1, 1, 1, 1}, V(0, 0), false})
 		}
 	}
 	if len < td.Len() {
@@ -77,7 +79,7 @@ func (td *TrianglesData) updateData(t Triangles) {
 	}
 	if t, ok := t.(TrianglesPicture); ok {
 		for i := range *td {
-			(*td)[i].Picture = t.Picture(i)
+			(*td)[i].Picture, (*td)[i].HasPicture = t.Picture(i)
 		}
 	}
 }
@@ -111,8 +113,8 @@ func (td *TrianglesData) Color(i int) NRGBA {
 }
 
 // Picture returns the picture property of i-th vertex.
-func (td *TrianglesData) Picture(i int) Vec {
-	return (*td)[i].Picture
+func (td *TrianglesData) Picture(i int) (pic Vec, ok bool) {
+	return (*td)[i].Picture, (*td)[i].HasPicture
 }
 
 // PictureData specifies an in-memory rectangular area of NRGBA pixels and implements Picture and
diff --git a/interface.go b/interface.go
index 0894665..6001e3a 100644
--- a/interface.go
+++ b/interface.go
@@ -97,7 +97,7 @@ type TrianglesColor interface {
 // Note that this represents picture coordinates, not an actual picture.
 type TrianglesPicture interface {
 	Triangles
-	Picture(i int) Vec
+	Picture(i int) (pic Vec, ok bool)
 }
 
 // Picture represents a rectangular area of raster data, such as a color. It has Bounds which
-- 
GitLab