diff --git a/color.go b/color.go
index 72a50bf891a813470c0bd95dabec13ccd85ac0f0..a70ff720a0bd5f1849c68393ec9b96f60091354f 100644
--- a/color.go
+++ b/color.go
@@ -9,7 +9,8 @@ type NRGBA struct {
 	R, G, B, A float64
 }
 
-// Add adds color d to color c component-wise and returns the result (the components are not clamped).
+// Add adds color d to color c component-wise and returns the result (the components are not
+// clamped).
 func (c NRGBA) Add(d NRGBA) NRGBA {
 	return NRGBA{
 		R: c.R + d.R,
@@ -19,7 +20,8 @@ func (c NRGBA) Add(d NRGBA) NRGBA {
 	}
 }
 
-// Sub subtracts color d from color c component-wise and returns the result (the components are not clamped).
+// Sub subtracts color d from color c component-wise and returns the result (the components
+// are not clamped).
 func (c NRGBA) Sub(d NRGBA) NRGBA {
 	return NRGBA{
 		R: c.R - d.R,
@@ -39,7 +41,8 @@ func (c NRGBA) Mul(d NRGBA) NRGBA {
 	}
 }
 
-// Scaled multiplies each component of color c by scale and returns the result (the components are not clamped).
+// Scaled multiplies each component of color c by scale and returns the result (the components
+// are not clamped).
 func (c NRGBA) Scaled(scale float64) NRGBA {
 	return NRGBA{
 		R: c.R * scale,
diff --git a/geometry.go b/geometry.go
index 291c4e77f4e1cd02482efb38113fbae1dd6a1910..0ee8b4b71d1cdeb8bc1ff468aec9640bb50f91d2 100644
--- a/geometry.go
+++ b/geometry.go
@@ -6,10 +6,10 @@ import (
 	"math/cmplx"
 )
 
-// Vec is a 2d vector type. It is unusually implemented as complex128 for convenience. Since Go does
-// not allow operator overloading, implementing vector as a struct leads to a bunch of methods for
-// addition, subtraction and multiplication of vectors. With complex128, much of this functionality
-// is given through operators.
+// Vec is a 2d vector type. It is unusually implemented as complex128 for convenience. Since
+// Go does not allow operator overloading, implementing vector as a struct leads to a bunch of
+// methods for addition, subtraction and multiplication of vectors. With complex128, much of
+// this functionality is given through operators.
 //
 // Create vectors with the V constructor:
 //
@@ -27,7 +27,7 @@ import (
 //   u := pixel.V(2, 3)
 //   v := pixel.V(8, 1)
 //   if u.X() < 0 {
-//       fmt.Println("this won't happen")
+//	     fmt.Println("this won't happen")
 //   }
 //   x := u.Unit().Dot(v.Unit())
 type Vec complex128
@@ -97,7 +97,8 @@ func (u Vec) Cross(v Vec) float64 {
 	return u.X()*v.Y() - v.X()*u.Y()
 }
 
-// Rect is a 2d rectangle aligned with the axis of the coordinate system. It has a position and a size.
+// Rect is a 2d rectangle aligned with the axis of the coordinate system. It has a position
+// and a size.
 //
 // You can manipulate the position and the size using the usual vector operations.
 type Rect struct {
diff --git a/graphics.go b/graphics.go
index 954f56dbf65ecef65c448700aea02072ca4b457e..03e3893464ff073368bc0f7fbd121cdcc52ab372 100644
--- a/graphics.go
+++ b/graphics.go
@@ -11,8 +11,9 @@ import (
 
 // Drawer is anything that can be drawn. It's by no means a drawer inside your table.
 //
-// Drawer consists of a single methods: Draw. Draw methods takes any number of Transform arguments. It applies these
-// transforms in the reverse order and finally draws something transformed by these transforms.
+// Drawer consists of a single methods: Draw. Draw methods takes any number of Transform
+// arguments. It applies these transforms in the reverse order and finally draws something
+// transformed by these transforms.
 //
 // Example:
 //
@@ -24,21 +25,23 @@ type Drawer interface {
 	Draw(t ...Transform)
 }
 
-// Group is used to effeciently handle a collection of objects with a common parent. Usually many objects share a parent,
-// using a group can significantly increase performance in these cases.
+// Group is used to effeciently handle a collection of objects with a common parent. Usually many
+// objects share a parent, using a group can significantly increase performance in these cases.
 //
-// To use a group, first, create a group and as it's parent use the common parent of the collection of objects:
+// To use a group, first, create a group and as it's parent use the common parent of the
+// collection of objects:
 //
 //   group := pixel.NewGroup(commonParent)
 //
-// Then, when creating the objects, use the group as their parent, instead of the original common parent, but, don't forget
-// to put everything into a With block, like this:
+// Then, when creating the objects, use the group as their parent, instead of the original
+// common parent, but, don't forget to put everything into a With block, like this:
 //
 //   group.With(func() {
 //       object := newArbitratyObject(group, ...) // group is the parent of the object
 //   })
 //
-// When dealing with objects associated with a group, it's always necessary to wrap that into a With block:
+// When dealing with objects associated with a group, it's always necessary to wrap that into
+// a With block:
 //
 //   group.With(func() {
 //       for _, obj := range objectsWithCommonParent {
@@ -74,10 +77,11 @@ func (g *Group) Do(sub func(pixelgl.Context)) {
 
 // Shape is a general drawable shape constructed from vertices.
 //
-// Vertices are specified in the vertex array of a shape. A shape can have a picture, a color (mask) and a static
-// transform.
+// Vertices are specified in the vertex array of a shape. A shape can have a picture, a color
+// (mask) and a static transform.
 //
-// Usually you use this type only indirectly throught other specific shapes (sprites, polygons, ...) embedding it.
+// Usually you use this type only indirectly throught other specific shapes (sprites, polygons,
+// ...) embedding it.
 type Shape struct {
 	parent    pixelgl.Doer
 	picture   *Picture
@@ -155,10 +159,11 @@ func (s *Shape) Draw(t ...Transform) {
 	})
 }
 
-// MultiShape is a shape composed of several other shapes. These shapes cannot be modifies after combined into a multishape.
+// MultiShape is a shape composed of several other shapes. These shapes cannot be modifies
+// after combined into a multishape.
 //
-// Using a multishape can greatly increase drawing performance. However, it's only usable when the relative transformations
-// of the shapes don't change (e.g. static blocks in a level).
+// Using a multishape can greatly increase drawing performance. However, it's only usable when
+// the relative transformations of the shapes don't change (e.g. static blocks in a level).
 //
 // All shapes in a multishape must share the same texture (or use no texture).
 type MultiShape struct {
@@ -234,18 +239,19 @@ func NewMultiShape(parent pixelgl.Doer, shapes ...*Shape) *MultiShape {
 	return &MultiShape{NewShape(parent, picture, color.White, Position(0), va)}
 }
 
-// Sprite is a picture that can be drawn on the screen. Optionally it can be color masked or tranformed.
+// Sprite is a picture that can be drawn on the screen. Optionally it can be color masked
+// or tranformed.
 //
-// Usually, you only transform objects when you're drawing them (by passing transforms to the Draw method).
-// With sprites however, it can be useful to also transform them "statically". For example, sprites are
-// anchor by their bottom-left corner by default. Setting a transform can change this anchored to the center,
-// or wherever you want.
+// Usually, you only transform objects when you're drawing them (by passing transforms to the
+// Draw method).  With sprites however, it can be useful to also transform them "statically". For
+// example, sprites are anchor by their bottom-left corner by default. Setting a transform can
+// change this anchored to the center, or wherever you want.
 type Sprite struct {
 	*Shape
 }
 
-// NewSprite creates a new sprite with the supplied picture. The sprite's size is the size of the supplied picture.
-// If you want to change the sprite's size, change it's transform.
+// NewSprite creates a new sprite with the supplied picture. The sprite's size is the size of
+// the supplied picture.  If you want to change the sprite's size, change it's transform.
 func NewSprite(parent pixelgl.Doer, picture *Picture) *Sprite {
 	var va *pixelgl.VertexArray
 
@@ -290,8 +296,8 @@ type LineColor struct {
 	width float64
 }
 
-// NewLineColor creates a new line shape between points A and B filled with a single color. Parent is an object
-// that this shape belongs to, such as a window, or a graphics effect.
+// NewLineColor creates a new line shape between points A and B filled with a single color. Parent
+// is an object that this shape belongs to, such as a window, or a graphics effect.
 func NewLineColor(parent pixelgl.Doer, c color.Color, a, b Vec, width float64) *LineColor {
 	var va *pixelgl.VertexArray
 
@@ -371,8 +377,8 @@ type PolygonColor struct {
 	points []Vec
 }
 
-// NewPolygonColor creates a new polygon shape filled with a single color. Parent is an object that this shape belongs to,
-// such as a window, or a graphics effect.
+// NewPolygonColor creates a new polygon shape filled with a single color. Parent is an object
+// that this shape belongs to, such as a window, or a graphics effect.
 func NewPolygonColor(parent pixelgl.Doer, c color.Color, points ...Vec) *PolygonColor {
 	var va *pixelgl.VertexArray
 
@@ -436,9 +442,10 @@ type EllipseColor struct {
 	fill   float64
 }
 
-// NewEllipseColor creates a new ellipse shape filled with a single color. Parent is an object that this shape belongs to,
-// such as a window, or a graphics effect. Fill should be a number between 0 and 1 which specifies how much of the ellipse will
-// be filled (from the outside). The value of 1 means that the whole ellipse is filled. The value of 0 means that none of the
+// NewEllipseColor creates a new ellipse shape filled with a single color. Parent is an object
+// that this shape belongs to, such as a window, or a graphics effect. Fill should be a number
+// between 0 and 1 which specifies how much of the ellipse will be filled (from the outside). The
+// value of 1 means that the whole ellipse is filled. The value of 0 means that none of the
 // ellipse is filled (which makes the ellipse invisible).
 func NewEllipseColor(parent pixelgl.Doer, c color.Color, radius Vec, fill float64) *EllipseColor {
 	var va *pixelgl.VertexArray
diff --git a/input.go b/input.go
index 4a9be53e76a6092bf6368bf825769446f0279850..ab2f4a664992e1c5a78fca45cf5d1281198ba8b2 100644
--- a/input.go
+++ b/input.go
@@ -224,6 +224,7 @@ func (w *Window) updateInput() {
 		glfw.PollEvents()
 	})
 
-	// cache current state to temp (so that if there are callbacks outside this function, everything works)
+	// cache current state to temp (so that if there are callbacks outside this function,
+	// everything works)
 	w.tempInp = w.currInp
 }
diff --git a/picture.go b/picture.go
index e852d84e541508861adf1d6ef0e9106f0a22ebcf..54f4e795b3dc8721f04af468f82b8c59fde425e6 100644
--- a/picture.go
+++ b/picture.go
@@ -10,8 +10,9 @@ import (
 
 // Picture is a raster picture. It is usually used with sprites.
 //
-// A picture is created from an image.Image, that can be either loaded from a file, or generated. After the creation
-// a picture can be sliced (slicing creates a "sub-picture" from a picture) into smaller pictures.
+// A picture is created from an image.Image, that can be either loaded from a file, or
+// generated. After the creation a picture can be sliced (slicing creates a "sub-picture"
+// from a picture) into smaller pictures.
 type Picture struct {
 	texture *pixelgl.Texture
 	bounds  Rect
@@ -47,11 +48,11 @@ func (p *Picture) Texture() *pixelgl.Texture {
 	return p.texture
 }
 
-// Slice returns a picture within the supplied rectangle of the original picture. The original and the sliced picture
-// share the same texture.
+// Slice returns a picture within the supplied rectangle of the original picture. The original
+// and the sliced picture share the same texture.
 //
-// For example, suppose we have a 100x200 pixels picture. If we slice it with rectangle (50, 100, 50, 100), we get
-// the upper-right quadrant of the original picture.
+// For example, suppose we have a 100x200 pixels picture. If we slice it with rectangle (50,
+// 100, 50, 100), we get the upper-right quadrant of the original picture.
 func (p *Picture) Slice(slice Rect) *Picture {
 	return &Picture{
 		texture: p.texture,
@@ -61,7 +62,8 @@ func (p *Picture) Slice(slice Rect) *Picture {
 
 // Bounds returns the bounding rectangle of this picture relative to the most original picture.
 //
-// If the original picture gets sliced with the return value of this method, this picture will be obtained.
+// If the original picture gets sliced with the return value of this method, this picture will
+// be obtained.
 func (p *Picture) Bounds() Rect {
 	return p.bounds
 }
diff --git a/run.go b/run.go
index 343b92bfccb46af99c8fbae8596ece3e7cf97952..ee5f4938740c7b4ef64b8a41a770f00b3022b8b5 100644
--- a/run.go
+++ b/run.go
@@ -5,10 +5,12 @@ import (
 	"github.com/go-gl/glfw/v3.2/glfw"
 )
 
-// Run is essentialy the "main" function of Pixel. It exists mainly due to the technical limitations of OpenGL and operating systems,
-// in short, all graphics and window manipulating calls must be done from the main thread. Run makes this possible.
+// Run is essentialy the "main" function of Pixel. It exists mainly due to the technical
+// limitations of OpenGL and operating systems, in short, all graphics and window manipulating
+// calls must be done from the main thread. Run makes this possible.
 //
-// Call this function from the main function of your application. This is necessary, so that Run runs on the main thread.
+// Call this function from the main function of your application. This is necessary, so that
+// Run runs on the main thread.
 //
 //   func run() {
 //       window := pixel.NewWindow(...)
@@ -21,8 +23,9 @@ import (
 //       pixel.Run(run)
 //   }
 //
-// You can spawn any number of goroutines from you run function and interact with Pixel concurrently.
-// The only condition is that the Run function must be called from your main function.
+// You can spawn any number of goroutines from you run function and interact with Pixel
+// concurrently.  The only condition is that the Run function must be called from your main
+// function.
 func Run(run func()) {
 	defer glfw.Terminate()
 	pixelgl.Run(run)
diff --git a/transform.go b/transform.go
index ea0281a721141e112b8474966314528a758b4978..9679a487a61292370a08048dca2b3246cb69015c 100644
--- a/transform.go
+++ b/transform.go
@@ -2,16 +2,16 @@ package pixel
 
 import "github.com/go-gl/mathgl/mgl32"
 
-// Transform holds space transformation information. Concretely, a transformation is specified by position,
-// anchor, scale and rotation.
+// Transform holds space transformation information. Concretely, a transformation is specified
+// by position, anchor, scale and rotation.
 //
-// All points are first rotated around the anchor. Then they are multiplied by the scale. If the
-// scale factor is 2, the object becomes 2x bigger. Finally, all points are moved, so that the original
-// anchor is located precisely at the position.
+// All points are first rotated around the anchor. Then they are multiplied by the scale. If
+// the scale factor is 2, the object becomes 2x bigger. Finally, all points are moved, so that
+// the original anchor is located precisely at the position.
 //
-// Create a Transform object with the Position function. This sets the position variable, which is the
-// most important. Then use methods, like Scale and Rotate to change scale, rotation and achor. The order
-// in which you apply these methods is irrelevant.
+// Create a Transform object with the Position function. This sets the position variable,
+// which is the most important. Then use methods, like Scale and Rotate to change scale,
+// rotation and achor. The order in which you apply these methods is irrelevant.
 //
 //   pixel.Position(pixel.V(100, 100)).Rotate(math.Pi / 3).Scale(1.5)
 type Transform struct {
@@ -19,7 +19,8 @@ type Transform struct {
 	rot           float64
 }
 
-// Position creates a Transformation object with specified position. Anchor is (0, 0), rotation is 0 and scale is 1.
+// Position creates a Transformation object with specified position. Anchor is (0, 0), rotation
+// is 0 and scale is 1.
 func Position(position Vec) Transform {
 	return Transform{
 		pos: position,
@@ -73,17 +74,18 @@ func (t Transform) MoveAnchor(delta Vec) Transform {
 
 // Scale scales the transform by the supplied factor.
 //
-// Note, that subsequent calls to this method accumulate the final scale factor. Scaling two times by 2 is equivalent
-// to scaling once by 4.
+// Note, that subsequent calls to this method accumulate the final scale factor. Scaling two
+// times by 2 is equivalent to scaling once by 4.
 func (t Transform) Scale(scale float64) Transform {
 	t.sca = t.sca.Scaled(scale)
 	return t
 }
 
-// ScaleXY scales the transform by the supplied X and Y factor. Note, that scale is applied before rotation.
+// ScaleXY scales the transform by the supplied X and Y factor. Note, that scale is applied
+// before rotation.
 //
-// Note, that subsequent calls to this method accumulate the final scale factor. Scaling two times by 2 is equivalent
-// to scaling once by 4.
+// Note, that subsequent calls to this method accumulate the final scale factor. Scaling two
+// times by 2 is equivalent to scaling once by 4.
 func (t Transform) ScaleXY(scale Vec) Transform {
 	t.sca = V(t.sca.X()*scale.X(), t.sca.Y()*scale.Y())
 	return t
@@ -91,8 +93,8 @@ func (t Transform) ScaleXY(scale Vec) Transform {
 
 // Rotate rotates the transform by the supplied angle in radians.
 //
-// Note, that subsequent calls to this method accumulate the final rotation. Rotating two times by Pi/2 is
-// equivalent to rotating once by Pi.
+// Note, that subsequent calls to this method accumulate the final rotation. Rotating two times
+// by Pi/2 is equivalent to rotating once by Pi.
 func (t Transform) Rotate(angle float64) Transform {
 	t.rot += angle
 	return t
@@ -134,8 +136,8 @@ func (t Transform) InvMat() mgl32.Mat3 {
 	return mat
 }
 
-// Camera is a convenience function, that returns a Transform that acts like a camera.
-// Center is the position in the world coordinates, that will be projected onto the center of the screen.
+// Camera is a convenience function, that returns a Transform that acts like a camera.	Center is
+// the position in the world coordinates, that will be projected onto the center of the screen.
 // One unit in world coordinates will be projected onto zoom pixels.
 //
 // It is possible to apply additional rotations, scales and moves to the returned transform.
diff --git a/window.go b/window.go
index c3b40d32abec43dc5930d27eb8368c737132ac23..4939d939a8bd9bfb11a5c97a5ce0c41e13c8f941 100644
--- a/window.go
+++ b/window.go
@@ -14,8 +14,8 @@ import (
 )
 
 // WindowConfig is convenience structure for specifying all possible properties of a window.
-// Properties are chosen in such a way, that you usually only need to set a few of them - defaults
-// (zeros) should usually be sensible.
+// Properties are chosen in such a way, that you usually only need to set a few of them -
+// defaults (zeros) should usually be sensible.
 //
 // Note that you always need to set the width and the height of a window.
 type WindowConfig struct {
@@ -28,7 +28,8 @@ type WindowConfig struct {
 	// Height of a window in pixels.
 	Height float64
 
-	// If set to nil, a window will be windowed. Otherwise it will be fullscreen on the specified monitor.
+	// If set to nil, a window will be windowed. Otherwise it will be fullscreen on the
+	// specified monitor.
 	Fullscreen *Monitor
 
 	// Whether a window is resizable.
@@ -46,11 +47,12 @@ type WindowConfig struct {
 	// Whether a window is maximized.
 	Maximized bool
 
-	// VSync (vertical synchronization) synchronizes window's framerate with the framerate of the monitor.
+	// VSync (vertical synchronization) synchronizes window's framerate with the framerate
+	// of the monitor.
 	VSync bool
 
-	// Number of samples for multi-sample anti-aliasing (edge-smoothing).
-	// Usual values are 0, 2, 4, 8 (powers of 2 and not much more than this).
+	// Number of samples for multi-sample anti-aliasing (edge-smoothing).  Usual values
+	// are 0, 2, 4, 8 (powers of 2 and not much more than this).
 	MSAASamples int
 }
 
@@ -183,8 +185,8 @@ func (w *Window) DefaultShader() *pixelgl.Shader {
 
 // SetClosed sets the closed flag of a window.
 //
-// This is usefull when overriding the user's attempt to close a window, or just to close a window
-// from within a program.
+// This is usefull when overriding the user's attempt to close a window, or just to close a
+// window from within a program.
 func (w *Window) SetClosed(closed bool) {
 	pixelgl.Do(func() {
 		w.window.SetShouldClose(closed)
@@ -207,8 +209,8 @@ func (w *Window) SetTitle(title string) {
 	})
 }
 
-// SetSize resizes a window to the specified size in pixels.
-// In case of a fullscreen window, it changes the resolution of that window.
+// SetSize resizes a window to the specified size in pixels.  In case of a fullscreen window,
+// it changes the resolution of that window.
 func (w *Window) SetSize(width, height float64) {
 	pixelgl.Do(func() {
 		w.window.SetSize(int(width), int(height))
@@ -239,10 +241,12 @@ func (w *Window) Hide() {
 	})
 }
 
-// SetFullscreen sets a window fullscreen on a given monitor. If the monitor is nil, the window will be resored to windowed instead.
+// SetFullscreen sets a window fullscreen on a given monitor. If the monitor is nil, the window
+// will be resored to windowed instead.
 //
-// Note, that there is nothing about the resolution of the fullscreen window. The window is automatically set to the monitor's
-// resolution. If you want a different resolution, you need to set it manually with SetSize method.
+// Note, that there is nothing about the resolution of the fullscreen window. The window is
+// automatically set to the monitor's resolution. If you want a different resolution, you need
+// to set it manually with SetSize method.
 func (w *Window) SetFullscreen(monitor *Monitor) {
 	if w.Monitor() != monitor {
 		if monitor == nil {
@@ -281,7 +285,8 @@ func (w *Window) IsFullscreen() bool {
 	return w.Monitor() != nil
 }
 
-// Monitor returns a monitor a fullscreen window is on. If the window is not fullscreen, this function returns nil.
+// Monitor returns a monitor a fullscreen window is on. If the window is not fullscreen, this
+// function returns nil.
 func (w *Window) Monitor() *Monitor {
 	monitor := pixelgl.DoVal(func() interface{} {
 		return w.window.GetMonitor()