Commit Graph

366 Commits

Author SHA1 Message Date
Alex Szpakowski 1eed86426b Merge default into minor
--HG--
branch : minor
2016-04-02 18:27:33 -03:00
Alex Szpakowski 901cc362df Added 'shaderswitches' to love.graphics.getStats. 2016-04-02 18:14:52 -03:00
Bart van Strien db8e7a7670 Merge default into minor
--HG--
branch : minor
2016-04-02 17:19:20 +02:00
Alex Szpakowski cc1b9bc619 Moved most love.math functions out of the Math class, since they're pure functions.
--HG--
branch : minor
2016-03-28 19:46:29 -03:00
Alex Szpakowski aa88383793 Fixed per-vertex colors (e.g. spritebatch colors) improperly applying gamma correction when the default shader is used and gamma correction is requested but not supported on OpenGL ES. 2016-03-26 12:01:34 -03:00
Alex Szpakowski 9efbe4892c Merge default into minor.
--HG--
branch : minor
2016-03-22 20:53:09 -03:00
Alex Szpakowski 090c50795a Fix love.window.setMode crashing if a Canvas is active. 2016-03-22 18:05:26 -03:00
Alex Szpakowski 9ebd759851 Don't call glGetFloat every time love.graphics.getSystemLimits is called. 2016-03-20 22:00:24 -03:00
Alex Szpakowski 2e5f385be3 Merge default into minor
--HG--
branch : minor
2016-03-03 21:28:30 -04:00
Alex Szpakowski f51bbb8462 Cleaned up some StrongRef-related code. 2016-03-01 18:57:17 -04:00
Bart van Strien 977ffd1154 Merge in default
--HG--
branch : minor
2016-02-26 14:52:02 +01:00
Alex Szpakowski cf4b409302 Renamed some things. 2016-02-18 22:11:41 -04:00
Alex Szpakowski 1be2e34c92 Merged default into minor.
--HG--
branch : minor
2016-02-14 19:59:34 -04:00
Alex Szpakowski f7ee949af8 Fixed love.graphics.clear(colortable) causing crashes in GLES 2.0 when a Canvas is active (resolves issue #1127). 2016-02-14 00:26:02 -04:00
Alex Szpakowski 7c4edf2efc love.graphics object creation functions (love.graphics.new*) now cause an error instead of hard-crashing, if called when the window has not been created yet. 2016-02-11 22:34:33 -04:00
Alex Szpakowski ed933847f8 Color values in love's APIs are now in the range of [0, 1] rather than [0, 255].
--HG--
branch : minor
2016-01-31 10:49:29 -04:00
Alex Szpakowski 6d6d805858 Workaround for love.graphics.clear + love.graphics.setCanvas AMD driver bug, take two. 2016-01-09 23:40:04 -04:00
Alex Szpakowski 4f093e7fac Added a workaround for an AMD driver bug where setCanvas + clear + setCanvas doesn't work. 2016-01-09 17:14:05 -04:00
Alex Szpakowski 46a2e7b85c Happy new year! 🎉 2016-01-01 00:05:06 -04:00
Alex Szpakowski b48117544d Added "lighten" and "darken" blend modes (resolves issue #443).
They perform the equations res.rgba = max(dst.rgba, src.rgba) and res.rgba = min(dst.rgba, src.rgba) respectively.

They only work when the "premultiplied" blend alpha mode is used, and an error occurs otherwise.  They also aren't supported on some non-iOS OpenGL ES 2 systems. Check for support with love.graphics.getSupported().lighten.
2015-12-31 15:54:02 -04:00
Alex Szpakowski a42341aa73 Added a new variant of love.graphics.arc: arc(drawmode, arcmode, x, y, radius, angle1, angle2 [, points]).
arcmode is "open", "closed", or "pie" (with pie being the mode used for the original variant of the function).
2015-12-31 00:13:01 -04:00
Alex Szpakowski 09e6a9a434 When multiple canvases are active at once (MRT), individual canvases can now be selectively cleared with love.graphics.clear(c1, c2, ...) by passing empty tables for the canvases that shouldn't be cleared, and color tables for the canvases that should. 2015-12-29 00:10:40 -04:00
Alex Szpakowski 48345bd58c Changed the optional 'multiply alpha' boolean argument in love.graphics.setBlendMode to be an enum with constants 'alphamultiply' and 'premultiplied'.
The default value for the second argument of setBlendMode is 'alphamultiply'.
2015-12-16 14:53:16 -04:00
Alex Szpakowski 0a059814e7 Revamped love.graphics.stencil and love.graphics.setStencilTest:
- Each canvas (and the screen) has an invisible stencil value associated with each pixel. Stencil values are between [0, 255].

- love.graphics.stencil takes a function argument which draws things, and makes the geometry of what's drawn set the stencil values of pixels instead of coloring the pixels.

- Its second argument is a 'stencil action' which determines what happens to the stencil values of pixels. The possible stencil actions are 'replace' (the default), 'invert', 'increment', 'decrement', 'incrementwrap', and 'decrementwrap'. If the stencil action is 'replace', the third argument of love.graphics.stencil is a number between [0, 255] which determines what the stencil value of each pixel that touches drawn objects is replaced with.

The fourth argument is a boolean which determines whether the previous stencil values of all pixels on-screen should be kept (true), or cleared to 0 (false, the default.) love.graphics.clear also clears the stencil values.

- love.graphics.setStencilTest allows for anything drawn to be affected by a comparison between the arguments to setStencilTest and the existing stencil value of the pixels that are touched by what's drawn. Its first argument is a compare mode which can be 'equal', 'notequal', 'less', 'lequal', 'gequal', or 'greater', and the second argument is an integer value (between 0 and 255) used in the comparison with the value in the stencil buffer.

For example, love.graphics.setStencilTest("greater", 0) will cause any geometry drawn afterwards to only appear on pixels whose stencil value is greater than 0.
2015-12-14 20:43:39 -04:00
Bart van Strien 22f2175bec Add initial video playback support for Ogg Theora videos (resolves issue #66.)
The basic APIs are:

video = love.graphics.newVideo("myvideo.ogv")

love.graphics.draw(video, ...) -- Video objects are Drawables.

video:play(), video:pause()

video:getDuration(), video:tell(), video:rewind(), video:seek(seconds)

video:getSource()

video:getWidth(), video:getHeight(), video:setFilter(min, mag)

More advanced APIs include video:setSource(source), video:getStream(), and videostream:setSync.

To use a custom pixel shader when drawing a Video, call the new TexelVideo(texcoords) function instead of Texel(texture, texcoords) in order to get the pixel colors of a video frame.
2015-12-08 22:41:19 -04:00
Alex Szpakowski 4c82c96369 Added a new texture wrap mode "clampzero", which outputs transparent black (or opaque black for textures without an alpha channel) rather than the texture's edge colors, when it's drawn or sampled from outside of its regular texture coordinate range. 2015-11-30 02:22:20 -04:00
Alex Szpakowski 890e8f1086 Simplified the code for love.graphics.arc. 2015-11-27 17:49:17 -04:00
Alex Szpakowski a81621df82 Removed the 'multicanvas' GraphicsFeature constant since it's redundant (the love.graphics.getSystemLimits().multicanvas number can be used instead.) 2015-11-14 19:33:56 -04:00
Alex Szpakowski 7043b5314d Added high-dpi / retina support to the no-game screen; additional minor tweaks and cleanup. 2015-11-11 19:35:45 -04:00
Alex Szpakowski 389b91cf6f Added per-character color support to love.graphics.print/printf and Text objects. Resolves issue #865.
The aforementioned functions now optionally accept an array instead of a plain string. The array is in the format of: {{r, g, b [, a]}, "first colored text, ", {r, g, b [, a]}, "second colored text", ...}, where the color values specify the color to use in the next section of the text.
2015-11-01 23:17:46 -04:00
Alex Szpakowski 0bf80bb9fc Fixed a minor memory leak in love.graphics.setMode. 2015-09-16 22:28:22 -03:00
Alex Szpakowski 00845c0ad0 Added love.graphics.intersectScissor(x, y, w, h). Resolves issue #1071.
It sets the active scissor rectangle to the intersection of the existing scissor (if any) and the specified rectangle.
2015-09-16 19:04:57 -03:00
Alex Szpakowski dc7cffe111 Fixed the color set by love.graphics.setColor not being restored properly when love.graphics.pop is called after love.graphics.push("all"). 2015-09-05 11:20:47 -03:00
Alex Szpakowski 1261427304 Replaced love.graphics.point with love.graphics.points, which draws a number of points at a time.
It currently has 3 variants, with the last one using optional per-point colors:

- love.graphics.points(x1, y1, x2, y2, ...)

- love.graphics.points({x1, y1, x2, y2, ...})

- love.graphics.points({{x1, y1 [, r, g, b, a]}, {x2, y2 [, r, g, b, a]}, ...}).
2015-08-19 17:48:27 -03:00
Alex Szpakowski d215d8a91e Reworked sRGB / gamma-correct APIs:
Gamma-correct blending and shader math can be enabled globally via the new 't.gammacorrect' boolean flag in love.conf.
The new function love.graphics.isGammaCorrect will return true if it was requested in love.conf and is supported on the system.

When gamma correct rendering is enabled, colors (including the colors of pixels from images) are automatically converted from sRGB to linear RGB before use. When drawing to the main screen or to a canvas with the 'normal' or 'srgb' format, the final output colors of pixel shaders are automatically converted from linear RGB to sRGB after blending and before the color is stored in the pixel.

This lets the rendering pipeline do math using linear RGB values for colors rather than sRGB values, so the math is correct, without making users of the APIs manually linearize their colors with the love.math.gammaToLinear function (which still exists). The final output of the screen is encoded as sRGB, which is what systems expect. Canvases (except when otherwise requested) store their contents with sRGB encoding for increased precision with darker colors.

the 'srgb' window setting flag has been removed, as well as the 'srgb' image flag. A new image flag 'linear' has been added, which when set to true will cause the colors of the image to always be treated as linear RGB rather than sRGB, when gamma-correct rendering is enabled.

A new function 'Shader:sendColor' has been added, which has the same argument structure as 'Shader:send' but expects colors in the range of [0, 255]. When gamma-correct rendering is enabled it automatically gamma-corrects the given colors (by applying gammaToLinear to them.)

New shader code functions have been added: gammaToLinear, linearToGamma, gammaCorrectColor, and unGammaCorrectColor. When gamma-correct rendering is enabled, the LOVE_GAMMA_CORRECT #define is set and gammaCorrectColor and unGammaCorrectColor are aliases for gammaToLinear and linearToGamma respectively, otherwise the functions do nothing.

The new shader functions have 'precise' and 'fast' variants. If the LOVE_PRECISE_GAMMA define is set, then the normal functions default to the precise variants, otherwise they default to the fast variants. Currently the define is set in vertex shaders and not set in pixel shaders.

The default per-vertex color is automatically gamma-corrected by LÖVE when gamma correct rendering is enabled, but any custom named per-vertex attribute specified with the new custom attribute Mesh functionality won't be, unless 'gammaCorrectColor' or similar functions are explicitly used (preferably inside the vertex shader code that has the custom attribute.)
2015-08-09 21:46:21 -03:00
Alex Szpakowski 54f2617849 Removed some redundant internal code. 2015-08-05 01:43:34 -03:00
Alex Szpakowski 2392174eb2 Rounded rectangles with radius values >= the rectangle's width and height are now clamped rather than causing an error. 2015-08-01 13:31:08 -03:00
Alex Szpakowski 66942d5f31 Added the ability to use custom mipmaps in Images, via love.graphics.newImage(filename, {mipmap1, mipmap2, ...}). Resolves issue #1064.
All mipmap levels must be present if custom mipmaps are used (and their sizes must be half the size of the previous mipmap level, rounded down.)

Image:getData now returns all custom mipmaps in an Image.
2015-07-30 20:48:36 -03:00
Alex Szpakowski f5abedaeeb Cleaned up the love.graphics code that deals with love.window to be more consistent with the rest of the codebase. 2015-07-24 21:40:55 -03:00
Alex Szpakowski 354f83c1cb Added support for MSAA on the window on iOS.
Requires updated dependencies to compile on iOS, which can be downloaded at https://dl.dropboxusercontent.com/u/4214717/love-ios-libraries-0.10.zip
2015-07-19 22:39:02 -03:00
Alex Szpakowski 4cd725cee6 Added love.window.close (resolves issue #1059), and renamed love.window.isCreated to love.window.isOpen. 2015-07-18 13:22:55 -03:00
Alex Szpakowski e27400de30 The add and subtract blend modes no longer modify the destination framebuffer's alpha. 2015-07-08 14:21:22 -03:00
Alex Szpakowski d8fd1413d6 Renamed the internal 'Matrix' class to 'Matrix4'. 2015-06-26 19:34:05 -03:00
Alex Szpakowski 88c8e0c071 Added an optional (true by default) boolean argument to love.graphics.setBlendMode to specify whether alpha should be multiplied with rgb when blending.
Removed the 'premultiplied' blend mode, since setBlendMode("alpha", false) accomplishes the same thing now.

The 'multiply' blend mode is unaffected by the new flag, since fixed-function hardware blending can't do the equivalent of setBlendMode("multiply", true).
2015-06-24 16:47:10 -03:00
Alex Szpakowski ed3f419747 Prevent redundant calls to glEnable/DisableVertexAttribArray. This should hopefully fix a performance regression compared to 0.9.2 as well. 2015-06-23 20:55:23 -03:00
Alex Szpakowski c82ccbb89b love.graphics.setColor no longer uses the main per-vertex color attribute. This lets it affect the color of ParticleSystems, and SpriteBatches and Meshes even when they use custom per-vertex colors. 2015-06-21 11:20:26 -03:00
Alex Szpakowski 2dc8a8ea45 Cleaned up some index buffer code. 2015-06-16 21:27:19 -03:00
Alex Szpakowski 0f986b10aa Cleaned up some code, the 'ry' parameter of love.graphics.rectangle now defaults to the value of 'rx' rather than defaulting to 0. 2015-05-27 17:36:27 -03:00
muddmaker 0119e47f87 Make roudned rectangle a variant of rectangle 2015-05-23 17:05:03 -07:00
muddmaker cb3ae86726 Add rx and ry parameters to roudnedRectangle 2015-05-23 16:52:27 -07:00