mirror of
https://github.com/hyprwm/aquamarine.git
synced 2024-11-17 00:15:59 +01:00
core: Initial stuff
This commit is contained in:
parent
7fee54d25c
commit
6ccfdd74df
9 changed files with 335 additions and 2 deletions
65
.clang-format
Normal file
65
.clang-format
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
---
|
||||||
|
Language: Cpp
|
||||||
|
BasedOnStyle: LLVM
|
||||||
|
|
||||||
|
AccessModifierOffset: -2
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveMacros: true
|
||||||
|
AlignConsecutiveAssignments: true
|
||||||
|
AlignEscapedNewlines: Right
|
||||||
|
AlignOperands: false
|
||||||
|
AlignTrailingComments: true
|
||||||
|
AllowAllArgumentsOnNextLine: true
|
||||||
|
AllowAllConstructorInitializersOnNextLine: true
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: true
|
||||||
|
AllowShortCaseLabelsOnASingleLine: true
|
||||||
|
AllowShortFunctionsOnASingleLine: Empty
|
||||||
|
AllowShortIfStatementsOnASingleLine: Never
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortLoopsOnASingleLine: false
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakBeforeMultilineStrings: false
|
||||||
|
AlwaysBreakTemplateDeclarations: Yes
|
||||||
|
BreakBeforeBraces: Attach
|
||||||
|
BreakBeforeTernaryOperators: false
|
||||||
|
BreakConstructorInitializers: AfterColon
|
||||||
|
ColumnLimit: 180
|
||||||
|
CompactNamespaces: false
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: false
|
||||||
|
ExperimentalAutoDetectBinPacking: false
|
||||||
|
FixNamespaceComments: false
|
||||||
|
IncludeBlocks: Preserve
|
||||||
|
IndentCaseLabels: true
|
||||||
|
IndentWidth: 4
|
||||||
|
PointerAlignment: Left
|
||||||
|
ReflowComments: false
|
||||||
|
SortIncludes: false
|
||||||
|
SortUsingDeclarations: false
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: true
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 1
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInContainerLiterals: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
Standard: Auto
|
||||||
|
TabWidth: 4
|
||||||
|
UseTab: Never
|
||||||
|
|
||||||
|
AllowShortEnumsOnASingleLine: false
|
||||||
|
|
||||||
|
BraceWrapping:
|
||||||
|
AfterEnum: false
|
||||||
|
|
||||||
|
AlignConsecutiveDeclarations: AcrossEmptyLines
|
||||||
|
|
||||||
|
NamespaceIndentation: All
|
36
.gitignore
vendored
Normal file
36
.gitignore
vendored
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# Prerequisites
|
||||||
|
*.d
|
||||||
|
|
||||||
|
# Compiled Object files
|
||||||
|
*.slo
|
||||||
|
*.lo
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
|
||||||
|
# Precompiled Headers
|
||||||
|
*.gch
|
||||||
|
*.pch
|
||||||
|
|
||||||
|
# Compiled Dynamic libraries
|
||||||
|
*.so
|
||||||
|
*.dylib
|
||||||
|
*.dll
|
||||||
|
|
||||||
|
# Fortran module files
|
||||||
|
*.mod
|
||||||
|
*.smod
|
||||||
|
|
||||||
|
# Compiled Static libraries
|
||||||
|
*.lai
|
||||||
|
*.la
|
||||||
|
*.a
|
||||||
|
*.lib
|
||||||
|
|
||||||
|
# Executables
|
||||||
|
*.exe
|
||||||
|
*.out
|
||||||
|
*.app
|
||||||
|
|
||||||
|
build/
|
||||||
|
.vscode/
|
||||||
|
.cache/
|
50
CMakeLists.txt
Normal file
50
CMakeLists.txt
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
cmake_minimum_required(VERSION 3.19)
|
||||||
|
|
||||||
|
set(AQUAMARINE_VERSION "0.1.0")
|
||||||
|
add_compile_definitions(AQUAMARINE_VERSION="${AQUAMARINE_VERSION}")
|
||||||
|
|
||||||
|
project(aquamarine
|
||||||
|
VERSION ${AQUAMARINE_VERSION}
|
||||||
|
DESCRIPTION "A very light linux rendering backend library"
|
||||||
|
)
|
||||||
|
|
||||||
|
include(CTest)
|
||||||
|
include(GNUInstallDirs)
|
||||||
|
|
||||||
|
set(PREFIX ${CMAKE_INSTALL_PREFIX})
|
||||||
|
set(INCLUDE ${CMAKE_INSTALL_FULL_INCLUDEDIR})
|
||||||
|
set(LIBDIR ${CMAKE_INSTALL_FULL_LIBDIR})
|
||||||
|
|
||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
pkg_check_modules(deps REQUIRED IMPORTED_TARGET wayland-client wayland-protocols hyprutils>=0.1.2)
|
||||||
|
|
||||||
|
configure_file(aquamarine.pc.in aquamarine.pc @ONLY)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 23)
|
||||||
|
|
||||||
|
if(CMAKE_BUILD_TYPE MATCHES Debug OR CMAKE_BUILD_TYPE MATCHES DEBUG)
|
||||||
|
message(STATUS "Configuring aquamarine in Debug")
|
||||||
|
add_compile_definitions(AQUAMARINE_DEBUG)
|
||||||
|
else()
|
||||||
|
add_compile_options(-O3)
|
||||||
|
message(STATUS "Configuring aquamarine in Release")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
file(GLOB_RECURSE SRCFILES CONFIGURE_DEPENDS "src/*.cpp" "include/*.hpp")
|
||||||
|
file(GLOB_RECURSE PUBLIC_HEADERS CONFIGURE_DEPENDS "include/*.hpp")
|
||||||
|
|
||||||
|
add_library(aquamarine SHARED ${SRCFILES})
|
||||||
|
target_include_directories( aquamarine
|
||||||
|
PUBLIC "./include"
|
||||||
|
PRIVATE "./src"
|
||||||
|
)
|
||||||
|
set_target_properties(aquamarine PROPERTIES
|
||||||
|
VERSION ${AQUAMARINE_VERSION}
|
||||||
|
SOVERSION 0
|
||||||
|
)
|
||||||
|
target_link_libraries(aquamarine PkgConfig::deps)
|
||||||
|
|
||||||
|
# Installation
|
||||||
|
install(TARGETS aquamarine)
|
||||||
|
install(DIRECTORY "include/aquamarine" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
|
||||||
|
install(FILES ${CMAKE_BINARY_DIR}/aquamarine.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
|
29
README.md
29
README.md
|
@ -1,2 +1,27 @@
|
||||||
# aquamarine
|
## Aquamarine
|
||||||
Aquamarine is a very light rendering backend library
|
|
||||||
|
Aquamarine is a very light linux rendering backend library. It provides basic abstractions
|
||||||
|
for an application to render on a Wayland session (in a window) or a native DRM session.
|
||||||
|
|
||||||
|
It is agnostic of the rendering API (Vulkan/OpenGL) and designed to be lightweight, performant, and
|
||||||
|
minimal.
|
||||||
|
|
||||||
|
## Stability
|
||||||
|
|
||||||
|
Aquamarine depends on the ABI stability of the stdlib implementation of your compiler. Sover bumps will be done only for aquamarine ABI breaks, not stdlib.
|
||||||
|
|
||||||
|
## Building
|
||||||
|
|
||||||
|
```sh
|
||||||
|
cmake --no-warn-unused-cli -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_INSTALL_PREFIX:PATH=/usr -S . -B ./build
|
||||||
|
cmake --build ./build --config Release --target all -j`nproc 2>/dev/null || getconf _NPROCESSORS_CONF`
|
||||||
|
```
|
||||||
|
|
||||||
|
## TODOs
|
||||||
|
|
||||||
|
- [ ] Wayland backend
|
||||||
|
- [ ] DRM backend (DRM / KMS / libinput)
|
||||||
|
- [ ] Virtual backend (aka. Headless)
|
||||||
|
- [ ] Hardware plane support
|
||||||
|
|
||||||
|
|
||||||
|
|
10
aquamarine.pc.in
Normal file
10
aquamarine.pc.in
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
prefix=@PREFIX@
|
||||||
|
includedir=@INCLUDE@
|
||||||
|
libdir=@LIBDIR@
|
||||||
|
|
||||||
|
Name: aquamarine
|
||||||
|
URL: https://github.com/hyprwm/aquamarine
|
||||||
|
Description: A very light linux rendering backend library
|
||||||
|
Version: @AQUAMARINE_VERSION@
|
||||||
|
Cflags: -I${includedir}
|
||||||
|
Libs: -L${libdir} -laquamarine
|
72
include/aquamarine/backend/Backend.hpp
Normal file
72
include/aquamarine/backend/Backend.hpp
Normal file
|
@ -0,0 +1,72 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <hyprutils/memory/SharedPtr.hpp>
|
||||||
|
#include <vector>
|
||||||
|
#include <functional>
|
||||||
|
|
||||||
|
namespace Aquamarine {
|
||||||
|
enum eBackendType {
|
||||||
|
AQ_BACKEND_WAYLAND = 0,
|
||||||
|
AQ_BACKEND_DRM,
|
||||||
|
AQ_BACKEND_HEADLESS,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum eBackendRequestMode {
|
||||||
|
/*
|
||||||
|
Require the provided backend, will error out if it's not available.
|
||||||
|
*/
|
||||||
|
AQ_BACKEND_REQUEST_MANDATORY = 0,
|
||||||
|
/*
|
||||||
|
Start the backend if it's available
|
||||||
|
*/
|
||||||
|
AQ_BACKEND_REQUEST_IF_AVAILABLE,
|
||||||
|
/*
|
||||||
|
If any IF_AVAILABLE backend fails, use this one
|
||||||
|
*/
|
||||||
|
AQ_BACKEND_REQUEST_FALLBACK,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum eBackendLogLevel {
|
||||||
|
AQ_LOG_TRACE = 0,
|
||||||
|
AQ_LOG_DEBUG,
|
||||||
|
AQ_LOG_WARNING,
|
||||||
|
AQ_LOG_ERROR,
|
||||||
|
AQ_LOG_CRITICAL,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SBackendImplementationOptions {
|
||||||
|
explicit SBackendImplementationOptions();
|
||||||
|
eBackendType backendType;
|
||||||
|
eBackendRequestMode backendRequestMode;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct SBackendOptions {
|
||||||
|
explicit SBackendOptions();
|
||||||
|
std::function<void(eBackendLogLevel, std::string)> logFunction;
|
||||||
|
};
|
||||||
|
|
||||||
|
class IBackendImplementation {
|
||||||
|
public:
|
||||||
|
virtual ~IBackendImplementation();
|
||||||
|
virtual eBackendType type() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class CBackend {
|
||||||
|
public:
|
||||||
|
/* Create a backend, with the provided options. May return a single or a multi-backend. */
|
||||||
|
static Hyprutils::Memory::CSharedPointer<CBackend> create(const std::vector<SBackendImplementationOptions>& backends, const SBackendOptions& options);
|
||||||
|
|
||||||
|
~CBackend();
|
||||||
|
|
||||||
|
/* start the backend. Initializes all the stuff, and will return true on success, false on fail. */
|
||||||
|
bool start();
|
||||||
|
|
||||||
|
void log(eBackendLogLevel level, const std::string& msg);
|
||||||
|
|
||||||
|
private:
|
||||||
|
CBackend();
|
||||||
|
|
||||||
|
std::vector<IBackendImplementation> implementations;
|
||||||
|
SBackendOptions options;
|
||||||
|
};
|
||||||
|
};
|
31
include/aquamarine/input/Input.hpp
Normal file
31
include/aquamarine/input/Input.hpp
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <hyprutils/signal/Signal.hpp>
|
||||||
|
|
||||||
|
struct libinput_device;
|
||||||
|
|
||||||
|
namespace Aquamarine {
|
||||||
|
class IKeyboard {
|
||||||
|
public:
|
||||||
|
virtual libinput_device* getLibinputHandle();
|
||||||
|
|
||||||
|
struct {
|
||||||
|
Hyprutils::Signal::CSignal destroy;
|
||||||
|
Hyprutils::Signal::CSignal key;
|
||||||
|
Hyprutils::Signal::CSignal modifiers;
|
||||||
|
} events;
|
||||||
|
};
|
||||||
|
|
||||||
|
class IPointer {
|
||||||
|
public:
|
||||||
|
virtual libinput_device* getLibinputHandle();
|
||||||
|
|
||||||
|
struct {
|
||||||
|
Hyprutils::Signal::CSignal destroy;
|
||||||
|
Hyprutils::Signal::CSignal move;
|
||||||
|
Hyprutils::Signal::CSignal warp;
|
||||||
|
Hyprutils::Signal::CSignal button;
|
||||||
|
Hyprutils::Signal::CSignal axis;
|
||||||
|
} events;
|
||||||
|
};
|
||||||
|
}
|
35
src/backend/Backend.cpp
Normal file
35
src/backend/Backend.cpp
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
#include <aquamarine/backend/Backend.hpp>
|
||||||
|
|
||||||
|
using namespace Hyprutils::Memory;
|
||||||
|
using namespace Aquamarine;
|
||||||
|
#define SP CSharedPointer
|
||||||
|
|
||||||
|
Aquamarine::CBackend::CBackend() {
|
||||||
|
;
|
||||||
|
}
|
||||||
|
|
||||||
|
Hyprutils::Memory::CSharedPointer<CBackend> Aquamarine::CBackend::create(const std::vector<SBackendImplementationOptions>& backends, const SBackendOptions& options) {
|
||||||
|
auto backend = SP<CBackend>(new CBackend());
|
||||||
|
|
||||||
|
backend->options = options;
|
||||||
|
|
||||||
|
backend->log(AQ_LOG_DEBUG, "Hello world!\n");
|
||||||
|
|
||||||
|
return backend;
|
||||||
|
}
|
||||||
|
|
||||||
|
Aquamarine::CBackend::~CBackend() {
|
||||||
|
log(AQ_LOG_DEBUG, "Bye world!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool Aquamarine::CBackend::start() {
|
||||||
|
log(AQ_LOG_DEBUG, "Starting world!\n");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Aquamarine::CBackend::log(eBackendLogLevel level, const std::string& msg) {
|
||||||
|
if (!options.logFunction)
|
||||||
|
return;
|
||||||
|
|
||||||
|
options.logFunction(level, msg);
|
||||||
|
}
|
9
src/input/Input.cpp
Normal file
9
src/input/Input.cpp
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
#include <aquamarine/input/Input.hpp>
|
||||||
|
|
||||||
|
libinput_device* Aquamarine::IPointer::getLibinputHandle() {
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
libinput_device* Aquamarine::IKeyboard::getLibinputHandle() {
|
||||||
|
return nullptr;
|
||||||
|
}
|
Loading…
Reference in a new issue