Commit Graph

1378 Commits

Author SHA1 Message Date
Alex Szpakowski c36a53fdcb Add new non-readable Canvas formats: depth16, depth24, depth32f, depth24stencil8, and depth32fstencil8.
--HG--
branch : minor
2017-04-11 18:34:04 -03:00
Alex Szpakowski 018a3831cb Add a new “stencil8” pixel format for Canvases (resolves issue #1003).
Also fixed Canvas MSAA (resolves issue #1271).

stencil-formatted Canvases can’t be drawn, and can only be used as the value for a new ‘depthstencil’ field to the table-argument variant of love.graphics.setCanvas.

--HG--
branch : minor
2017-04-11 00:00:22 -03:00
Alex Szpakowski 1a9262dda9 Fix compilation on iOS. Fix shader compilation on OpenGL ES. Fix (harmless) GL errors on OpenGL ES 2. Resolves issue #1266.
--HG--
branch : minor
2017-03-09 20:46:26 -04:00
Alex Szpakowski ceb9cd1c0b Rename internal “GLSLES” references to “ESSL”.
--HG--
branch : minor
2017-03-07 21:03:23 -04:00
Alex Szpakowski cb9aa857d7 Don’t try to create the standard/default array texture shader if array textures are not supported.
--HG--
branch : minor
2017-03-01 21:19:37 -04:00
Alex Szpakowski 66b299822a Array textures can be easily drawn without a shader (resolves issue #1111).
Added love.graphics.drawLayer(texture, layerindex, …). ‘texture’ must be an array texture.
Added SpriteBatch:add/setLayer.

Added Quad:get/setLayer. This applies to array textures that are drawn without specifying an explicit layer index in the draw call.

Added love.graphics.newQuad variants which have layer arguments.

--HG--
branch : minor
2017-02-26 17:11:22 -04:00
Alex Szpakowski ff8358a979 Removed void effects(…) pixel shader prototype. Added void effect(). Allows calling love.graphics.draw with textures of different types with a custom shader without having an extra sampler2D.
effect() takes no arguments and returns nothing, you are responsible for assigning a value to either love_PixelColor or love_Canvases[n] in the function. You can declare ‘MainTex’, which will be whatever texture is used with any Drawable drawn with love.graphics.draw. You can also declare ‘VaryingColor’ and ‘VaryingTexCoord’, which are passed down from the vertex shader by love automatically. love_PixelCoord is also available.

--HG--
branch : minor
2017-02-25 17:52:27 -04:00
Alex Szpakowski f3f6b10ac8 Clean up glVertexAttribPointer calls a bit.
--HG--
branch : minor
2017-02-25 17:23:00 -04:00
Alex Szpakowski 73fd45558b Implement Array, Cubemap, and Volume texture types (issue #1111).
- Add love.graphics.newArrayImage, newCubeImage, and newVolumeImage.
- Add love.graphics.newCanvas(w, h, layers) and newCanvas(w, h, layers, settings). Add ‘type’ field to the settings table of newCanvas.

- Add new love.graphics.setCanvas variants: setCanvas(canvas, slice), and setCanvas(canvastable) where canvastable is in the format: {{canvas1, layer=2}, {canvas2, face=5}}

- Add Texture:getTextureType, getDepth, getLayerCount, getMipmapCount, and getFormat.

- Remove Image:getData and Image:refresh.
- Add Image:replacePixels(imagedata [, slice] [, mipmap]).

- Update Canvas:newImageData to accept a slice argument.

- Add love.image.newCubeFaces(imagedata).

--HG--
branch : minor
2017-02-20 14:58:13 -04:00
Alex Szpakowski 97789b18c0 Only use opengl debug groups if the LOVE_GRAPHICS_DEBUG environment variable is set to 1.
--HG--
branch : minor
2017-02-12 17:58:28 -04:00
Alex Szpakowski df540cedea Enable OpenGL debug group markers outside of iOS
--HG--
branch : minor
2017-02-12 16:40:54 -04:00
Alex Szpakowski f2597168a2 Fix text object drawing and a bug in stream buffers used in autobatching
--HG--
branch : minor
2017-01-30 22:11:26 -04:00
Alex Szpakowski 98493d9844 Fix rendering to only use glDrawElementsInstanced when necessary
--HG--
branch : minor
2017-01-29 16:13:41 -04:00
Alex Szpakowski 7d7f8e0a92 Mark classes as ‘final’
--HG--
branch : minor
2017-01-29 02:06:17 -04:00
Alex Szpakowski 8558d7894c Move all remaining love.graphics Lua wrapper code out of the opengl implementation folder.
--HG--
branch : minor
2017-01-29 01:19:37 -04:00
Alex Szpakowski c0e66eba83 Move backend-agnostic Mesh and SpriteBatch code out of the opengl implementation folder.
--HG--
branch : minor
2017-01-29 01:05:20 -04:00
Alex Szpakowski 3616470a0a Move love.graphics Image wrapper code out of the opengl subfolder
--HG--
branch : minor
2017-01-29 00:20:16 -04:00
Alex Szpakowski 4a3319245b Fix Windows build
--HG--
branch : minor
2017-01-28 23:19:45 -04:00
Alex Szpakowski 13af754d3d Move most of Text and Video love.graphics classes out of the opengl subfolder.
--HG--
branch : minor
2017-01-28 21:37:09 -04:00
Alex Szpakowski d990044288 love.graphics internal Buffer objects are no longer OpenGL-specific.
--HG--
branch : minor
2017-01-28 19:26:57 -04:00
Alex Szpakowski 470098b7e6 Shader code cleanup
--HG--
branch : minor
2017-01-27 23:19:04 -04:00
Alex Szpakowski c764f9f206 Support instancing on more systems. Note that GLSL 3 may not be supported everywhere that instancing is, and love_InstanceID requires GLSL 3 (but instanced vertex attributes do not).
--HG--
branch : minor
2017-01-22 21:18:06 -04:00
Alex Szpakowski bea7cfdaab Add low-level hardware instancing support to Meshes.
Add “instancing” Graphics Feature constant.

Add love.graphics.drawInstanced(mesh, instancecount, x, y, …) which draws the mesh multiple times in a single draw call. Each instance of the mesh will appear in the exact same spot unless one of the following are used:

- Add an optional vertex attribute step type argument to Mesh:attachAttribute. “pervertex” is the default. “perinstance” causes the attribute to be per-instance instead of per-vertex, when the mesh is drawn.

- Add love_InstanceID as a built-in read only int variable in GLSL 3 vertex shaders. It is always 0 except when a Mesh is drawn with more than 1 instance specified in the draw call. It can be used to manually compute or index into per-instance values in a shader.

--HG--
branch : minor
2017-01-22 20:52:11 -04:00
Alex Szpakowski 731b5d5cf0 Added support for GLSL 3 shaders (GLSL 3.30 and GLSL ES 3.00).
To use GLSL 3 in a shader, the first line of the shader has to be: #pragma language glsl3

glsl1 is the default language.

Added “glsl3” graphics feature as part of the table returned by love.graphics.getSupported().

Added love.graphics.validateShader(boolean gles, shadercode). It returns a boolean along with an error string if the shader code has errors for its target language and platform (gles or desktop).

Implemented support for Core Profile OpenGL 3.3 in love.graphics.

--HG--
branch : minor
2017-01-22 18:54:04 -04:00
Alex Szpakowski a6669a8bb2 Merge default into minor
--HG--
branch : minor
2017-01-21 12:06:35 -04:00
Alex Szpakowski f45c6a0d74 Fix a crash related to love.graphics.push and love.window.setMode. 2017-01-21 12:03:43 -04:00
Alex Szpakowski 44dc4bb2a2 Fix font textures in OpenGL ES 3.
--HG--
branch : minor
2017-01-15 11:15:52 -04:00
Alex Szpakowski 734be1afad Add a variant of Mesh:setVertexMap which takes a Data object, an index data type (“uint16” or “uint32”), and an optional index count. Thanks Shell32!
--HG--
branch : minor
2017-01-14 20:35:56 -04:00
Alex Szpakowski c5b7a07064 Merge default into minor.
--HG--
branch : minor
2017-01-12 22:52:24 -04:00
Alex Szpakowski 22c4d1ae79 Font texture atlases can be created in Core Profile GL3.
--HG--
branch : minor
2017-01-05 23:25:20 -04:00
Alex Szpakowski 8c204efafb Minor pre-emptive fixes for GL3.
--HG--
branch : minor
2017-01-05 22:33:10 -04:00
Alex Szpakowski 656668b8c8 Particle systems use a GLBuffer internally, instead of direct vertex arrays with glDrawElements.
--HG--
branch : minor
2017-01-05 20:27:47 -04:00
Alex Szpakowski e445c50af8 Fix stenciling…
--HG--
branch : minor
2017-01-05 20:22:50 -04:00
Alex Szpakowski 5243fb5a85 Allow disabling stencil capabilities for the main screen in love.window.setMode.
--HG--
branch : minor
2017-01-05 19:40:18 -04:00
Alex Szpakowski 3adc9b45be Fix captureScreenshot when MSAA is used on iOS
--HG--
branch : minor
2017-01-05 14:50:03 +00:00
Alex Szpakowski a653bfa104 Minor batching fixes and performance improvements
--HG--
branch : minor
2017-01-04 22:57:56 -04:00
Alex Szpakowski 551dc423a2 Improved performance slightly when love.graphics.setColor is used heavily with automatic batching.
--HG--
branch : minor
2017-01-03 23:49:29 -04:00
Alex Szpakowski 8899c03651 Add C++ side support for unsigned int shader uniforms. Note that the shader languages love currently supports (glsl 1.20, glsl es 1.00) don’t support uints at the moment.
--HG--
branch : minor
2017-01-02 20:41:07 -04:00
Alex Szpakowski abb72cb813 Happy new year! 🥂
--HG--
branch : minor
2017-01-02 01:28:29 -04:00
Alex Szpakowski bdd51d547f Minor code cleanup
--HG--
branch : minor
2017-01-02 01:21:22 -04:00
Alex Szpakowski 548293e100 Don’t call unnecessary OpenGL APIs in love.graphics.setColor
--HG--
branch : minor
2017-01-02 01:02:15 -04:00
Alex Szpakowski 66749e874f love.graphics Video code is upwards-compatible with GL3.
--HG--
branch : minor
2017-01-01 21:58:13 -04:00
Alex Szpakowski 75fbc210dc Work around crappy Android NDK
--HG--
branch : minor
2017-01-01 13:06:31 -04:00
Alex Szpakowski f12596dd19 More code restructuring.
Move all love.graphics functionality that doesn’t call OpenGL out of the OpenGL backend Graphics class.

--HG--
branch : minor
2016-12-30 18:36:54 -04:00
Alex Szpakowski d94b363b39 Move more love.graphics backend-agnostic module code out of the opengl implementation file.
--HG--
branch : minor
2016-12-30 14:32:11 -04:00
Alex Szpakowski c7419e0e37 Move most graphics Font code out of the opengl subfolder.
--HG--
branch : minor
2016-12-30 14:19:07 -04:00
Alex Szpakowski 1383248876 … typo fix
--HG--
branch : minor
2016-12-29 23:59:42 -04:00
Alex Szpakowski bfd1b86059 Add love.graphics.getPixelDensity, gets the pixel density scale of the screen (matches other APIs).
--HG--
branch : minor
2016-12-29 23:59:25 -04:00
Alex Szpakowski d26002f5cc Revamped and streamlined retina / high-DPI support (resolves issue #1122).
With the highdpi window flag enabled on a retina-capable display and OS, content should now appear to the user at the same size and in the same positions as with the flag disabled.

As a result, mouse and touch coordinates, Texture and graphics dimensions, and the graphics coordinate system now use pixel density-scaled units instead of pixels. Raw pixel units should generally only be used for things such as shader algorithms which execute per-pixel and rely on accurate pixel dimensions. love.window.fromPixels and friends typically don’t need to be used anymore.

Images, Canvases, and Fonts can have an optional explicit ‘pixel density’ set when creating them. This allows for easily loading high pixel density content which displays at the same size as regular or low pixel density content.

API changes:

- Added Texture:getPixelWidth/getPixelHeight/getPixelDimensions and Texture:getPixelDensity. Texture:getWidth/getHeight return the pixel density-scaled width and height (as it will appear on the screen when drawn) rather than the number of pixels on each texture dimension.

- Added love.graphics.getPixelWidth/getPixelHeight/getPixelDimensions.

- Added optional ‘pixeldensity’ field to the settings table parameter of love.graphics.newImage. It defaults to 1, or if the file the Image was loaded from has “@2x”, “@3x”, etc. at the end of its name, it uses that number as the pixel density scale by default.

- love.graphics.newCanvas now takes a table as its third parameter, with fields “format”, “msaa”, and “pixeldensity”. pixeldensity defaults to the main screen’s pixel density. The width and height parameters specify the visual size that the Canvas will be drawn at / can be drawn to (pixel density-scaled units).

- love.graphics.newVideo accepts a table as its second parameter, with optional fields “audio” and “pixeldensity”. pixeldensity defaults to 1.

- love.graphics.newFont variants have an optional pixeldensity parameter at the end of the argument list. For TrueType fonts this defaults to the current pixel density scale of the screen, and for BMFonts and ImageFonts this defaults to 1.

- Added Font:getPixelDensity.

- Renamed love.window.getPixelScale to love.window.getPixelDensity.

--HG--
branch : minor
2016-12-29 23:55:51 -04:00
Alex Szpakowski 8aa6725039 Cleaned up some duplicated pixel format-related code in Font files.
--HG--
branch : minor
2016-12-29 02:45:27 -04:00