Commit Graph

964 Commits

Author SHA1 Message Date
Alex Szpakowski 0b566f3c94 Updated the changelog. 2015-08-10 09:47:40 -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 68bb0c97bc Hopefully fixed compilation when VS2013 is used... 2015-08-05 01:51:08 -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
Bart van Strien c02ba91ef4 Fix segfault loading images from compressed data without an explicit sRGB flag 2015-08-01 14:22:36 +02: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 faa6b43441 Hopefully fixed a font initialization failure when OpenGL ES 3 is used. 2015-07-03 13:01:22 -03:00
Alex Szpakowski ded2dc39ee Fixed Font:getWidth and Font:getWrap to use kerning information. 2015-07-03 10:54:24 -03:00
Alex Szpakowski bf432aff7c Added basic kerning support for TrueType and BMFont fonts (resolves issue #1055.) 2015-07-02 21:07:34 -03:00
Alex Szpakowski af06203a4a Moved the appveyor script to a subfolder and updated it to properly choose Visual Studio 2012 and to create a post-build zip file. 2015-06-28 21:39:56 -03:00
Alex Szpakowski ee90d09937 Fixed smooth lines drawn with the 'none' line join mode. 2015-06-27 17:51:57 -03:00
Alex Szpakowski 6da759047e The index values returned by SpriteBatch:add and used by SpriteBatch:set are now 1-based rather than 0-based. 2015-06-26 23:10:14 -03:00
Alex Szpakowski 1e8786879b Re-added the built-in NormalMatrix uniform 3x3 matrix variable to shaders. 2015-06-26 21:51:22 -03:00
Alex Szpakowski d8fd1413d6 Renamed the internal 'Matrix' class to 'Matrix4'. 2015-06-26 19:34:05 -03:00
Alex Szpakowski 247daa85b5 Added a couple comments documenting why some codepaths have been chosen. 2015-06-24 22:25:55 -03:00
Alex Szpakowski 4c571e8fd7 Prevent redundant shader uniform uploads for built-in uniforms when OpenGL ES 2 is used.
As a result, the graphics primitive drawing functions (e.g. love.graphics.rectangle) are now more efficient on mobile devices.
2015-06-24 22:04:19 -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 bf1b409da1 Smooth lines now draw the entire line in 1 OpenGL draw call, rather than 2. 2015-06-21 20:28:26 -03:00
Alex Szpakowski 0583ebe470 All vertex component arguments to Mesh:setVertex and Mesh:setVertexAttribute are now optional rather than required. Float vertex components default to 0, and byte components default to 255. 2015-06-21 11:47:56 -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 42ae9c9585 Moved the love.graphics Lua code into the graphics module folder. 2015-06-18 14:27:45 -03:00
Alex Szpakowski 2dc8a8ea45 Cleaned up some index buffer code. 2015-06-16 21:27:19 -03:00
Bart van Strien 3cb777e2b7 Add basic lua 5.3 support 2015-06-16 10:25:41 +02:00
Alex Szpakowski 8c1bc543b9 Fixed love.graphics.rectangle erroring when the width or height is 0. 2015-06-07 17:45:43 -03:00
Alex Szpakowski 7e42d82308 Added an optional third argument to the width/height variant of love.image.newImageData. The new argument is a string containing raw byte pixel data to copy to the new ImageData (e.g. the result of a previous ImageData:getString with an ImageData of the same width and height..) 2015-05-27 21:21:47 -03:00
Alex Szpakowski f334a24f79 Potentially better calculation for the default number of points in the rounded-rect variant of love.graphics.rectangle. 2015-05-27 18:30:17 -03:00
Alex Szpakowski 4fe8e7214d Error if the rx and ry parameters of love.graphics.rectangle are >= half the rectangle's width or height, respectively. 2015-05-27 17:47:51 -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 2a4524e5c0 Make ry optional, and ellipse can replace circle. 2015-05-23 17:28:58 -07: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
muddmaker dd41ccfbf7 Fix another typo. 2015-05-23 16:20:19 -07:00
muddmaker 439cc65382 Fix typo 2015-05-23 16:06:36 -07:00
muddmaker fbc419fda6 Add eclipse and roundedRectangle to love.graphics 2015-05-23 12:52:27 -07:00
Alex Szpakowski c3fd7a25a3 Fixed some misc. compiler warnings. 2015-05-23 12:45:58 -03:00
Alex Szpakowski 30b083bd23 Fixed the new love.graphics.newMesh variant that accepts a Data object. 2015-05-15 14:45:11 -03:00
Alex Szpakowski 3704595189 Enabled OpenGL ES 3 support for Windows/Linux/Android when SDL 2.0.4+ is used, since that SDL version fixed its EGL code for GLES 3+. 2015-05-11 21:14:10 -03:00
Alex Szpakowski a35ccb4426 Added Font:setFallbacks(otherfont, ...). Resolves issue #1041.
Note that general font metrics are largely still based on the original (non-fallback) font, whereas glyph sizes are based on the fallback fonts when those are used to get the glyph.
2015-05-02 18:07:35 -03:00
Alex Szpakowski 4e1011a52e Re-added Mesh:setVertices. 2015-05-02 14:05:29 -03:00
Alex Szpakowski 90a3c2b8ba Added Text:setFont. 2015-04-27 04:19:03 -03:00
Alex Szpakowski 33e1d2736d Removed restrictions preventing sRGB and non-sRGB canvases from being used together when doing multi-canvas rendering. 2015-04-25 21:32:10 -03:00
Alex Szpakowski 5c49898cdf Fixed lines drawn using the 'none' line join mode having missing sections of each line segment. 2015-04-25 18:56:47 -03:00
Alex Szpakowski c62b005ff3 Changed the default mipmap filter to be 'linear' instead of 'nearest'. 2015-04-13 12:51:48 -03:00
Alex Szpakowski d8a68d6ce1 Updated iOS-specific graphics code to use the latest SDL changes. 2015-04-13 12:26:54 -03:00