diff --git a/pixelgl/canvas.go b/pixelgl/canvas.go index f721855bafa24c4d704cc06d01306502f04c52a9..cb3b4fb7633efbd4fbef1aeae05ef35e8776a486 100644 --- a/pixelgl/canvas.go +++ b/pixelgl/canvas.go @@ -12,7 +12,8 @@ import ( "github.com/pkg/errors" ) -// Canvas is an off-screen rectangular BasicTarget that you can draw onto. +// Canvas is an off-screen rectangular BasicTarget and Picture at the same time, that you can draw +// onto. // // It supports TrianglesPosition, TrianglesColor, TrianglesPicture and PictureColor. type Canvas struct { @@ -32,7 +33,7 @@ type Canvas struct { orig *Canvas } -// NewCanvas creates a new empty, fully transparent Canvas with given bounds. If the smooth flag +// NewCanvas creates a new empty, fully transparent Canvas with given bounds. If the smooth flag is // set, then stretched Pictures will be smoothed and will not be drawn pixely onto this Canvas. func NewCanvas(bounds pixel.Rect, smooth bool) *Canvas { c := &Canvas{ @@ -199,14 +200,14 @@ func (c *Canvas) Bounds() pixel.Rect { return c.bounds } -// SetSmooth sets whether the stretched Pictures drawn onto this Canvas should be drawn smooth or +// SetSmooth sets whether stretched Pictures drawn onto this Canvas should be drawn smooth or // pixely. func (c *Canvas) SetSmooth(smooth bool) { c.smooth = smooth } -// Smooth returns whether the stretched Pictures drawn onto this Canvas are set to be drawn smooth -// or pixely. +// Smooth returns whether stretched Pictures drawn onto this Canvas are set to be drawn smooth or +// pixely. func (c *Canvas) Smooth() bool { return c.smooth } @@ -219,7 +220,7 @@ func (c *Canvas) setGlhfBounds() { glhf.Bounds(bx, by, bw, bh) } -// Clear fill the whole Canvas with a single color. +// Clear fills the whole Canvas with a single color. func (c *Canvas) Clear(color color.Color) { c.orig.dirty = true @@ -248,8 +249,8 @@ func (c *Canvas) Clear(color color.Color) { // Slice returns a sub-Canvas with the specified Bounds. // -// The returned value is *Canvas, the type of the return value is a general pixel.Picture just so -// that Canvas implements pixel.Picture interface. +// The type of the returned value is *Canvas, the type of the return value is a general +// pixel.Picture just so that Canvas implements pixel.Picture interface. func (c *Canvas) Slice(bounds pixel.Rect) pixel.Picture { sc := new(Canvas) *sc = *c @@ -259,8 +260,8 @@ func (c *Canvas) Slice(bounds pixel.Rect) pixel.Picture { // Original returns the most original Canvas that this Canvas was created from using Slice-ing. // -// The returned value is *Canvas, the type of the return value is a general pixel.Picture just so -// that Canvas implements pixel.Picture interface. +// The type of the returned value is *Canvas, the type of the return value is a general +// pixel.Picture just so that Canvas implements pixel.Picture interface. func (c *Canvas) Original() pixel.Picture { return c.orig } diff --git a/pixelgl/gltriangles.go b/pixelgl/gltriangles.go index 6958e1842ad91fcccc53ae6373a936b4942f3e50..73142f6b1afb7711a6876eb3fcc6be71c9965397 100644 --- a/pixelgl/gltriangles.go +++ b/pixelgl/gltriangles.go @@ -11,7 +11,7 @@ import ( // GLTriangles are OpenGL triangles implemented using glhf.VertexSlice. // // Triangles returned from this function support TrianglesPosition, TrianglesColor and -// TrianglesTexture. If you need to support more, you can "override" SetLen and Update method. +// TrianglesPicture. If you need to support more, you can "override" SetLen and Update methods. type GLTriangles struct { vs *glhf.VertexSlice data []float32 @@ -58,6 +58,8 @@ func (gt *GLTriangles) Len() int { } // SetLen efficiently resizes GLTriangles to len. +// +// Time complexity is amortized O(1). func (gt *GLTriangles) SetLen(len int) { if len > gt.Len() { needAppend := len - gt.Len() @@ -163,7 +165,7 @@ func (gt *GLTriangles) Update(t pixel.Triangles) { // Copy returns an independent copy of this GLTriangles. // -// The returned Triangles are GLTriangles as the underlying type. +// The returned Triangles are *GLTriangles as the underlying type. func (gt *GLTriangles) Copy() pixel.Triangles { return NewGLTriangles(gt.shader, gt) } diff --git a/pixelgl/input.go b/pixelgl/input.go index 8153534d57ede5443ab92d05a197532f11e282fd..1af9977c2839470c26ad4e22f24aaf7a55f51c86 100644 --- a/pixelgl/input.go +++ b/pixelgl/input.go @@ -6,27 +6,27 @@ import ( "github.com/go-gl/glfw/v3.2/glfw" ) -// Pressed returns whether button is currently pressed down. +// Pressed returns whether the Button is currently pressed down. func (w *Window) Pressed(button Button) bool { return w.currInp.buttons[button] } -// JustPressed returns whether button has just been pressed down. +// JustPressed returns whether the Button has just been pressed down. func (w *Window) JustPressed(button Button) bool { return w.currInp.buttons[button] && !w.prevInp.buttons[button] } -// JustReleased returns whether button has just been released up. +// JustReleased returns whether the Button has just been released up. func (w *Window) JustReleased(button Button) bool { return !w.currInp.buttons[button] && w.prevInp.buttons[button] } -// MousePosition returns the current mouse position relative to the window. +// MousePosition returns the current mouse position in the Window's Bounds. func (w *Window) MousePosition() pixel.Vec { return w.currInp.mouse } -// MouseScroll returns the scroll amount (in both axis) since the last call to Window.Update. +// MouseScroll returns the mouse scroll amount (in both axes) since the last call to Window.Update. func (w *Window) MouseScroll() pixel.Vec { return w.currInp.scroll } diff --git a/pixelgl/run.go b/pixelgl/run.go index 599c4ab7aa89d05613f46b8af0a8697e7d2ec940..1c3a2d91fbcaec1f5e9dced38cba747f638002a0 100644 --- a/pixelgl/run.go +++ b/pixelgl/run.go @@ -6,27 +6,23 @@ import ( "github.com/pkg/errors" ) -// 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 PixelGL. 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(...) -// for { -// // your game's main loop -// } +// // interact with Pixel and PixelGL from here (even concurrently) // } // // func main() { // 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 is be called from your main -// function. +// You can spawn any number of goroutines from your run function and interact with PixelGL +// concurrently. The only condition is that the Run function is called from your main function. func Run(run func()) { err := glfw.Init() if err != nil { diff --git a/pixelgl/window.go b/pixelgl/window.go index b384c384ad94edfbb17617e33db8725e609f518c..885b7088a813e41857229449465de2c9a89b23f8 100644 --- a/pixelgl/window.go +++ b/pixelgl/window.go @@ -11,11 +11,11 @@ import ( "github.com/pkg/errors" ) -// WindowConfig is a structure for specifying all possible properties of a window. Properties are +// WindowConfig is a 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. // -// Note that you always need to set the Bounds of the Window. +// Note that you always need to set the Bounds of a Window. type WindowConfig struct { // Title at the top of the Window. Title string @@ -47,7 +47,7 @@ type WindowConfig struct { VSync bool } -// Window is a window handler. Use this type to manipulate a window (input, drawing, ...). +// Window is a window handler. Use this type to manipulate a window (input, drawing, etc.). type Window struct { window *glfw.Window @@ -142,7 +142,7 @@ func (w *Window) Destroy() { }) } -// Update swaps buffers and polls events. +// Update swaps buffers and polls events. Call this method at the end of each frame. func (w *Window) Update() { mainthread.Call(func() { _, _, oldW, oldH := intBounds(w.bounds) @@ -207,8 +207,8 @@ func (w *Window) SetTitle(title string) { }) } -// SetBounds sets the bounds of the Window in pixels. Bounds can be fractional, but the size will be -// changed in the next Update to a real possible size of the Window. +// SetBounds sets the bounds of the Window in pixels. Bounds can be fractional, but the actual size +// of the window will be rounded to integers. func (w *Window) SetBounds(bounds pixel.Rect) { w.bounds = bounds mainthread.Call(func() { @@ -268,11 +268,10 @@ func (w *Window) setWindowed() { } // SetMonitor sets the Window fullscreen on the given Monitor. If the Monitor is nil, the Window -// will be resored to windowed state instead. +// will be restored to windowed state 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. +// The Window will be automatically set to the Monitor's resolution. If you want a different +// resolution, you will need to set it manually with SetBounds method. func (w *Window) SetMonitor(monitor *Monitor) { if w.Monitor() != monitor { if monitor != nil { @@ -288,7 +287,7 @@ func (w *Window) IsFullscreen() bool { return w.Monitor() != nil } -// Monitor returns a monitor the Window is fullscreen is on. If the Window is not fullscreen, this +// Monitor returns a monitor the Window is fullscreen on. If the Window is not fullscreen, this // function returns nil. func (w *Window) Monitor() *Monitor { monitor := mainthread.CallVal(func() interface{} { @@ -316,21 +315,21 @@ func (w *Window) Focused() bool { }).(bool) } -// Maximize puts the Window window to the maximized state. +// Maximize puts the Window to the maximized state. func (w *Window) Maximize() { mainthread.Call(func() { w.window.Maximize() }) } -// Restore restores the Window window from the maximized state. +// Restore restores the Window from the maximized state. func (w *Window) Restore() { mainthread.Call(func() { w.window.Restore() }) } -// SetVSync sets whether the Window should synchronize with the monitor refresh rate. +// SetVSync sets whether the Window's Update should synchronize with the monitor refresh rate. func (w *Window) SetVSync(vsync bool) { w.vsync = vsync } @@ -357,7 +356,7 @@ func (w *Window) end() { // MakeTriangles generates a specialized copy of the supplied Triangles that will draw onto this // Window. // -// Window supports TrianglesPosition, TrianglesColor and TrianglesTexture. +// Window supports TrianglesPosition, TrianglesColor and TrianglesPicture. func (w *Window) MakeTriangles(t pixel.Triangles) pixel.TargetTriangles { return w.canvas.MakeTriangles(t) } @@ -391,7 +390,7 @@ func (w *Window) Smooth() bool { return w.canvas.Smooth() } -// Clear clears the Window with a color. +// Clear clears the Window with a single color. func (w *Window) Clear(c color.Color) { w.canvas.Clear(c) }