Commit Graph

180 Commits

Author SHA1 Message Date
Alex Szpakowski ef61573cd3 Merge default into minor
--HG--
branch : minor
2016-08-29 22:41:24 -03:00
Alex Szpakowski d572c70883 Fix a GL error on OpenGL ES 3 when using multiple render targets. 2016-08-29 18:48:53 -03:00
Alex Szpakowski 57b70e2a7b The format of the ImageData returned by Canvas:newImageData now matches the Canvas' format as best as possible.
--HG--
branch : minor
2016-05-23 13:21:44 -03:00
Alex Szpakowski e71f95595c ImageData (and Images loaded from them) now support different data formats. Resolves issue #1048.
Currently exposed formats are rgba8 and rgba16 (normalized), and rgba16f and rgba32f (floating-point). Some systems, especially mobile ones, won't support every format when creating a love.graphics Image. Use love.graphics.getRawImageFormats to check for support.

love.image.newImageData now takes an optional format parameter as its third argument when creating an empty sized ImageData. It defaults to rgba8.

16-bit PNGs, .hdr images, and floating-point OpenEXR images can now be loaded via love.image.newImageData and love.graphics.newImage.

--HG--
branch : minor
2016-05-22 15:28:20 -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 4ca6106d7a Cleaned up Canvas::checkCreateStencil a bit. 2016-02-24 18:36:34 -04:00
Adam M 62b642f28a Support combined depth/stencil buffers when using vendor extensions. 2016-02-24 19:42:22 +00:00
Alex Szpakowski cf4b409302 Renamed some things. 2016-02-18 22:11:41 -04:00
Alex Szpakowski 46a2e7b85c Happy new year! 🎉 2016-01-01 00:05:06 -04:00
Alex Szpakowski c73fb2ef98 Fixed stenciling inside a Canvas in OpenGL ES 2. 2015-12-13 23:50:23 -04:00
Alex Szpakowski 6036454a20 Fixed up some code. 2015-11-30 02:26:59 -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 db91a73d57 Trigger a Lua error if love.graphics.draw(canvas) is called while that canvas is the active one.
This only catches a subset of the possible accidental read-while-writing situations that can happen when using Canvases, unfortunately.
2015-08-14 22:46:29 -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 d8fd1413d6 Renamed the internal 'Matrix' class to 'Matrix4'. 2015-06-26 19:34:05 -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 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 cf0968fc6d Avoid some VC++ compiler warnings 2015-04-02 00:28:09 -03:00
Alex Szpakowski 2a6bffaa5a Prevent sRGB and non-sRGB Canvas formats from being used together in multi-canvas rendering (MRTs), due to driver bugs. 2015-03-29 23:51:08 -03:00
Alex Szpakowski 06ef263537 Added OpenGL debug groups for most graphics operations when love is built in debug mode for iOS. The Xcode frame capture tool uses them to create nice visual groups for OpenGL function calls. 2015-03-16 22:55:58 -03:00
Alex Szpakowski d00773b974 Updated GLAD for the latest GL and GLES extensions. 2015-03-15 23:45:08 -03:00
Alex Szpakowski 275a9a300f Multi-canvas rendering (love.graphics.setCanvas with multiple canvases) now allows canvases with different formats, if the system supports it. Added 'multicanvasformats' to the table returned by love.graphics.getSupported.
--HG--
branch : minor
2015-03-02 23:43:09 -04:00
Alex Szpakowski 3ced9ca38f Added one- and two-channel Canvas formats: r8, rg8, r16f, rg16f, r32f, and rg32f.
--HG--
branch : minor
2015-03-02 18:06:14 -04:00
Alex Szpakowski 3fea174008 Cleaned up some shader code.
--HG--
branch : minor
2015-03-02 15:18:12 -04:00
Alex Szpakowski 3830a0969c Moved the Texture and Quad Lua wrapper files out of the opengl graphics implementation folder.
--HG--
branch : minor
2015-03-01 03:51:44 -04:00
Alex Szpakowski faa4a33fe9 Use triangle strips rather than triangle fans when possible.
--HG--
branch : minor
2015-02-28 02:32:34 -04:00
Alex Szpakowski 3efcf3901b Removed Canvas:clear. love.graphics.clear now accepts r,g,b,a values (and defaults to 0,0,0,0 with no arguments given.) love.graphics.clear clears the content of the currently active Canvas(es.)
--HG--
branch : minor
2015-02-27 03:47:25 -04:00
Alex Szpakowski f83c2db471 Cleaned up the Canvas code.
--HG--
branch : minor
2015-02-26 17:06:09 -04:00
Alex Szpakowski a66a7b7ce9 Prevent invalid stencil buffer contents from being used when switching to a Canvas on mobile.
--HG--
branch : minor
2015-02-26 01:00:38 -04:00
Alex Szpakowski e8ce59038f Renamed Canvas:getImageData to Canvas:newImageData (see issue #1001.)
--HG--
branch : minor
2015-02-26 00:13:46 -04:00
Alex Szpakowski 8239d472d4 Removed Canvas:getPixel and added optional x/y/width/height arguments to Canvas:getImageData to specify a sub-rectangle (see issue #1001.)
--HG--
branch : minor
2015-02-25 23:27:35 -04:00
Alex Szpakowski 2cc53bb85c Added Canvas MSAA support in OpenGL ES 2 on iOS and when ANGLE is used on Windows.
--HG--
branch : minor
2015-02-24 03:07:46 -04:00
Alex Szpakowski 517ee44e84 Fixed Canvases on iOS, added support for Canvas MSAA on OpenGL ES 3.
--HG--
branch : minor
2015-02-24 02:36:32 -04:00
Alex Szpakowski 1aaa8737ab Merged default into minor
--HG--
branch : minor
2015-02-22 02:38:09 -04:00
Alex Szpakowski 59e1cf23e8 Probably fixed the Windows build 2015-02-22 02:30:26 -04:00
Alex Szpakowski 622b737019 Merged default into minor
--HG--
branch : minor
2015-02-21 03:53:33 -04:00
Alex Szpakowski 813061c0e0 Fix the stencil buffer in Canvases when the graphics driver uses a MSAA value for the Canvas' buffers that's greater than the number of requested MSAA samples.
Fixes https://love2d.org/forums/viewtopic.php?f=4&t=79701
2015-02-21 01:56:17 -04:00
Alex Szpakowski ebc68023a7 Fix many warnings about implicit integer conversions when compiling for 64 bits.
--HG--
branch : minor
2015-02-20 01:20:08 -04:00
Alex Szpakowski 5b98083e01 Merged default into minor
--HG--
branch : minor
2015-01-22 02:18:56 -04:00
Alex Szpakowski e71c15e650 Fixed a minor memory leak caused by certain rare error conditions in love.graphics.newCanvas. 2015-01-22 02:16:49 -04:00
Alex Szpakowski 9de0e49b19 Optimized canvas performance when ANGLE is used.
--HG--
branch : minor
2015-01-22 02:12:26 -04:00
Alex Szpakowski 8067d42df2 Canvases now have OpenGL ES support, updated Texture:setWrap to return false for repeat wrap modes in non-power-of-two textures if OpenGL ES 2 is used and the implementation doesn't have support for repeat on NPOT textures.
--HG--
branch : minor
2015-01-20 15:13:59 -04:00
Alex Szpakowski 1124612c1f Some work towards OpenGL ES 2+ support for love 0.10.
--HG--
branch : minor
2015-01-19 23:32:16 -04:00
Alex Szpakowski a7e4148869 Merged default into minor
--HG--
branch : minor
2015-01-16 15:47:26 -04:00
Alex Szpakowski c7b45b3505 Updated copyright for the new year 2014-12-31 19:32:43 -04:00
Alex Szpakowski d1bdc9a7e2 Images and Canvases are now drawn using GL_TRIANGLE_FAN instead of GL_QUADS, for future compatibility with GLES and core GL3+.
--HG--
branch : minor
2014-09-07 13:19:27 -03:00
Alex Szpakowski 3a51f0ad08 Changed the love.graphics internal code to always use a default shader when none is set externally, and replaced the deprecated OpenGL vertex attribute code with the equivalent generic vertex attribute functions.
This will simplify the code and make it more maintainable when OpenGL ES 2+ support is added, compared to using the deprecated VA functions on desktop GL and the generic VA functions on GLES.

--HG--
branch : minor
2014-08-26 03:24:42 -03:00
Alex Szpakowski 71c71985d3 Merged default into minor
--HG--
branch : minor
2014-08-21 16:53:43 -03:00
Alex Szpakowski 8ffe610659 Added love.graphics.getStats. It returns a table with performance-related graphics statistics. Currently it contains these fields:
drawcalls: The number of internal draw calls made so far in the current frame.

canvasswitches: The number of times the active Canvas has been changed so far in the current frame.

texturememory: The approximate amount of video memory (in bytes) used by OpenGL textures created by Images, Canvases, and Fonts.

images: The number of active Image objects.

canvases: The number of active Canvas objects.

fonts: The number of active Font objects.
2014-08-21 15:01:29 -03:00
Alex Szpakowski 5f6ee50541 Replaced the GLee OpenGL function loader with a modified version of GLAD (resolves issue #728.)
--HG--
branch : minor
2014-08-18 21:35:52 -03:00