mirror of
https://github.com/PabloMK7/citra.git
synced 2025-09-09 04:10:05 +00:00
wayland: Clean up library references
This commit is contained in:
parent
99b9cec967
commit
5f1a26237b
23 changed files with 202 additions and 251 deletions
|
@ -312,10 +312,8 @@ elseif(UNIX)
|
||||||
externals/duckstation/gl/context_egl_x11.cpp
|
externals/duckstation/gl/context_egl_x11.cpp
|
||||||
externals/duckstation/gl/context_glx.cpp
|
externals/duckstation/gl/context_glx.cpp
|
||||||
externals/duckstation/gl/x11_window.cpp
|
externals/duckstation/gl/x11_window.cpp
|
||||||
|
|
||||||
../../externals/glad/src/glad_egl.c
|
|
||||||
../../externals/glad/src/glad_glx.c
|
|
||||||
)
|
)
|
||||||
|
|
||||||
target_link_libraries(citra PRIVATE "${X11_LIBRARIES}" "${EGL_LIBRARIES}")
|
target_link_libraries(citra PRIVATE "${X11_LIBRARIES}" "${EGL_LIBRARIES}")
|
||||||
target_include_directories(citra PRIVATE "${X11_INCLUDE_DIR}")
|
target_include_directories(citra PRIVATE "${X11_INCLUDE_DIR}")
|
||||||
add_compile_definitions(QAPPLICATION_CLASS=QApplication)
|
add_compile_definitions(QAPPLICATION_CLASS=QApplication)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "../log.h"
|
#include "citra_qt/wayland/log.h"
|
||||||
#include "context.h"
|
#include "context.h"
|
||||||
#include "loader.h"
|
#include "loader.h"
|
||||||
Log_SetChannel(GL::Context);
|
Log_SetChannel(GL::Context);
|
||||||
|
|
|
@ -2,8 +2,9 @@
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <memory>
|
#include <memory>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "../duckstation_compat.h"
|
|
||||||
#include "../window_info.h"
|
#include "citra_qt/wayland/duckstation_compat.h"
|
||||||
|
#include "citra_qt/wayland/window_info.h"
|
||||||
|
|
||||||
namespace GL {
|
namespace GL {
|
||||||
using namespace citra;
|
using namespace citra;
|
||||||
|
|
349
src/citra_qt/externals/duckstation/gl/context_agl.mm
vendored
349
src/citra_qt/externals/duckstation/gl/context_agl.mm
vendored
|
@ -1,214 +1,195 @@
|
||||||
#include "context_agl.h"
|
|
||||||
#include "../duckstation_compat.h"
|
|
||||||
#include "../log.h"
|
|
||||||
#include "loader.h"
|
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
|
#include "citra_qt/wayland/duckstation_compat.h"
|
||||||
|
#include "citra_qt/wayland/log.h"
|
||||||
|
#include "context_agl.h"
|
||||||
|
#include "loader.h"
|
||||||
Log_SetChannel(GL::ContextAGL);
|
Log_SetChannel(GL::ContextAGL);
|
||||||
|
|
||||||
namespace GL {
|
namespace GL {
|
||||||
ContextAGL::ContextAGL(const WindowInfo& wi) : Context(wi)
|
ContextAGL::ContextAGL(const WindowInfo& wi) : Context(wi) {
|
||||||
{
|
m_opengl_module_handle =
|
||||||
m_opengl_module_handle = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_NOW);
|
dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_NOW);
|
||||||
if (!m_opengl_module_handle)
|
if (!m_opengl_module_handle)
|
||||||
Log_ErrorPrint("Could not open OpenGL.framework, function lookups will probably fail");
|
Log_ErrorPrint("Could not open OpenGL.framework, function lookups will probably fail");
|
||||||
}
|
}
|
||||||
|
|
||||||
ContextAGL::~ContextAGL()
|
ContextAGL::~ContextAGL() {
|
||||||
{
|
if ([NSOpenGLContext currentContext] == m_context)
|
||||||
if ([NSOpenGLContext currentContext] == m_context)
|
[NSOpenGLContext clearCurrentContext];
|
||||||
[NSOpenGLContext clearCurrentContext];
|
|
||||||
|
|
||||||
if (m_context)
|
if (m_context)
|
||||||
[m_context release];
|
[m_context release];
|
||||||
|
|
||||||
if (m_pixel_format)
|
if (m_pixel_format)
|
||||||
[m_pixel_format release];
|
[m_pixel_format release];
|
||||||
|
|
||||||
if (m_opengl_module_handle)
|
if (m_opengl_module_handle)
|
||||||
dlclose(m_opengl_module_handle);
|
dlclose(m_opengl_module_handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<Context> ContextAGL::Create(const WindowInfo& wi, const Version* versions_to_try,
|
std::unique_ptr<Context> ContextAGL::Create(const WindowInfo& wi, const Version* versions_to_try,
|
||||||
size_t num_versions_to_try)
|
size_t num_versions_to_try) {
|
||||||
{
|
std::unique_ptr<ContextAGL> context = std::make_unique<ContextAGL>(wi);
|
||||||
std::unique_ptr<ContextAGL> context = std::make_unique<ContextAGL>(wi);
|
if (!context->Initialize(versions_to_try, num_versions_to_try))
|
||||||
if (!context->Initialize(versions_to_try, num_versions_to_try))
|
return nullptr;
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
return context;
|
return context;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ContextAGL::Initialize(const Version* versions_to_try, size_t num_versions_to_try)
|
bool ContextAGL::Initialize(const Version* versions_to_try, size_t num_versions_to_try) {
|
||||||
{
|
for (size_t i = 0; i < num_versions_to_try; i++) {
|
||||||
for (size_t i = 0; i < num_versions_to_try; i++)
|
const Version& cv = versions_to_try[i];
|
||||||
{
|
if (cv.profile == Profile::NoProfile &&
|
||||||
const Version& cv = versions_to_try[i];
|
CreateContext(nullptr, NSOpenGLProfileVersionLegacy, true)) {
|
||||||
if (cv.profile == Profile::NoProfile && CreateContext(nullptr, NSOpenGLProfileVersionLegacy, true))
|
// we already have the dummy context, so just use that
|
||||||
{
|
m_version = cv;
|
||||||
// we already have the dummy context, so just use that
|
return true;
|
||||||
m_version = cv;
|
} else if (cv.profile == Profile::Core) {
|
||||||
return true;
|
if (cv.major_version > 4 && cv.minor_version > 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const NSOpenGLPixelFormatAttribute profile =
|
||||||
|
(cv.major_version > 3 || cv.minor_version > 2) ? NSOpenGLProfileVersion4_1Core
|
||||||
|
: NSOpenGLProfileVersion3_2Core;
|
||||||
|
if (CreateContext(nullptr, static_cast<int>(profile), true)) {
|
||||||
|
m_version = cv;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (cv.profile == Profile::Core)
|
|
||||||
{
|
|
||||||
if (cv.major_version > 4 && cv.minor_version > 1)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
const NSOpenGLPixelFormatAttribute profile = (cv.major_version > 3 || cv.minor_version > 2) ? NSOpenGLProfileVersion4_1Core : NSOpenGLProfileVersion3_2Core;
|
|
||||||
if (CreateContext(nullptr, static_cast<int>(profile), true))
|
|
||||||
{
|
|
||||||
m_version = cv;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
void* ContextAGL::GetProcAddress(const char* name)
|
|
||||||
{
|
|
||||||
void* addr = m_opengl_module_handle ? dlsym(m_opengl_module_handle, name) : nullptr;
|
|
||||||
if (addr)
|
|
||||||
return addr;
|
|
||||||
|
|
||||||
return dlsym(RTLD_NEXT, name);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ContextAGL::ChangeSurface(const WindowInfo& new_wi)
|
|
||||||
{
|
|
||||||
m_wi = new_wi;
|
|
||||||
BindContextToView();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void ContextAGL::ResizeSurface(u32 new_surface_width /*= 0*/, u32 new_surface_height /*= 0*/)
|
|
||||||
{
|
|
||||||
UpdateDimensions();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ContextAGL::UpdateDimensions()
|
|
||||||
{
|
|
||||||
const NSSize window_size = [GetView() frame].size;
|
|
||||||
const CGFloat window_scale = [[GetView() window] backingScaleFactor];
|
|
||||||
const u32 new_width = static_cast<u32>(static_cast<CGFloat>(window_size.width) * window_scale);
|
|
||||||
const u32 new_height = static_cast<u32>(static_cast<CGFloat>(window_size.height) * window_scale);
|
|
||||||
|
|
||||||
if (m_wi.surface_width == new_width && m_wi.surface_height == new_height)
|
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
m_wi.surface_width = new_width;
|
|
||||||
m_wi.surface_height = new_height;
|
|
||||||
|
|
||||||
dispatch_block_t block = ^{
|
|
||||||
[m_context update];
|
|
||||||
};
|
|
||||||
|
|
||||||
if ([NSThread isMainThread])
|
|
||||||
block();
|
|
||||||
else
|
|
||||||
dispatch_sync(dispatch_get_main_queue(), block);
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ContextAGL::SwapBuffers()
|
void* ContextAGL::GetProcAddress(const char* name) {
|
||||||
{
|
void* addr = m_opengl_module_handle ? dlsym(m_opengl_module_handle, name) : nullptr;
|
||||||
[m_context flushBuffer];
|
if (addr)
|
||||||
return true;
|
return addr;
|
||||||
|
|
||||||
|
return dlsym(RTLD_NEXT, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ContextAGL::MakeCurrent()
|
bool ContextAGL::ChangeSurface(const WindowInfo& new_wi) {
|
||||||
{
|
m_wi = new_wi;
|
||||||
[m_context makeCurrentContext];
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ContextAGL::DoneCurrent()
|
|
||||||
{
|
|
||||||
[NSOpenGLContext clearCurrentContext];
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ContextAGL::SetSwapInterval(s32 interval)
|
|
||||||
{
|
|
||||||
GLint gl_interval = static_cast<GLint>(interval);
|
|
||||||
[m_context setValues:&gl_interval forParameter:NSOpenGLCPSwapInterval];
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::unique_ptr<Context> ContextAGL::CreateSharedContext(const WindowInfo& wi)
|
|
||||||
{
|
|
||||||
std::unique_ptr<ContextAGL> context = std::make_unique<ContextAGL>(wi);
|
|
||||||
|
|
||||||
context->m_context = [[NSOpenGLContext alloc] initWithFormat:m_pixel_format shareContext:m_context];
|
|
||||||
if (context->m_context == nil)
|
|
||||||
return nullptr;
|
|
||||||
|
|
||||||
context->m_version = m_version;
|
|
||||||
context->m_pixel_format = m_pixel_format;
|
|
||||||
[context->m_pixel_format retain];
|
|
||||||
|
|
||||||
if (wi.type == WindowInfo::Type::MacOS)
|
|
||||||
context->BindContextToView();
|
|
||||||
|
|
||||||
return context;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ContextAGL::CreateContext(NSOpenGLContext* share_context, int profile, bool make_current)
|
|
||||||
{
|
|
||||||
if (m_context)
|
|
||||||
{
|
|
||||||
[m_context release];
|
|
||||||
m_context = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_pixel_format)
|
|
||||||
[m_pixel_format release];
|
|
||||||
|
|
||||||
const std::array<NSOpenGLPixelFormatAttribute, 5> attribs = {{
|
|
||||||
NSOpenGLPFADoubleBuffer,
|
|
||||||
NSOpenGLPFAOpenGLProfile,
|
|
||||||
static_cast<NSOpenGLPixelFormatAttribute>(profile),
|
|
||||||
NSOpenGLPFAAccelerated,
|
|
||||||
0}};
|
|
||||||
m_pixel_format = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs.data()];
|
|
||||||
if (m_pixel_format == nil)
|
|
||||||
{
|
|
||||||
Log_ErrorPrintf("Failed to initialize pixel format");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_context = [[NSOpenGLContext alloc] initWithFormat:m_pixel_format shareContext:nil];
|
|
||||||
if (m_context == nil)
|
|
||||||
return false;
|
|
||||||
|
|
||||||
if (m_wi.type == WindowInfo::Type::MacOS)
|
|
||||||
BindContextToView();
|
BindContextToView();
|
||||||
|
return true;
|
||||||
if (make_current)
|
|
||||||
[m_context makeCurrentContext];
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void ContextAGL::BindContextToView()
|
void ContextAGL::ResizeSurface(u32 new_surface_width /*= 0*/, u32 new_surface_height /*= 0*/) {
|
||||||
{
|
UpdateDimensions();
|
||||||
NSView* const view = GetView();
|
}
|
||||||
NSWindow* const window = [view window];
|
|
||||||
[view setWantsBestResolutionOpenGLSurface:YES];
|
|
||||||
|
|
||||||
UpdateDimensions();
|
bool ContextAGL::UpdateDimensions() {
|
||||||
|
const NSSize window_size = [GetView() frame].size;
|
||||||
|
const CGFloat window_scale = [[GetView() window] backingScaleFactor];
|
||||||
|
const u32 new_width = static_cast<u32>(static_cast<CGFloat>(window_size.width) * window_scale);
|
||||||
|
const u32 new_height =
|
||||||
|
static_cast<u32>(static_cast<CGFloat>(window_size.height) * window_scale);
|
||||||
|
|
||||||
dispatch_block_t block = ^{
|
if (m_wi.surface_width == new_width && m_wi.surface_height == new_height)
|
||||||
[window makeFirstResponder:view];
|
return false;
|
||||||
[m_context setView:view];
|
|
||||||
[window makeKeyAndOrderFront:nil];
|
|
||||||
};
|
|
||||||
|
|
||||||
if ([NSThread isMainThread])
|
m_wi.surface_width = new_width;
|
||||||
block();
|
m_wi.surface_height = new_height;
|
||||||
else
|
|
||||||
dispatch_sync(dispatch_get_main_queue(), block);
|
dispatch_block_t block = ^{
|
||||||
|
[m_context update];
|
||||||
|
};
|
||||||
|
|
||||||
|
if ([NSThread isMainThread])
|
||||||
|
block();
|
||||||
|
else
|
||||||
|
dispatch_sync(dispatch_get_main_queue(), block);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ContextAGL::SwapBuffers() {
|
||||||
|
[m_context flushBuffer];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ContextAGL::MakeCurrent() {
|
||||||
|
[m_context makeCurrentContext];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ContextAGL::DoneCurrent() {
|
||||||
|
[NSOpenGLContext clearCurrentContext];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ContextAGL::SetSwapInterval(s32 interval) {
|
||||||
|
GLint gl_interval = static_cast<GLint>(interval);
|
||||||
|
[m_context setValues:&gl_interval forParameter:NSOpenGLCPSwapInterval];
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<Context> ContextAGL::CreateSharedContext(const WindowInfo& wi) {
|
||||||
|
std::unique_ptr<ContextAGL> context = std::make_unique<ContextAGL>(wi);
|
||||||
|
|
||||||
|
context->m_context = [[NSOpenGLContext alloc] initWithFormat:m_pixel_format
|
||||||
|
shareContext:m_context];
|
||||||
|
if (context->m_context == nil)
|
||||||
|
return nullptr;
|
||||||
|
|
||||||
|
context->m_version = m_version;
|
||||||
|
context->m_pixel_format = m_pixel_format;
|
||||||
|
[context->m_pixel_format retain];
|
||||||
|
|
||||||
|
if (wi.type == WindowInfo::Type::MacOS)
|
||||||
|
context->BindContextToView();
|
||||||
|
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ContextAGL::CreateContext(NSOpenGLContext* share_context, int profile, bool make_current) {
|
||||||
|
if (m_context) {
|
||||||
|
[m_context release];
|
||||||
|
m_context = nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (m_pixel_format)
|
||||||
|
[m_pixel_format release];
|
||||||
|
|
||||||
|
const std::array<NSOpenGLPixelFormatAttribute, 5> attribs = {
|
||||||
|
{NSOpenGLPFADoubleBuffer, NSOpenGLPFAOpenGLProfile,
|
||||||
|
static_cast<NSOpenGLPixelFormatAttribute>(profile), NSOpenGLPFAAccelerated, 0}};
|
||||||
|
m_pixel_format = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs.data()];
|
||||||
|
if (m_pixel_format == nil) {
|
||||||
|
Log_ErrorPrintf("Failed to initialize pixel format");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_context = [[NSOpenGLContext alloc] initWithFormat:m_pixel_format shareContext:nil];
|
||||||
|
if (m_context == nil)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if (m_wi.type == WindowInfo::Type::MacOS)
|
||||||
|
BindContextToView();
|
||||||
|
|
||||||
|
if (make_current)
|
||||||
|
[m_context makeCurrentContext];
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ContextAGL::BindContextToView() {
|
||||||
|
NSView* const view = GetView();
|
||||||
|
NSWindow* const window = [view window];
|
||||||
|
[view setWantsBestResolutionOpenGLSurface:YES];
|
||||||
|
|
||||||
|
UpdateDimensions();
|
||||||
|
|
||||||
|
dispatch_block_t block = ^{
|
||||||
|
[window makeFirstResponder:view];
|
||||||
|
[m_context setView:view];
|
||||||
|
[window makeKeyAndOrderFront:nil];
|
||||||
|
};
|
||||||
|
|
||||||
|
if ([NSThread isMainThread])
|
||||||
|
block();
|
||||||
|
else
|
||||||
|
dispatch_sync(dispatch_get_main_queue(), block);
|
||||||
}
|
}
|
||||||
} // namespace GL
|
} // namespace GL
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include "../duckstation_compat.h"
|
#include "citra_qt/wayland/duckstation_compat.h"
|
||||||
#include "../log.h"
|
#include "citra_qt/wayland/log.h"
|
||||||
#include "context_egl.h"
|
#include "context_egl.h"
|
||||||
Log_SetChannel(GL::ContextEGL);
|
Log_SetChannel(GL::ContextEGL);
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "../../../../../externals/glad/src/glad_egl.h"
|
|
||||||
#include "context.h"
|
#include "context.h"
|
||||||
|
|
||||||
|
#include <glad/glad_egl.h>
|
||||||
|
|
||||||
namespace GL {
|
namespace GL {
|
||||||
|
|
||||||
class ContextEGL : public Context {
|
class ContextEGL : public Context {
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#include "../log.h"
|
#include "citra_qt/wayland/log.h"
|
||||||
#include "context_egl_wayland.h"
|
#include "context_egl_wayland.h"
|
||||||
Log_SetChannel(ContextEGLWayland);
|
Log_SetChannel(ContextEGLWayland);
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "../log.h"
|
#include "citra_qt/wayland/log.h"
|
||||||
#include "context_egl_x11.h"
|
#include "context_egl_x11.h"
|
||||||
Log_SetChannel(GL::ContextEGLX11);
|
Log_SetChannel(GL::ContextEGLX11);
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#include "../duckstation_compat.h"
|
#include "citra_qt/wayland/duckstation_compat.h"
|
||||||
#include "../log.h"
|
#include "citra_qt/wayland/log.h"
|
||||||
#include "context_glx.h"
|
#include "context_glx.h"
|
||||||
Log_SetChannel(GL::ContextGLX);
|
Log_SetChannel(GL::ContextGLX);
|
||||||
|
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "../../../../../externals/glad/src/glad_glx.h"
|
|
||||||
#include "context.h"
|
#include "context.h"
|
||||||
#include "x11_window.h"
|
#include "x11_window.h"
|
||||||
|
|
||||||
|
#include <glad/glad_glx.h>
|
||||||
|
|
||||||
namespace GL {
|
namespace GL {
|
||||||
|
|
||||||
class ContextGLX final : public Context {
|
class ContextGLX final : public Context {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include "../duckstation_compat.h"
|
#include "citra_qt/wayland/duckstation_compat.h"
|
||||||
#include "../log.h"
|
#include "citra_qt/wayland/log.h"
|
||||||
#include "../scoped_guard.h"
|
#include "citra_qt/wayland/scoped_guard.h"
|
||||||
#include "context_wgl.h"
|
#include "context_wgl.h"
|
||||||
#include "loader.h"
|
#include "loader.h"
|
||||||
using namespace melonDS;
|
using namespace melonDS;
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "../windows_headers.h"
|
|
||||||
|
#include "citra+qt/wayland/windows_headers.h"
|
||||||
|
|
||||||
#include <optional>
|
#include <optional>
|
||||||
#include "../../../../../externals/glad/src/glad_wgl.h"
|
#include <glad/glad_wgl.h>
|
||||||
|
|
||||||
#include "context.h"
|
#include "context.h"
|
||||||
#include "loader.h"
|
#include "loader.h"
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
// Fix glad.h including windows.h
|
// Fix glad.h including windows.h
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include "../windows_headers.h"
|
#include "citra_qt/wayland/windows_headers.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include "../../../../../externals/glad/src/glad.h"
|
#include <glad/glad.h>
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#include <cstdio>
|
#include <cstdio>
|
||||||
#include "../duckstation_compat.h"
|
#include "citra_qt/wayland/duckstation_compat.h"
|
||||||
#include "../log.h"
|
#include "citra_qt/wayland/log.h"
|
||||||
#include "x11_window.h"
|
#include "x11_window.h"
|
||||||
Log_SetChannel(X11Window);
|
Log_SetChannel(X11Window);
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <X11/Xutil.h>
|
#include <X11/Xutil.h>
|
||||||
#include "../duckstation_compat.h"
|
#include "citra_qt/wayland/duckstation_compat.h"
|
||||||
|
|
||||||
namespace GL {
|
namespace GL {
|
||||||
using namespace citra;
|
using namespace citra;
|
||||||
|
|
38
src/citra_qt/externals/types.h
vendored
38
src/citra_qt/externals/types.h
vendored
|
@ -1,38 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright 2016-2023 melonDS team
|
|
||||||
|
|
||||||
This file is part of melonDS.
|
|
||||||
|
|
||||||
melonDS is free software: you can redistribute it and/or modify it under
|
|
||||||
the terms of the GNU General Public License as published by the Free
|
|
||||||
Software Foundation, either version 3 of the License, or (at your option)
|
|
||||||
any later version.
|
|
||||||
|
|
||||||
melonDS is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
||||||
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License along
|
|
||||||
with melonDS. If not, see http://www.gnu.org/licenses/.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef TYPES_H
|
|
||||||
#define TYPES_H
|
|
||||||
|
|
||||||
#include <array>
|
|
||||||
#include <stdint.h>
|
|
||||||
|
|
||||||
namespace citra {
|
|
||||||
typedef uint8_t u8;
|
|
||||||
typedef uint16_t u16;
|
|
||||||
typedef uint32_t u32;
|
|
||||||
typedef uint64_t u64;
|
|
||||||
typedef int8_t s8;
|
|
||||||
typedef int16_t s16;
|
|
||||||
typedef int32_t s32;
|
|
||||||
typedef int64_t s64;
|
|
||||||
|
|
||||||
template <class T, std::size_t A, std::size_t B>
|
|
||||||
using array2d = std::array<std::array<T, B>, A>;
|
|
||||||
} // namespace citra
|
|
||||||
#endif // TYPES_H
|
|
|
@ -1,7 +1,7 @@
|
||||||
#ifndef DUCKSTATION_COMPAT_H
|
#ifndef DUCKSTATION_COMPAT_H
|
||||||
#define DUCKSTATION_COMPAT_H
|
#define DUCKSTATION_COMPAT_H
|
||||||
|
|
||||||
#include "../types.h"
|
#include "common/common_types.h"
|
||||||
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
|
|
||||||
|
@ -14,4 +14,4 @@
|
||||||
|
|
||||||
#define UnreachableCode() __builtin_unreachable()
|
#define UnreachableCode() __builtin_unreachable()
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -86,7 +86,7 @@ bool WindowInfo::QueryRefreshRateForWindow(const WindowInfo& wi, float* refresh_
|
||||||
|
|
||||||
#include <X11/extensions/Xrandr.h>
|
#include <X11/extensions/Xrandr.h>
|
||||||
#include "common/scoped_guard.h"
|
#include "common/scoped_guard.h"
|
||||||
#include "gl/x11_window.h"
|
#include "x11_window.h"
|
||||||
|
|
||||||
static bool GetRefreshRateFromXRandR(const WindowInfo& wi, float* refresh_rate) {
|
static bool GetRefreshRateFromXRandR(const WindowInfo& wi, float* refresh_rate) {
|
||||||
Display* display = static_cast<Display*>(wi.display_connection);
|
Display* display = static_cast<Display*>(wi.display_connection);
|
||||||
|
@ -172,4 +172,4 @@ bool WindowInfo::QueryRefreshRateForWindow(const WindowInfo& wi, float* refresh_
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -1,5 +1,5 @@
|
||||||
#pragma once
|
#pragma once
|
||||||
#include "../types.h"
|
#include "common/common_types.h"
|
||||||
|
|
||||||
// Contains the information required to create a graphics context in a window.
|
// Contains the information required to create a graphics context in a window.
|
||||||
struct WindowInfo {
|
struct WindowInfo {
|
|
@ -54,6 +54,9 @@ typedef u32 PAddr; ///< Represents a pointer in the ARM11 physical address space
|
||||||
using u128 = std::array<std::uint64_t, 2>;
|
using u128 = std::array<std::uint64_t, 2>;
|
||||||
static_assert(sizeof(u128) == 16, "u128 must be 128 bits wide");
|
static_assert(sizeof(u128) == 16, "u128 must be 128 bits wide");
|
||||||
|
|
||||||
|
template <class T, std::size_t A, std::size_t B>
|
||||||
|
using array2d = std::array<std::array<T, B>, A>;
|
||||||
|
|
||||||
// An inheritable class to disallow the copy constructor and operator= functions
|
// An inheritable class to disallow the copy constructor and operator= functions
|
||||||
class NonCopyable {
|
class NonCopyable {
|
||||||
protected:
|
protected:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue