- Implemented EGL Context

This commit is contained in:
2025-07-28 13:00:20 -04:00
parent 8124ea2ae5
commit 7aafa4c9aa
19 changed files with 385 additions and 49 deletions

View File

@@ -0,0 +1,42 @@
// =====================================================================================================================
// fennec, a free and open source game engine
// Copyright © 2025 Medusa Slockbower
//
// This program 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.
//
// This program 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 this program. If not, see <https://www.gnu.org/licenses/>.
// =====================================================================================================================
#include <fennec/platform/interface/display.h>
#include <fennec/platform/interface/gfxcontext.h>
#include <fennec/platform/interface/platform.h>
namespace fennec
{
display::~display() {
delete _context;
}
void display::select_context() {
if (_context != nullptr) return;
const platform::global_context& globals = platform::get_globals();
for (const auto& ctx : globals.graphics) {
_context = ctx.constructor(this);
if (_context) {
return;
}
}
}
}

View File

@@ -23,21 +23,22 @@ namespace fennec
{
template<typename CtorT>
static constexpr void insert_driver(list<platform::driver<CtorT>>& list, CtorT ctor, int priority) {
using list_t = fennec::list<platform::driver<CtorT>>;
static constexpr void insert_driver(list<platform::driver<CtorT>>& drvrs, CtorT ctor, int priority) {
using list_t = list<platform::driver<CtorT>>;
using iter_t = typename list_t::iterator;
iter_t it = list.begin();
while (it != list.end()) {
iter_t it = drvrs.begin();
while (it != drvrs.end()) {
if (priority > it->priority) {
break;
}
}
list.insert(it, { priority, ctor });
drvrs.insert(it, { priority, ctor });
}
void platform::initialize() {
load_display();
_display->select_context();
}
void platform::shutdown() {