Commit Graph

232 Commits

Author SHA1 Message Date
Hajime Hoshi
176e984a58 internal/ui: refactoring: remove dependency on the package mtl 2022-02-11 23:11:49 +09:00
Hajime Hoshi
6f3c6d6c1b internal/graphicsdriver/meta: rename function 2022-02-11 22:47:13 +09:00
Hajime Hoshi
cc4e2f08be internal/graphicsdriver/metal: rename files 2022-02-11 21:49:05 +09:00
Hajime Hoshi
df60c4c92d internal/driver: rename to internal/graphicsdriver 2022-02-06 20:41:32 +09:00
Hajime Hoshi
d0a6ce6567 internal/graphicsdriver/metal: disable presentsWithTransaction in the fullscreen mode
Updates #1745
Closes #1974
2022-01-26 03:55:14 +09:00
Hajime Hoshi
1b498a03cc Revert "internal/graphicsdriver/metal: Bug fix: Vsync didn't work on macOS"
This reverts commit 1dd13ae06e.

Reason: This caused FPS drop on macOS 12.0.1

Updates #1885
Closes #1939
2022-01-09 01:02:53 +09:00
Hajime Hoshi
3b0ce21a56 Revert "internal/graphicsdriver: bug fix: render semi-transparent vectors correctly"
This reverts commit 202f642395.

Reason: TestImageEvenOdd failed

Updates #1933
2022-01-06 03:19:46 +09:00
Hajime Hoshi
202f642395 internal/graphicsdriver: bug fix: render semi-transparent vectors correctly
Closes #1933
2022-01-06 03:00:25 +09:00
Hajime Hoshi
1dd13ae06e internal/graphicsdriver/metal: Bug fix: Vsync didn't work on macOS
This fix works only for Metal. There is not a good solution for
OpenGL so far unfortunately.

Closes #1885
2021-11-27 02:52:48 +09:00
Hajime Hoshi
06f4142ca0 internal/driver: Optimization: Replace interface{} with driver.Uniform
Converting a value from/to interface{} can create a value in heap
and this is not efficient.
2021-10-30 02:58:28 +09:00
Hajime Hoshi
7be00d79e8 internal/uidriver/glfw: Fix unstable FPS on fullscreen on macOS
FPS was unstable on fullscreen mode i.e., when the view size is the
same as the monitor size.

By using a little different size view, FPS becomes stable.

Updates #1745
2021-09-18 19:22:09 +09:00
Hajime Hoshi
11b9a4b161 internal/graphicsdriver/metal: Refactoring 2021-09-18 17:24:03 +09:00
Hajime Hoshi
65943d4bad internal/graphicsdriver/metal: Disable presentsWithTransaction on iOS
Closes #1799
2021-09-07 00:02:58 +09:00
Hajime Hoshi
58ea710a84 internal/affine: Rename UnsafeElements -> Elements as this is no longer unsafe 2021-09-04 18:08:27 +09:00
Hajime Hoshi
df710a5c63 internal/affine: Change UnsafeElements to take arguments
This will enable to suppress unnecessary array allocations in the
future.

Updates #1796
2021-09-04 17:38:30 +09:00
Hajime Hoshi
35deb53624 internal/graphicsdriver/metal: Rename files to remove +build comments 2021-08-23 02:06:09 +09:00
Hajime Hoshi
15ac69b8d5 internal/graphicsdriver/metal: Bug fix: Disable presentsWithTransaction on fullscreen
Closes #1745
2021-08-08 17:40:37 +09:00
Hajime Hoshi
ec26b1a43b internal/graphicsdriver/metal: Refactoring: Remove vsyncInited 2021-08-08 15:30:13 +09:00
Hajime Hoshi
cc1accc32a internal/uidriver/glfw: Bug fix: Disable vsync when resizing the window
Closes #1740
2021-08-06 03:08:04 +09:00
Hajime Hoshi
e4329d0349 internal/driver: Refactoring: Reduce dependencies on affine 2021-07-27 12:19:50 +09:00
Hajime Hoshi
21aa96f9f5 internal/affine: Refactoring: Make ColorM interface 2021-07-27 12:10:22 +09:00
Hajime Hoshi
7e5b259dd2 internal/affine: Use a pointer of an array for UnsafeElements 2021-07-26 21:19:53 +09:00
Hajime Hoshi
b0106e95b9 internal/restorable: Bug fix: Test failed on macOS (Metal) 2021-07-09 20:21:04 +09:00
Hajime Hoshi
4573883b03 internal/graphicsdriver/metal: Make FPS stable by 'presentsWithTransaction'
Closes #1196
2021-07-08 18:11:19 +09:00
Hajime Hoshi
ae0e30196b internal/graphicsdriver/metal: Bug fix: The store action must always be 'store'
Closes #1700
2021-07-08 17:39:37 +09:00
Hajime Hoshi
337d8d5113 internal/graphicsdriver/metal: Separate GCing the buffers
Updates #1196
2021-07-08 02:10:26 +09:00
Hajime Hoshi
edc2f8b961 internal/graphicsdriver/metal: Delay to get a texture for nextDrawable
See https://developer.apple.com/documentation/quartzcore/cametallayer

> To avoid stalls in your app, request a new drawable only when you
> need it, and release any references to it as quickly as possible
> after you’re done with it.

Updates #1196
2021-07-08 01:56:14 +09:00
Hajime Hoshi
b314b6b9b6 Revert "internal/graphicsdriver/metal: Do not retain MTLCommandBuffer for MTLBuffer"
This reverts commit e0fbfc2bb0.

Reason: Rendering issue

Closes #1699
2021-07-08 00:27:33 +09:00
Hajime Hoshi
6213c17abc internal/driver: Add Graphics.Initialize 2021-07-07 13:58:42 +09:00
Hajime Hoshi
e0fbfc2bb0 internal/graphicsdriver/metal: Do not retain MTLCommandBuffer for MTLBuffer
Before this change, a command buffer is retained indirectly by
a buffer, and this might extend the life of drawable unexpectedly.

This change stops using command buffers as a key of the buffers pool,
and use a counter increated by nextDrawable calls.

Updates #1196
2021-07-07 02:52:04 +09:00
Hajime Hoshi
80ac0646d5 internal/graphicsdriver/metal: Optimize the screen writing 2021-07-07 02:07:09 +09:00
Hajime Hoshi
38ce325958 internal/graphicsdriver/metal: Skip clearing the screen on Metal 2021-07-07 01:45:51 +09:00
Hajime Hoshi
9cb1ff9cea internal/graphicsdriver/metal: Set framebufferOnly true
Updates #1196
2021-07-07 00:38:55 +09:00
Hajime Hoshi
bd3f16dbba internal/graphicsdriver/metal: Change the order of GCed buffers
As a big buffer is likely reused, we should remove smaller buffers
first.

Updates #1196
2021-07-06 21:56:27 +09:00
Hajime Hoshi
09bd8b6f4a internal/graphicsdriver/metal: Remove println
Updates #1196
2021-07-06 21:51:57 +09:00
Hajime Hoshi
ee2f891fcc internal/graphicsdriver/metal: Reuse MTLBuffer objects
In Metal, MTLBuffer objects are not 'transient' and are expensive
to create. Reuse them whenever possible.

See also: https://developer.apple.com/library/archive/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Cmd-Submiss/Cmd-Submiss.html

Updates #1196
2021-07-06 21:48:54 +09:00
Hajime Hoshi
be1a0e90e7 internal/graphicsdriver/metal: Bug fix: TestImageEvenOdd failed
RenderCommandEncoder must be reset whenever the stencil mode is
'prepareStencil' in order to clear the stencil buffer.
2021-07-06 15:11:23 +09:00
Hajime Hoshi
3670b7dd62 internal/graphicsdriver/metal: Reuse DepthStencilState objects
In Metal, *State objects are not 'transient' and are expensive to
create. Reuse them whenever possible.

See also: https://developer.apple.com/library/archive/documentation/Miscellaneous/Conceptual/MetalProgrammingGuide/Cmd-Submiss/Cmd-Submiss.html
2021-07-06 15:10:05 +09:00
Hajime Hoshi
ab26312108 internal/graphicsdriver/metal: Release objects appropriately 2021-07-06 14:20:19 +09:00
Hajime Hoshi
17d8cb5311 internal/graphicsdriver/metal: Bug fix: Crashed with METAL_DEVICE_WRAPPER_TYPE=1
Closes #1697
2021-07-06 14:06:06 +09:00
Hajime Hoshi
63a00f6171 internal/graphicsdriver/metal/mtl: Bug fix: Test failure
Closes #1696
2021-07-05 21:28:25 +09:00
Hajime Hoshi
674802d2f5 ebiten: Bug fix: Draw commands with EvenOdd should not be merged
Updates #1684
2021-07-05 18:08:55 +09:00
Hajime Hoshi
daa883d799 ebiten: Bug fix: Stencil buffers should not be cleared until all the vertices are rendered
Updates #1684
2021-07-05 17:41:06 +09:00
Hajime Hoshi
b466a0cbd7 ebiten: Add EvenOdd to DrawTrianglesOptions and DrawShaderTrianglesOptions
Updates #844
Closes #1684
2021-07-05 03:35:55 +09:00
Hajime Hoshi
b8bf277825 internal/graphicsdriver/metal/mtl: Add APIs for stencil buffers
Updates #1684
2021-07-05 00:11:25 +09:00
Hajime Hoshi
19f034e818 internal/graphicsdriver/metal: Refactoring 2021-07-04 20:35:56 +09:00
Hajime Hoshi
3ec02f767b internal/graphicsdriver/metal: Refactoring 2021-07-04 18:37:14 +09:00
Hajime Hoshi
7f86761dde internal/graphicsdriver/metal: Reuse RenderCommandEncoder when possible 2021-07-04 18:13:18 +09:00
Hajime Hoshi
7668052a6b internal/graphicsdriver/metal: Update the view only when necessary 2021-07-04 17:24:39 +09:00
Hajime Hoshi
6b95dd0d4d internal/graphicsdriver/metal: Refactoring: Unify two drawTriangles* functions 2021-07-02 00:25:43 +09:00
Hajime Hoshi
e9b6237f61 internal/driver: Refactoring: Merge two Draw* functions 2021-07-01 15:55:48 +09:00
Hajime Hoshi
b9d52c0267 internal/driver: Change InvalidImageID/InvalidShaderID to 0 2021-07-01 14:58:55 +09:00
Hajime Hoshi
73bf1f36e5 internal/driver: Define InvalidImageID / InvalidShaderID 2021-07-01 13:56:42 +09:00
Hajime Hoshi
b54ad73a2b Add go:build comments with go1.17beta1 fmt 2021-06-11 01:11:46 +09:00
Hajime Hoshi
77b198211c internal/graphicsdriver/metal: Add a comment 2021-02-27 04:04:25 +09:00
Hajime Hoshi
53352cf2b3 internal/graphicsdriver/metal: Use the smallest temporary texture
Updates #1517
2021-02-27 03:45:19 +09:00
Hajime Hoshi
673627c4d4 internal/graphicsdriver/metal: Optimization 2021-02-27 02:30:20 +09:00
Hajime Hoshi
6b3c51921c internal/driver: Remove Image.Sync
Syncing is no longer needed for Metal, and additionally, OpenGL's sync
implementation was mock.

Updates #1508
2021-02-26 23:16:28 +09:00
Hajime Hoshi
718273c2d7 ebiten: Add a new shader function imageDstRegionOnTexture
Updates #1428
2020-12-09 11:36:29 +09:00
Hajime Hoshi
ddfb8adbc4 graphicsdriver/metal: Asynchronous sending pixels
Fixes #1418
2020-11-10 22:48:03 +09:00
Hajime Hoshi
5705dc79fb graphicsdriver/metal: Do not need to wait until flushing at Sync 2020-11-10 22:12:26 +09:00
Hajime Hoshi
e09f3aa286 graphicsdriver/metal/mtl: Bug fix: Fix the guard range 2020-11-08 04:44:43 +09:00
Hajime Hoshi
aaff18ecf7 graphicsdriver/metal/mtl: Bug fix: Guard the handler map by a mutex
The handler is invoked in another thread than the main thread.
2020-11-08 04:40:13 +09:00
Hajime Hoshi
ed028110cf ebiten: Allow rendering on a sub-image by scissor test
Fixes #1255
2020-11-08 00:58:44 +09:00
Hajime Hoshi
e4e8e7254e graphicsdriver/metal/mtl: Refactoring: Specify struct member names explicitly 2020-11-07 23:46:07 +09:00
Hajime Hoshi
a8f96ee9af graphicsdriver/metal: Add Sync to sync CPU and GPU asynchronously
Fixes #1414
2020-11-07 04:09:47 +09:00
Hajime Hoshi
6e3cbe2e33 graphicsdriver/metal/mtl: Refactoring 2020-11-07 03:26:35 +09:00
Hajime Hoshi
8da5ad2c4f graphicsdriver/metal: Misspelling 2020-11-03 23:44:40 +09:00
Hajime Hoshi
fe6a2daef4 graphicsdriver/metal: Bug fix: Had to set the vsync state again at resetting
Fixes #1364
2020-10-14 01:58:56 +09:00
Hajime Hoshi
249e1c46ba graphicsdriver/metal: Remove an old comment
Updates #1367
2020-10-14 01:51:18 +09:00
Hajime Hoshi
eed619ad0f graphicsdriver/metal, graphicsdriver/opengl: Reland: Remove the thread usages for performance
Instead, graphicscommand package has a thread.

Updates #1367
2020-10-13 02:46:31 +09:00
Hajime Hoshi
713eee1117 Revert "graphicsdriver/metal, graphicsdriver/opengl: Remove the thread usages for performance"
This reverts commit 2942f10d9d.

Reason: Compile error on mobiles and runtime error on browsers
2020-10-13 02:12:02 +09:00
Hajime Hoshi
2942f10d9d graphicsdriver/metal, graphicsdriver/opengl: Remove the thread usages for performance
Instead, graphicscommand package has a thread.

Updates #1367
2020-10-13 01:50:54 +09:00
Hajime Hoshi
e90b5ff277 Update import paths in the documents 2020-10-04 05:07:08 +09:00
Hajime Hoshi
bf515bb594 Update version to v2.0.0-alpha 2020-10-04 04:30:40 +09:00
Hajime Hoshi
52fcab7a90 graphicsdriver/metal: Fix comments 2020-09-06 16:51:44 +09:00
Hajime Hoshi
e565433fb0 graphicsdriver/metal: Bug fix: Synchronizing textures on iOS was necessary
Fixes #1337
2020-09-06 16:19:50 +09:00
Hajime Hoshi
a3b41515a9 ui: Replace the native window's type (unsafe.Pointer) with uintptr
Updates #1306
2020-09-04 00:51:48 +09:00
Hajime Hoshi
609a3c4e22 ebiten: Bug fix: Fix the texel calculation
In shaders, texCoord is always in texture0's texels. Convert them
at imageNTextureAt functions correctly.

Fixes #1290
2020-08-11 04:15:07 +09:00
Hajime Hoshi
69f87d5fd1 ebiten: Add new shader builtin functions: image[N]TextureBoundAt
Fixes #1287
2020-08-11 03:24:54 +09:00
Hajime Hoshi
4d1947f711 grpahicsdriver/metal: Better error message 2020-08-09 04:06:30 +09:00
Hajime Hoshi
a45e241da1 shaderir/metal: Implement the shader IR compiler for Metal
Fixes #1165
2020-08-08 19:14:57 +09:00
Hajime Hoshi
2b89710600 graphicsdriver/metal: Refactoring 2020-08-08 18:05:58 +09:00
Hajime Hoshi
6dc74d308b graphicsdriver/metal: Rename viewportSize to internalSize and use it more 2020-08-08 16:07:14 +09:00
Hajime Hoshi
fe1cea533a graphicsdriver/metal: Add a generalized 'draw' function
This is a preparation for rendering shaders.

Updates #1165
2020-08-08 03:12:44 +09:00
Hajime Hoshi
eb056690aa graphicsdriver/metal: Update the minimum macOS version to 10.12 for Go 1.15 2020-07-25 04:18:26 +09:00
Hajime Hoshi
36e9803cea shader: Enable to get pixels from multiple images
Updates #1193
2020-07-19 02:33:43 +09:00
Hajime Hoshi
6ccb614b08 graphicsdriver/metal: Implement CompositeModeMultiply
Updates #410
2020-07-18 21:51:57 +09:00
Hajime Hoshi
e0d5763a60 shader: Use the fixed number of images for shaders
This changes uses arrays rather than slices in order to avoid heap
allocations.

Updates #1193
2020-07-18 18:27:47 +09:00
Hajime Hoshi
7f70797a6d ebiten: Rename DrawTriaglesWithShaderOptions.Textures to Images 2020-07-15 03:49:05 +09:00
Hajime Hoshi
d217bc6033 ebiten: Sparate textures from uniforms at DrawTrianglesWithShader
Updates #1193
Updates #1239
2020-07-09 01:59:21 +09:00
Hajime Hoshi
b83f0acc4d Remove source-region information from vertices
Fixes #1210
2020-07-02 23:38:39 +09:00
Hajime Hoshi
71c9e7ac40 driver: Add Region and sourceRegion parameter at Draw
This is a preparation to remove source-region information from
vertices.

Updates #1210
2020-07-02 03:26:05 +09:00
Hajime Hoshi
ebd0e11c0d graphicsdriver/metal: Avoid synching texture data at ReplacePixels
Instead, use a temporary texture, transfer texture data to it, and
copy the data on GPU side.
2020-06-28 19:40:37 +09:00
Hajime Hoshi
00e8b701c1 graphicsdriver/metal: Optimization 2020-06-27 04:14:21 +09:00
Hajime Hoshi
2bc1475a15 graphicsdriver/metal: Bug fix: Sync textures before replacing a region
Updates #1213
2020-06-27 03:08:17 +09:00
Hajime Hoshi
5a176d6f4f graphicsdriver/metal: Bug fix: synchronizing must be skipped on iOS 2020-06-27 01:45:14 +09:00
Hajime Hoshi
9f76b96c1f graphicsdriver/metal: Specify the texture type explicitly 2020-06-26 23:46:12 +09:00
Hajime Hoshi
2a63512c6e driver: Add AddressUnsafe
This skips the source-region check and reduces 'if' branches from
shader programs.

AddressUnsafe is internal only so far. We might expose this value
later.

Updates #1210
2020-06-25 01:00:38 +09:00
Hajime Hoshi
20b5be0886 graphicsdriver: Bug fix: Tie-breaking when picking a texel
When a texel is picked on texel-borders of a texture, the behavior
(tie-breaking) depends on GPU and unexpected. This change fixes this
issue by shifting 1/512 [texel] when picking a texel up.

Updates #1212
2020-06-24 20:51:16 +09:00