package pixel import "image/color" // Target is something that can be drawn onto, such as a window, a canvas, and so on. // // You can notice, that there are no "drawing" methods in a Target. That's because all drawing // happens indirectly through Triangles instance generated via MakeTriangles method. type Target interface { // MakeTriangles generates a specialized copy of the provided Triangles. // // When calling Draw method on the returned Triangles, the Triangles will be drawn onto the // target that generated them. // // Note, that not every Target has to recognize all possible types of triangles. Some may // only recognize TrianglesPosition and TrianglesColor and ignore all other properties (if // present) when making new Triangles. This varies from Target to Target. MakeTriangles(Triangles) Triangles // These are the most basic Target "adjustment" methods. SetPicture(*Picture) SetTransform(...Transform) SetMaskColor(color.Color) } // Triangles represents a list of vertices, where each three vertices form a triangle. (First, // second and third is the first triangle, fourth, fifth and sixth is the second triangle, etc.) type Triangles interface { // Len returns the number of vertices. The number of triangles is the number of vertices // divided by 3. Len() int // Draw draws Triangles onto an associated Target (if any). // // Note, that this method does not have to be implemented, however it is always implemented // for Triangles generated by a Target. Draw() // Update copies vertex properties from the supplied Triangles into this Triangles. // // Properies not supported by these Triangles should be ignored. Properties not supported by // the supplied Triangles should be left untouched. // // If these Triangles and supplied Triangles have different lengths, these Triangles should // be resized. Update(Triangles) } // Drawer is something that can be drawn onto any Target. type Drawer interface { Draw(Target) } // TrianglesPosition specifies Triangles with Position property. type TrianglesPosition interface { Triangles Position(i int) Vec } // TrianglesColor specifies Triangles with Color property. type TrianglesColor interface { Triangles Color(i int) color.Color } // TrianglesTexture specifies Triangles with Texture propery. // // Note that this represents texture coordinates, not an actual texture. type TrianglesTexture interface { Triangles Texture(i int) Vec }