mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-08 20:28:32 +09:00
- Add MOBILEGL_ENABLE_DILIGENT option; build DiligentCore Vulkan-only after MobileGL's existing 3rdparty targets so shared glslang/SPIRV-Cross/xxHash targets are reused instead of duplicated. - Add BackendType::DiligentVulkan, config parsing, and backend-object switch. - Add DiligentBackend::BackendObject_Diligent skeleton: creates a Diligent Vulkan device/context when an adapter is available, advertises GL 3.2 core, and returns an empty GL function table for now. - Add local DiligentVulkanSanityTest that compiles/runs on the host (skips device creation gracefully when no Vulkan adapter is present). - Fix GLXImpl EGLDisplay member shadowing the X11 Display typedef, exposed by GCC 16 + Diligent header include order.
80 lines
3.0 KiB
C++
80 lines
3.0 KiB
C++
// MobileGL - MobileGL/MG_Backend/Init.cpp
|
|
// Copyright (c) 2025-2026 MobileGL-Dev
|
|
// Licensed under the GNU Lesser General Public License v3.0:
|
|
// https://www.gnu.org/licenses/gpl-3.0.txt
|
|
// https://www.gnu.org/licenses/lgpl-3.0.txt
|
|
// SPDX-License-Identifier: LGPL-3.0-only
|
|
// End of Source File Header
|
|
|
|
#include "BackendObjects.h"
|
|
#include <Config.h>
|
|
#include <MG_Util/BackendLoaders/OpenGL/Loader.h>
|
|
#include <MG_Util/Converters/MGToStr/GLExtensionConverter.h>
|
|
#if defined(MOBILEGL_ENABLE_DILIGENT)
|
|
#include <MG_Backend/Diligent/BackendObject_Diligent.h>
|
|
#endif
|
|
|
|
namespace MobileGL::MG_Backend {
|
|
void LogBackendInfo() {
|
|
if (!pActiveBackendObject) {
|
|
MGLOG_W("No active backend object, cannot log backend info");
|
|
return;
|
|
}
|
|
|
|
const auto& rendererInfo = pActiveBackendObject->GetRendererInfo();
|
|
MGLOG_I("MobileGL Backend Info:");
|
|
MGLOG_I(" Renderer Name: %s", rendererInfo.RendererName.c_str());
|
|
MGLOG_I(" Backend Name: %s", rendererInfo.BackendName.c_str());
|
|
if (rendererInfo.ExtraVendor) {
|
|
MGLOG_I(" Extra Vendor Info: %s", rendererInfo.ExtraVendor->c_str());
|
|
}
|
|
MGLOG_I(" Target OpenGL Version: %d.%d", rendererInfo.RendererGLInfo.TargetGLVersion.Major,
|
|
rendererInfo.RendererGLInfo.TargetGLVersion.Minor);
|
|
MGLOG_I(" Target GLSL Version: %d.%d", rendererInfo.RendererGLInfo.TargetGLSLVersion.Major,
|
|
rendererInfo.RendererGLInfo.TargetGLSLVersion.Minor);
|
|
MGLOG_I(" OpenGL Extensions:");
|
|
for (const auto& ext : rendererInfo.RendererGLInfo.Extensions) {
|
|
MGLOG_I(" - %s", MG_Util::ConvertGLExtToString(ext).c_str());
|
|
}
|
|
}
|
|
|
|
Bool InitSpecificBackendLibs() {
|
|
if (!pActiveBackendObject) {
|
|
MGLOG_W("No active backend object, cannot initialize backend libraries");
|
|
return false;
|
|
}
|
|
pActiveBackendObject->Initialize();
|
|
gBackendFunctionsTable = pActiveBackendObject->GetBackendFunctions();
|
|
return true;
|
|
}
|
|
|
|
void Init() {
|
|
MGLOG_D("Initializing MobileGL Backend...");
|
|
|
|
switch (MG_Config::ActiveBackendType) {
|
|
case BackendType::DirectGLES:
|
|
pActiveBackendObject = MakeUnique<DirectGLES::BackendObject_DirectGLES>();
|
|
break;
|
|
case BackendType::DirectVulkan:
|
|
pActiveBackendObject = MakeUnique<DirectVulkan::BackendObject_DirectVulkan>();
|
|
break;
|
|
#if defined(MOBILEGL_ENABLE_DILIGENT)
|
|
case BackendType::DiligentVulkan:
|
|
pActiveBackendObject = MakeUnique<DiligentBackend::BackendObject_Diligent>();
|
|
break;
|
|
#endif
|
|
case BackendType::Unknown:
|
|
default:
|
|
MGLOG_W("Unknown backend type, defaulting to unknown backend");
|
|
pActiveBackendObject = nullptr;
|
|
}
|
|
|
|
Bool result = InitSpecificBackendLibs();
|
|
if (!result) {
|
|
MGLOG_W("Failed to initialize MobileGL backend libraries");
|
|
return;
|
|
}
|
|
LogBackendInfo();
|
|
}
|
|
} // namespace MobileGL::MG_Backend
|