add Copy method to Triangles interface
This commit is contained in:
parent
6587b54040
commit
f7fe00fe4d
32
graphics.go
32
graphics.go
|
@ -79,6 +79,13 @@ func (td *TrianglesData) Append(t Triangles) {
|
||||||
*td = append(*td, newTd...)
|
*td = append(*td, newTd...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Copy returns an exact independent copy of this TrianglesData.
|
||||||
|
func (td *TrianglesData) Copy() Triangles {
|
||||||
|
copyTd := make(TrianglesData, td.Len())
|
||||||
|
copyTd.Update(td)
|
||||||
|
return ©Td
|
||||||
|
}
|
||||||
|
|
||||||
// Position returns the position property of i-th vertex.
|
// Position returns the position property of i-th vertex.
|
||||||
func (td *TrianglesData) Position(i int) Vec {
|
func (td *TrianglesData) Position(i int) Vec {
|
||||||
return (*td)[i].Position
|
return (*td)[i].Position
|
||||||
|
@ -117,6 +124,11 @@ func (td *TrianglesColorData) Append(t Triangles) {
|
||||||
(*TrianglesData)(td).Append(t)
|
(*TrianglesData)(td).Append(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Copy returns an exact independent copy of this TrianglesColorData.
|
||||||
|
func (td *TrianglesColorData) Copy() Triangles {
|
||||||
|
return (*TrianglesColorData)((*TrianglesData)(td).Copy().(*TrianglesData))
|
||||||
|
}
|
||||||
|
|
||||||
// Position returns the position property of i-th vertex.
|
// Position returns the position property of i-th vertex.
|
||||||
func (td *TrianglesColorData) Position(i int) Vec {
|
func (td *TrianglesColorData) Position(i int) Vec {
|
||||||
return (*TrianglesData)(td).Position(i)
|
return (*TrianglesData)(td).Position(i)
|
||||||
|
@ -150,6 +162,11 @@ func (td *TrianglesTextureData) Append(t Triangles) {
|
||||||
(*TrianglesData)(td).Append(t)
|
(*TrianglesData)(td).Append(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Copy returns an exact independent copy of this TrianglesTextureData.
|
||||||
|
func (td *TrianglesTextureData) Copy() Triangles {
|
||||||
|
return (*TrianglesTextureData)((*TrianglesData)(td).Copy().(*TrianglesData))
|
||||||
|
}
|
||||||
|
|
||||||
// Position returns the position property of i-th vertex.
|
// Position returns the position property of i-th vertex.
|
||||||
func (td *TrianglesTextureData) Position(i int) Vec {
|
func (td *TrianglesTextureData) Position(i int) Vec {
|
||||||
return (*TrianglesData)(td).Position(i)
|
return (*TrianglesData)(td).Position(i)
|
||||||
|
@ -198,13 +215,24 @@ func (td *TrianglesDrawer) Draw(target Target) {
|
||||||
tri.Draw()
|
tri.Draw()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update updates the wrapped Triangles with the supplied Triangles. Call only this method to
|
// Update updates the wrapped Triangles with the supplied Triangles.
|
||||||
// update the wrapped Triangles, otherwise the TrianglesDrawer will not work correctly.
|
//
|
||||||
|
// Call only this method to update the wrapped Triangles, otherwise the TrianglesDrawer will not
|
||||||
|
// work correctly.
|
||||||
func (td *TrianglesDrawer) Update(t Triangles) {
|
func (td *TrianglesDrawer) Update(t Triangles) {
|
||||||
td.dirty = true
|
td.dirty = true
|
||||||
td.Triangles.Update(t)
|
td.Triangles.Update(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Append appends the supplied Triangles to the wrapped Triangles.
|
||||||
|
//
|
||||||
|
// Call only this method to append to the wrapped Triangles, otherwise the TrianglesDrawer will not
|
||||||
|
// work correctly.
|
||||||
|
func (td *TrianglesDrawer) Append(t Triangles) {
|
||||||
|
td.dirty = true
|
||||||
|
td.Triangles.Append(t)
|
||||||
|
}
|
||||||
|
|
||||||
// Sprite is a picture, positioned somewhere, with an optional mask color.
|
// Sprite is a picture, positioned somewhere, with an optional mask color.
|
||||||
type Sprite struct {
|
type Sprite struct {
|
||||||
td TrianglesDrawer
|
td TrianglesDrawer
|
||||||
|
|
|
@ -49,6 +49,9 @@ type Triangles interface {
|
||||||
//
|
//
|
||||||
// Behavior regarding unsupported properties should be same as with Update.
|
// Behavior regarding unsupported properties should be same as with Update.
|
||||||
Append(Triangles)
|
Append(Triangles)
|
||||||
|
|
||||||
|
// Copy creates an exact independent copy of this Triangles (with the same underlying type).
|
||||||
|
Copy() Triangles
|
||||||
}
|
}
|
||||||
|
|
||||||
// Drawer is something that can be drawn onto any Target.
|
// Drawer is something that can be drawn onto any Target.
|
||||||
|
|
10
util.go
10
util.go
|
@ -1,5 +1,7 @@
|
||||||
package pixel
|
package pixel
|
||||||
|
|
||||||
|
import "github.com/go-gl/mathgl/mgl32"
|
||||||
|
|
||||||
func clamp(x, low, high float64) float64 {
|
func clamp(x, low, high float64) float64 {
|
||||||
if x < low {
|
if x < low {
|
||||||
return low
|
return low
|
||||||
|
@ -9,3 +11,11 @@ func clamp(x, low, high float64) float64 {
|
||||||
}
|
}
|
||||||
return x
|
return x
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func transformToMat(t ...Transform) mgl32.Mat3 {
|
||||||
|
mat := mgl32.Ident3()
|
||||||
|
for i := range t {
|
||||||
|
mat = mat.Mul3(t[i].Mat())
|
||||||
|
}
|
||||||
|
return mat
|
||||||
|
}
|
||||||
|
|
14
window.go
14
window.go
|
@ -470,6 +470,15 @@ func (wt *windowTriangles) Append(t Triangles) {
|
||||||
wt.submitData()
|
wt.submitData()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (wt *windowTriangles) Copy() Triangles {
|
||||||
|
copyWt := &windowTriangles{
|
||||||
|
w: wt.w,
|
||||||
|
vs: pixelgl.MakeVertexSlice(wt.w.shader, 0, 0),
|
||||||
|
}
|
||||||
|
copyWt.Update(wt)
|
||||||
|
return copyWt
|
||||||
|
}
|
||||||
|
|
||||||
func (wt *windowTriangles) Position(i int) Vec {
|
func (wt *windowTriangles) Position(i int) Vec {
|
||||||
v := wt.data[i][positionVec2].(mgl32.Vec2)
|
v := wt.data[i][positionVec2].(mgl32.Vec2)
|
||||||
return V(float64(v.X()), float64(v.Y()))
|
return V(float64(v.X()), float64(v.Y()))
|
||||||
|
@ -512,10 +521,7 @@ func (w *Window) SetPicture(p *Picture) {
|
||||||
//
|
//
|
||||||
// Transforms are applied right-to-left.
|
// Transforms are applied right-to-left.
|
||||||
func (w *Window) SetTransform(t ...Transform) {
|
func (w *Window) SetTransform(t ...Transform) {
|
||||||
w.mat = mgl32.Ident3()
|
w.mat = transformToMat(t...)
|
||||||
for i := range t {
|
|
||||||
w.mat = w.mat.Mul3(t[i].Mat())
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetMaskColor sets a global mask color for the Window.
|
// SetMaskColor sets a global mask color for the Window.
|
||||||
|
|
Loading…
Reference in New Issue