Merge branch 'vulkan2' of https://github.com/coelckers/gzdoom into vulkan2

This commit is contained in:
Magnus Norddahl 2019-03-17 20:36:23 +01:00
commit c2df818012

View file

@ -52,10 +52,7 @@
#include "version.h" #include "version.h"
#include "doomerrors.h" #include "doomerrors.h"
#include "gl/renderer/gl_renderer.h"
#include "gl/system/gl_framebuffer.h" #include "gl/system/gl_framebuffer.h"
#include "gl/textures/gl_samplers.h"
#include "vulkan/system/vk_framebuffer.h" #include "vulkan/system/vk_framebuffer.h"
@ -182,6 +179,12 @@ namespace
@implementation OpenGLCocoaView @implementation OpenGLCocoaView
- (void)drawRect:(NSRect)dirtyRect
{
[NSColor.blackColor setFill];
NSRectFill(dirtyRect);
}
- (void)resetCursorRects - (void)resetCursorRects
{ {
[super resetCursorRects]; [super resetCursorRects];
@ -234,11 +237,6 @@ namespace
m_cursor = cursor; m_cursor = cursor;
} }
-(BOOL) wantsUpdateLayer
{
return YES;
}
+(Class) layerClass +(Class) layerClass
{ {
return NSClassFromString(@"CAMetalLayer"); return NSClassFromString(@"CAMetalLayer");
@ -327,9 +325,6 @@ void SetupOpenGLView(CocoaWindow* window)
[[glView openGLContext] makeCurrentContext]; [[glView openGLContext] makeCurrentContext];
[window setContentView:glView]; [window setContentView:glView];
// To be able to use OpenGL functions in SetMode()
ogl_LoadFunctions();
} }
} // unnamed namespace } // unnamed namespace
@ -365,14 +360,10 @@ public:
const NSRect contentRect = [ms_window contentRectForFrameRect:[ms_window frame]]; const NSRect contentRect = [ms_window contentRectForFrameRect:[ms_window frame]];
NSView* vulkanView = [[VulkanCocoaView alloc] initWithFrame:contentRect]; NSView* vulkanView = [[VulkanCocoaView alloc] initWithFrame:contentRect];
[vulkanView setWantsLayer:YES]; vulkanView.wantsLayer = YES;
vulkanView.layer.backgroundColor = NSColor.blackColor.CGColor;
[ms_window setContentView:vulkanView]; [ms_window setContentView:vulkanView];
}
else
{
SetupOpenGLView(ms_window);
}
try try
{ {
@ -385,6 +376,11 @@ public:
SetupOpenGLView(ms_window); SetupOpenGLView(ms_window);
} }
}
else
{
SetupOpenGLView(ms_window);
}
if (fb == nullptr) if (fb == nullptr)
{ {
@ -395,6 +391,16 @@ public:
fb->SetMode(fullscreen, vid_hidpi); fb->SetMode(fullscreen, vid_hidpi);
fb->SetSize(fb->GetClientWidth(), fb->GetClientHeight()); fb->SetSize(fb->GetClientWidth(), fb->GetClientHeight());
// This lame hack is a temporary workaround for strange performance issues
// with fullscreen window and Core Animation's Metal layer
// It is somehow related to initial window level and flags
// Toggling fullscreen -> window -> fullscreen mysteriously solves the problem
if (ms_isVulkanEnabled && fullscreen)
{
fb->SetMode(false, vid_hidpi);
fb->SetMode(true, vid_hidpi);
}
return fb; return fb;
} }
@ -658,14 +664,6 @@ void SystemGLFrameBuffer::SetMode(const bool fullscreen, const bool hiDPI)
SetWindowedMode(); SetWindowedMode();
} }
const NSSize viewSize = I_GetContentViewSize(m_window);
glViewport(0, 0, static_cast<GLsizei>(viewSize.width), static_cast<GLsizei>(viewSize.height));
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
[[NSOpenGLContext currentContext] flushBuffer];
[m_window updateTitle]; [m_window updateTitle];
if (![m_window isKeyWindow]) if (![m_window isKeyWindow])