mirror of
https://github.com/hajimehoshi/ebiten.git
synced 2025-01-11 19:48:54 +01:00
internal/graphicsdriver/metal: Refactoring: Remove vsyncInited
This commit is contained in:
parent
d37c106cf4
commit
ec26b1a43b
@ -154,6 +154,17 @@ func (ml MetalLayer) PresentsWithTransaction() bool {
|
|||||||
return C.MetalLayer_PresentsWithTransaction(ml.metalLayer) != 0
|
return C.MetalLayer_PresentsWithTransaction(ml.metalLayer) != 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetPresentsWithTransaction sets a Boolean value that determines whether the layer presents its content using a Core Animation transaction.
|
||||||
|
//
|
||||||
|
// Reference: https://developer.apple.com/documentation/quartzcore/cametallayer/1478157-presentswithtransaction
|
||||||
|
func (ml MetalLayer) SetPresentsWithTransaction(presentsWithTransaction bool) {
|
||||||
|
if presentsWithTransaction {
|
||||||
|
C.MetalLayer_SetPresentsWithTransaction(ml.metalLayer, 1)
|
||||||
|
} else {
|
||||||
|
C.MetalLayer_SetPresentsWithTransaction(ml.metalLayer, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// SetFramebufferOnly sets a Boolean value that determines whether the layer’s textures are used only for rendering.
|
// SetFramebufferOnly sets a Boolean value that determines whether the layer’s textures are used only for rendering.
|
||||||
//
|
//
|
||||||
// https://developer.apple.com/documentation/quartzcore/cametallayer/1478168-framebufferonly
|
// https://developer.apple.com/documentation/quartzcore/cametallayer/1478168-framebufferonly
|
||||||
|
@ -29,6 +29,8 @@ const char *MetalLayer_SetMaximumDrawableCount(void *metalLayer,
|
|||||||
void MetalLayer_SetDisplaySyncEnabled(void *metalLayer,
|
void MetalLayer_SetDisplaySyncEnabled(void *metalLayer,
|
||||||
uint8_t displaySyncEnabled);
|
uint8_t displaySyncEnabled);
|
||||||
void MetalLayer_SetDrawableSize(void *metalLayer, double width, double height);
|
void MetalLayer_SetDrawableSize(void *metalLayer, double width, double height);
|
||||||
|
void MetalLayer_SetPresentsWithTransaction(void *metalLayer,
|
||||||
|
uint8_t presentsWithTransaction);
|
||||||
void *MetalLayer_NextDrawable(void *metalLayer);
|
void *MetalLayer_NextDrawable(void *metalLayer);
|
||||||
void MetalLayer_SetFramebufferOnly(void *metalLayer, uint8_t framebufferOnly);
|
void MetalLayer_SetFramebufferOnly(void *metalLayer, uint8_t framebufferOnly);
|
||||||
uint8_t MetalLayer_PresentsWithTransaction(void *metalLayer);
|
uint8_t MetalLayer_PresentsWithTransaction(void *metalLayer);
|
||||||
|
@ -85,20 +85,18 @@ void MetalLayer_SetDisplaySyncEnabled(void *metalLayer,
|
|||||||
[((CAMetalLayer *)metalLayer) setDisplaySyncEnabled:displaySyncEnabled];
|
[((CAMetalLayer *)metalLayer) setDisplaySyncEnabled:displaySyncEnabled];
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// setting presentsWithTransaction YES makes the FPS stable (#1196). We're not
|
|
||||||
// sure why...
|
|
||||||
if (displaySyncEnabled) {
|
|
||||||
[((CAMetalLayer *)metalLayer) setPresentsWithTransaction:YES];
|
|
||||||
} else {
|
|
||||||
[((CAMetalLayer *)metalLayer) setPresentsWithTransaction:NO];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MetalLayer_SetDrawableSize(void *metalLayer, double width, double height) {
|
void MetalLayer_SetDrawableSize(void *metalLayer, double width, double height) {
|
||||||
((CAMetalLayer *)metalLayer).drawableSize = (CGSize){width, height};
|
((CAMetalLayer *)metalLayer).drawableSize = (CGSize){width, height};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MetalLayer_SetPresentsWithTransaction(void *metalLayer,
|
||||||
|
uint8_t presentsWithTransaction) {
|
||||||
|
[((CAMetalLayer *)metalLayer)
|
||||||
|
setPresentsWithTransaction:presentsWithTransaction];
|
||||||
|
}
|
||||||
|
|
||||||
void *MetalLayer_NextDrawable(void *metalLayer) {
|
void *MetalLayer_NextDrawable(void *metalLayer) {
|
||||||
return [(CAMetalLayer *)metalLayer nextDrawable];
|
return [(CAMetalLayer *)metalLayer nextDrawable];
|
||||||
}
|
}
|
||||||
|
@ -29,8 +29,7 @@ type view struct {
|
|||||||
uiview uintptr
|
uiview uintptr
|
||||||
|
|
||||||
windowChanged bool
|
windowChanged bool
|
||||||
vsync bool
|
vsyncDisabled bool
|
||||||
vsyncInited bool
|
|
||||||
|
|
||||||
device mtl.Device
|
device mtl.Device
|
||||||
ml ca.MetalLayer
|
ml ca.MetalLayer
|
||||||
@ -47,12 +46,19 @@ func (v *view) getMTLDevice() mtl.Device {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (v *view) setDisplaySyncEnabled(enabled bool) {
|
func (v *view) setDisplaySyncEnabled(enabled bool) {
|
||||||
if v.vsync == enabled && !v.vsyncInited {
|
if !v.vsyncDisabled == enabled {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
v.forceSetDisplaySyncEnabled(enabled)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (v *view) forceSetDisplaySyncEnabled(enabled bool) {
|
||||||
v.ml.SetDisplaySyncEnabled(enabled)
|
v.ml.SetDisplaySyncEnabled(enabled)
|
||||||
v.vsync = enabled
|
|
||||||
v.vsyncInited = true
|
// setting presentsWithTransaction true makes the FPS stable (#1196). We're not sure why...
|
||||||
|
v.ml.SetPresentsWithTransaction(enabled)
|
||||||
|
|
||||||
|
v.vsyncDisabled = !enabled
|
||||||
}
|
}
|
||||||
|
|
||||||
func (v *view) colorPixelFormat() mtl.PixelFormat {
|
func (v *view) colorPixelFormat() mtl.PixelFormat {
|
||||||
@ -80,9 +86,7 @@ func (v *view) reset() error {
|
|||||||
v.ml.SetMaximumDrawableCount(2)
|
v.ml.SetMaximumDrawableCount(2)
|
||||||
|
|
||||||
// The vsync state might be reset. Set the state again (#1364).
|
// The vsync state might be reset. Set the state again (#1364).
|
||||||
if v.vsyncInited {
|
v.forceSetDisplaySyncEnabled(!v.vsyncDisabled)
|
||||||
v.ml.SetDisplaySyncEnabled(v.vsync)
|
|
||||||
}
|
|
||||||
v.ml.SetFramebufferOnly(true)
|
v.ml.SetFramebufferOnly(true)
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
Loading…
Reference in New Issue
Block a user