Compare commits
3 commits
3ebb18ab7c
...
f91ff0f36f
Author | SHA1 | Date | |
---|---|---|---|
f91ff0f36f | |||
21f6d7da45 | |||
4290d851a4 |
24 changed files with 599 additions and 30 deletions
5
.gitignore
vendored
5
.gitignore
vendored
|
@ -1,7 +1,7 @@
|
||||||
assets/*.h
|
assets/*.h
|
||||||
build*
|
build*
|
||||||
!build-env
|
!build-env
|
||||||
.vscode
|
.vscode/settings.json
|
||||||
.cache
|
.cache
|
||||||
compile_commands.json
|
compile_commands.json
|
||||||
.flatpak-builder
|
.flatpak-builder
|
||||||
|
@ -22,3 +22,6 @@ cmake-build-*/
|
||||||
.codelite/*.tags
|
.codelite/*.tags
|
||||||
*_build
|
*_build
|
||||||
local.properties
|
local.properties
|
||||||
|
hs_err_*.log
|
||||||
|
replay_pid*.log
|
||||||
|
assets/btcc
|
33
.vscode/launch.json
vendored
Normal file
33
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"name": "(gdb) Launch",
|
||||||
|
"type": "cppdbg",
|
||||||
|
"request": "launch",
|
||||||
|
"program": "${workspaceFolder}/build/default/looper",
|
||||||
|
"args": ["-m", "-l-2"],
|
||||||
|
"stopAtEntry": false,
|
||||||
|
"cwd": "${fileDirname}",
|
||||||
|
"environment": [],
|
||||||
|
"externalConsole": false,
|
||||||
|
"MIMode": "gdb",
|
||||||
|
"setupCommands": [
|
||||||
|
{
|
||||||
|
"description": "Enable pretty-printing for gdb",
|
||||||
|
"text": "-enable-pretty-printing",
|
||||||
|
"ignoreFailures": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"description": "Set Disassembly Flavor to Intel",
|
||||||
|
"text": "-gdb-set disassembly-flavor intel",
|
||||||
|
"ignoreFailures": true
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"preLaunchTask": "Build"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
20
.vscode/tasks.json
vendored
Normal file
20
.vscode/tasks.json
vendored
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
{
|
||||||
|
"version": "2.0.0",
|
||||||
|
"tasks": [
|
||||||
|
{
|
||||||
|
"type": "cmake",
|
||||||
|
"label": "Build",
|
||||||
|
"command": "build",
|
||||||
|
"targets": [
|
||||||
|
"all"
|
||||||
|
],
|
||||||
|
"preset": "${command:cmake.activeBuildPresetName}",
|
||||||
|
"group": {
|
||||||
|
"kind": "build",
|
||||||
|
"isDefault": true
|
||||||
|
},
|
||||||
|
"problemMatcher": [],
|
||||||
|
"detail": "CMake template build task",
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
44
CMakePresets.json
Normal file
44
CMakePresets.json
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
{
|
||||||
|
"version": 10,
|
||||||
|
"cmakeMinimumRequired": {
|
||||||
|
"major": 3,
|
||||||
|
"minor": 23,
|
||||||
|
"patch": 0
|
||||||
|
},
|
||||||
|
"configurePresets": [
|
||||||
|
{
|
||||||
|
"name": "default",
|
||||||
|
"displayName": "Default Config",
|
||||||
|
"description": "Default build using Ninja generator",
|
||||||
|
"generator": "Ninja",
|
||||||
|
"binaryDir": "${sourceDir}/build/default",
|
||||||
|
"cacheVariables": {
|
||||||
|
"CMAKE_POLICY_DEFAULT_CMP0069": "NEW",
|
||||||
|
"CMAKE_INTERPROCEDURAL_OPTIMIZATION": "ON",
|
||||||
|
"CMAKE_C_FLAGS": "-O2 -march=native -g",
|
||||||
|
"CMAKE_CXX_FLAGS": "-O2 -march=native -g",
|
||||||
|
"BUILD_SOUNDTOUCH": "ON",
|
||||||
|
"DISABLE_GTK_UI": "ON",
|
||||||
|
"CMAKE_BUILD_TYPE": "RelWithDebInfo"
|
||||||
|
},
|
||||||
|
"environment": {
|
||||||
|
"CMAKE_C_COMPILER_LAUNCHER": "ccache",
|
||||||
|
"CMAKE_CXX_COMPILER_LAUNCHER": "ccache"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"buildPresets": [
|
||||||
|
{
|
||||||
|
"name": "default",
|
||||||
|
"configurePreset": "default"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"testPresets": [
|
||||||
|
{
|
||||||
|
"name": "default",
|
||||||
|
"configurePreset": "default",
|
||||||
|
"output": {"outputOnFailure": true},
|
||||||
|
"execution": {"noTestsAction": "error", "stopOnFailure": true}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
BIN
assets/test_loud.fur
Normal file
BIN
assets/test_loud.fur
Normal file
Binary file not shown.
BIN
assets/test_loud.zsm
Normal file
BIN
assets/test_loud.zsm
Normal file
Binary file not shown.
7
backends/playback/fluidsynth/CMakeLists.txt
Normal file
7
backends/playback/fluidsynth/CMakeLists.txt
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
set(BACKEND_FLUIDSYNTH_SRC ${CMAKE_CURRENT_SOURCE_DIR}/fluidsynth_backend.cpp)
|
||||||
|
set(BACKEND_FLUIDSYNTH_INC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
|
||||||
|
add_playback_backend(fluidsynth_backend ${BACKEND_FLUIDSYNTH_SRC})
|
||||||
|
target_include_directories(fluidsynth_backend PRIVATE ${BACKEND_FLUIDSYNTH_INC})
|
||||||
|
find_package(OpenMP)
|
||||||
|
find_package(FluidSynth)
|
||||||
|
target_link_libraries(fluidsynth_backend PUBLIC OpenMP::OpenMP_CXX FluidSynth::libfluidsynth)
|
4
backends/playback/fluidsynth/backend.json
Normal file
4
backends/playback/fluidsynth/backend.json
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
{
|
||||||
|
"class_name": "FluidSynthBackend",
|
||||||
|
"include_path": "fluidsynth_backend.hpp"
|
||||||
|
}
|
68
backends/playback/fluidsynth/fluidsynth_backend.cpp
Normal file
68
backends/playback/fluidsynth/fluidsynth_backend.cpp
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
#include "fluidsynth_backend.hpp"
|
||||||
|
#include <algorithm>
|
||||||
|
#include <ipc/common.pb.h>
|
||||||
|
#include <exception>
|
||||||
|
#include <filesystem>
|
||||||
|
#include "file_backend.hpp"
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <file_backend.hpp>
|
||||||
|
#include <util.hpp>
|
||||||
|
void FluidSynthBackend::fluidsynth_get_property_list_wrapper(void *udata, const char *name, int type) {
|
||||||
|
((FluidSynthBackend*)udata)->fluidsynth_get_property_list(name, type);
|
||||||
|
}
|
||||||
|
void FluidSynthBackend::fluidsynth_get_property_list(const char *name, int type) {
|
||||||
|
Property property;
|
||||||
|
property.set_path(fmt::format("fluidsynth/{0}", name));
|
||||||
|
property.set_name(name);
|
||||||
|
switch (type) {
|
||||||
|
case FLUID_NUM_TYPE: {
|
||||||
|
property.set_type(PropertyType::Double);
|
||||||
|
} break;
|
||||||
|
case FLUID_INT_TYPE: {
|
||||||
|
property.set_type(PropertyType::Int);
|
||||||
|
} break;
|
||||||
|
case FLUID_STR_TYPE: {
|
||||||
|
property.set_type(PropertyType::String);
|
||||||
|
} break;
|
||||||
|
}
|
||||||
|
property.set_id(PropertyId::BackendSpecific);
|
||||||
|
fluidsynth_properties.push_back(property);
|
||||||
|
}
|
||||||
|
std::vector<Property> FluidSynthBackend::get_property_list() {
|
||||||
|
return fluidsynth_properties;
|
||||||
|
}
|
||||||
|
void FluidSynthBackend::load(const char *filename) {
|
||||||
|
memset(&spec, 0, sizeof(spec));
|
||||||
|
current_file = filename;
|
||||||
|
spec.format = AUDIO_F32SYS;
|
||||||
|
spec.samples = 100;
|
||||||
|
spec.channels = 2;
|
||||||
|
spec.freq = 48000;
|
||||||
|
spec.size = 100 * 2 * sizeof(int16_t);
|
||||||
|
file = open_file(filename);
|
||||||
|
this->settings = new_fluid_settings();
|
||||||
|
fluid_settings_foreach(settings, (void*)this, &fluidsynth_get_property_list_wrapper);
|
||||||
|
}
|
||||||
|
extern SDL_AudioSpec obtained;
|
||||||
|
void FluidSynthBackend::switch_stream(int idx) {
|
||||||
|
}
|
||||||
|
void FluidSynthBackend::cleanup() {
|
||||||
|
delete file;
|
||||||
|
file = nullptr;
|
||||||
|
}
|
||||||
|
size_t FluidSynthBackend::render(void *buf, size_t maxlen) {
|
||||||
|
size_t sample_type_len = 2;
|
||||||
|
maxlen /= sample_type_len;
|
||||||
|
maxlen *= sample_type_len;
|
||||||
|
return copied;
|
||||||
|
}
|
||||||
|
void FluidSynthBackend::seek(double position) {
|
||||||
|
|
||||||
|
}
|
||||||
|
double FluidSynthBackend::get_position() {
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
int FluidSynthBackend::get_stream_idx() {
|
||||||
|
return 0;
|
||||||
|
}
|
46
backends/playback/fluidsynth/fluidsynth_backend.hpp
Normal file
46
backends/playback/fluidsynth/fluidsynth_backend.hpp
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#pragma once
|
||||||
|
#include "playback_backend.hpp"
|
||||||
|
#include <omp.h>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <stddef.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <streambuf>
|
||||||
|
#include <vector>
|
||||||
|
#include <util.hpp>
|
||||||
|
#include <SDL.h>
|
||||||
|
#include "file_backend.hpp"
|
||||||
|
#include <fluidsynth.h>
|
||||||
|
class FluidSynthBackend : public PlaybackBackend {
|
||||||
|
File *file;
|
||||||
|
static void fluidsynth_get_property_list_wrapper(void *udata, const char *name, int type);
|
||||||
|
std::vector<Property> fluidsynth_properties;
|
||||||
|
fluid_settings_t *settings;
|
||||||
|
void fluidsynth_get_property_list(const char *name, int type);
|
||||||
|
public:
|
||||||
|
void set_fluidsynth_property_str(std::string path, std::string val);
|
||||||
|
void set_fluidsynth_property_num(std::string path, double val);
|
||||||
|
void set_fluidsynth_property_int(std::string path, int val);
|
||||||
|
std::string get_fluidsynth_property_str(std::string path);
|
||||||
|
double get_fluidsynth_property_num(std::string path);
|
||||||
|
int get_fluidsynth_property_int(std::string path);
|
||||||
|
inline std::string get_id() override {
|
||||||
|
return "fluidsynth";
|
||||||
|
}
|
||||||
|
inline std::string get_name() override {
|
||||||
|
return "MIDI player";
|
||||||
|
}
|
||||||
|
std::vector<Property> get_property_list() override;
|
||||||
|
void seek(double position) override;
|
||||||
|
void load(const char *filename) override;
|
||||||
|
void switch_stream(int idx) override;
|
||||||
|
void cleanup() override;
|
||||||
|
int get_stream_idx() override;
|
||||||
|
size_t render(void *buf, size_t maxlen) override;
|
||||||
|
double get_position() override;
|
||||||
|
inline double get_length() override {
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
inline ~FluidSynthBackend() override { }
|
||||||
|
};
|
|
@ -205,17 +205,11 @@ void ZsmBackend::tick(bool step) {
|
||||||
} break;
|
} break;
|
||||||
case FmWrite: {
|
case FmWrite: {
|
||||||
for (uint8_t i = 0; i < cmd.fm_write.len; i++) {
|
for (uint8_t i = 0; i < cmd.fm_write.len; i++) {
|
||||||
YM_write_reg(cmd.fm_write.regs[i].reg, cmd.fm_write.regs[i].val);
|
DEBUG.writefln2("YM Pair index: {0}", ym_pairs.size());
|
||||||
while (YM_read_status()) {
|
reg_pair pair;
|
||||||
size_t clocksToAddForYm = 1;
|
memcpy(&pair, cmd.fm_write.regs + i, sizeof(reg_pair));
|
||||||
ticks_remaining -= clocksToAddForYm;
|
ym_pairs.push(pair);
|
||||||
if (ticks_remaining < 0) {
|
DEBUG.writefln2("Writing {1} to FM reg {0} later.", pair.reg, pair.val);
|
||||||
delayTicks -= 1;
|
|
||||||
nextCpuClocks += ClocksPerTick;
|
|
||||||
ticks_remaining += ClocksPerTick;
|
|
||||||
}
|
|
||||||
audio_step(clocksToAddForYm);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
case Delay: {
|
case Delay: {
|
||||||
|
@ -262,6 +256,20 @@ void ZsmBackend::tick(bool step) {
|
||||||
} break;
|
} break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
while (ym_pairs.size() > 0) {
|
||||||
|
reg_pair pair = ym_pairs.pop();
|
||||||
|
YM_write_reg(pair.reg, pair.val);
|
||||||
|
while (YM_read_status()) {
|
||||||
|
size_t clocksToAddForYm = (size_t)std::ceil(((double)YM_FREQ)/((double)PSG_FREQ));
|
||||||
|
ticks_remaining -= clocksToAddForYm;
|
||||||
|
if (ticks_remaining < 0) {
|
||||||
|
delayTicks -= 1;
|
||||||
|
nextCpuClocks += ClocksPerTick;
|
||||||
|
ticks_remaining += ClocksPerTick;
|
||||||
|
}
|
||||||
|
audio_step(clocksToAddForYm);
|
||||||
|
}
|
||||||
|
}
|
||||||
size_t nextCpuClocksInt = std::floor(nextCpuClocks);
|
size_t nextCpuClocksInt = std::floor(nextCpuClocks);
|
||||||
size_t prevCpuClocksInt = std::floor(prevCpuClocks);
|
size_t prevCpuClocksInt = std::floor(prevCpuClocks);
|
||||||
size_t cpuClocksIntDelta = nextCpuClocksInt - prevCpuClocksInt;
|
size_t cpuClocksIntDelta = nextCpuClocksInt - prevCpuClocksInt;
|
||||||
|
|
|
@ -81,6 +81,7 @@ class ZsmBackend : public PlaybackBackend {
|
||||||
DynPtr ym_resample_buf;
|
DynPtr ym_resample_buf;
|
||||||
bool ym_recorded = false;
|
bool ym_recorded = false;
|
||||||
uint8_t ym_data[256];
|
uint8_t ym_data[256];
|
||||||
|
Fifo<reg_pair> ym_pairs;
|
||||||
uint32_t loop_rem;
|
uint32_t loop_rem;
|
||||||
uint32_t pcm_data_offs;
|
uint32_t pcm_data_offs;
|
||||||
uint8_t pcm_data_instruments;
|
uint8_t pcm_data_instruments;
|
||||||
|
|
2
build.sh
2
build.sh
|
@ -27,6 +27,6 @@ trap on_err ERR
|
||||||
cd "$(dirname "$0")"
|
cd "$(dirname "$0")"
|
||||||
mkdir -p build
|
mkdir -p build
|
||||||
cd build
|
cd build
|
||||||
run_command cmake .. -DDISABLE_GTK_UI=ON -DCMAKE_BUILD_TYPE=Debug
|
run_command cmake .. -DDISABLE_GTK_UI=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_POLICY_DEFAULT_CMP0069=NEW -DCMAKE_INTERPROCEDURAL_OPTIMIZATION=ON -DCMAKE_C{,XX}_FLAGS="-O2 -march=native" -DBUILD_SOUNDTOUCH=ON
|
||||||
run_command cmake --build . "$@"
|
run_command cmake --build . "$@"
|
||||||
cd "$OLD_DIR"
|
cd "$OLD_DIR"
|
||||||
|
|
|
@ -27,6 +27,9 @@ message BooleanProperty {
|
||||||
message BytesProperty {
|
message BytesProperty {
|
||||||
bytes value = 1;
|
bytes value = 1;
|
||||||
};
|
};
|
||||||
|
message IntProperty {
|
||||||
|
int64 value = 1;
|
||||||
|
}
|
||||||
message PropertyHintRange {
|
message PropertyHintRange {
|
||||||
optional double min = 1;
|
optional double min = 1;
|
||||||
optional double max = 2;
|
optional double max = 2;
|
||||||
|
@ -49,6 +52,7 @@ enum PropertyType {
|
||||||
StreamType = 4;
|
StreamType = 4;
|
||||||
AudioSpecType = 5;
|
AudioSpecType = 5;
|
||||||
StreamID = 6;
|
StreamID = 6;
|
||||||
|
Int = 7;
|
||||||
}
|
}
|
||||||
message Property {
|
message Property {
|
||||||
PropertyType type = 1;
|
PropertyType type = 1;
|
||||||
|
|
|
@ -412,7 +412,7 @@ PlaybackProcess::PlaybackProcess(std::vector<std::string> args) {
|
||||||
}
|
}
|
||||||
PlaybackProcess::PlaybackProcess(std::string filename, int idx) {
|
PlaybackProcess::PlaybackProcess(std::string filename, int idx) {
|
||||||
// multi_process = Looper::Options::get_option<bool>("playback.multi_process", true);
|
// multi_process = Looper::Options::get_option<bool>("playback.multi_process", true);
|
||||||
multi_process = false;
|
multi_process = true;
|
||||||
done = false;
|
done = false;
|
||||||
this->done = false;
|
this->done = false;
|
||||||
if (multi_process) {
|
if (multi_process) {
|
||||||
|
|
329
sdl-android-project/.idea/caches/deviceStreaming.xml
Normal file
329
sdl-android-project/.idea/caches/deviceStreaming.xml
Normal file
|
@ -0,0 +1,329 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="DeviceStreaming">
|
||||||
|
<option name="deviceSelectionList">
|
||||||
|
<list>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="27" />
|
||||||
|
<option name="brand" value="DOCOMO" />
|
||||||
|
<option name="codename" value="F01L" />
|
||||||
|
<option name="id" value="F01L" />
|
||||||
|
<option name="manufacturer" value="FUJITSU" />
|
||||||
|
<option name="name" value="F-01L" />
|
||||||
|
<option name="screenDensity" value="360" />
|
||||||
|
<option name="screenX" value="720" />
|
||||||
|
<option name="screenY" value="1280" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="28" />
|
||||||
|
<option name="brand" value="DOCOMO" />
|
||||||
|
<option name="codename" value="SH-01L" />
|
||||||
|
<option name="id" value="SH-01L" />
|
||||||
|
<option name="manufacturer" value="SHARP" />
|
||||||
|
<option name="name" value="AQUOS sense2 SH-01L" />
|
||||||
|
<option name="screenDensity" value="480" />
|
||||||
|
<option name="screenX" value="1080" />
|
||||||
|
<option name="screenY" value="2160" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="Lenovo" />
|
||||||
|
<option name="codename" value="TB370FU" />
|
||||||
|
<option name="id" value="TB370FU" />
|
||||||
|
<option name="manufacturer" value="Lenovo" />
|
||||||
|
<option name="name" value="Tab P12" />
|
||||||
|
<option name="screenDensity" value="340" />
|
||||||
|
<option name="screenX" value="1840" />
|
||||||
|
<option name="screenY" value="2944" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="31" />
|
||||||
|
<option name="brand" value="samsung" />
|
||||||
|
<option name="codename" value="a51" />
|
||||||
|
<option name="id" value="a51" />
|
||||||
|
<option name="manufacturer" value="Samsung" />
|
||||||
|
<option name="name" value="Galaxy A51" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="1080" />
|
||||||
|
<option name="screenY" value="2400" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="akita" />
|
||||||
|
<option name="id" value="akita" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel 8a" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="1080" />
|
||||||
|
<option name="screenY" value="2400" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="33" />
|
||||||
|
<option name="brand" value="samsung" />
|
||||||
|
<option name="codename" value="b0q" />
|
||||||
|
<option name="id" value="b0q" />
|
||||||
|
<option name="manufacturer" value="Samsung" />
|
||||||
|
<option name="name" value="Galaxy S22 Ultra" />
|
||||||
|
<option name="screenDensity" value="600" />
|
||||||
|
<option name="screenX" value="1440" />
|
||||||
|
<option name="screenY" value="3088" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="32" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="bluejay" />
|
||||||
|
<option name="id" value="bluejay" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel 6a" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="1080" />
|
||||||
|
<option name="screenY" value="2400" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="caiman" />
|
||||||
|
<option name="id" value="caiman" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel 9 Pro" />
|
||||||
|
<option name="screenDensity" value="360" />
|
||||||
|
<option name="screenX" value="960" />
|
||||||
|
<option name="screenY" value="2142" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="comet" />
|
||||||
|
<option name="id" value="comet" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel 9 Pro Fold" />
|
||||||
|
<option name="screenDensity" value="390" />
|
||||||
|
<option name="screenX" value="2076" />
|
||||||
|
<option name="screenY" value="2152" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="29" />
|
||||||
|
<option name="brand" value="samsung" />
|
||||||
|
<option name="codename" value="crownqlteue" />
|
||||||
|
<option name="id" value="crownqlteue" />
|
||||||
|
<option name="manufacturer" value="Samsung" />
|
||||||
|
<option name="name" value="Galaxy Note9" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="2220" />
|
||||||
|
<option name="screenY" value="1080" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="samsung" />
|
||||||
|
<option name="codename" value="dm3q" />
|
||||||
|
<option name="id" value="dm3q" />
|
||||||
|
<option name="manufacturer" value="Samsung" />
|
||||||
|
<option name="name" value="Galaxy S23 Ultra" />
|
||||||
|
<option name="screenDensity" value="600" />
|
||||||
|
<option name="screenX" value="1440" />
|
||||||
|
<option name="screenY" value="3088" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="samsung" />
|
||||||
|
<option name="codename" value="e1q" />
|
||||||
|
<option name="id" value="e1q" />
|
||||||
|
<option name="manufacturer" value="Samsung" />
|
||||||
|
<option name="name" value="Galaxy S24" />
|
||||||
|
<option name="screenDensity" value="480" />
|
||||||
|
<option name="screenX" value="1080" />
|
||||||
|
<option name="screenY" value="2340" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="33" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="felix" />
|
||||||
|
<option name="id" value="felix" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel Fold" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="2208" />
|
||||||
|
<option name="screenY" value="1840" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="felix" />
|
||||||
|
<option name="id" value="felix" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel Fold" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="2208" />
|
||||||
|
<option name="screenY" value="1840" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="33" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="felix_camera" />
|
||||||
|
<option name="id" value="felix_camera" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel Fold (Camera-enabled)" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="2208" />
|
||||||
|
<option name="screenY" value="1840" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="33" />
|
||||||
|
<option name="brand" value="samsung" />
|
||||||
|
<option name="codename" value="gts8uwifi" />
|
||||||
|
<option name="id" value="gts8uwifi" />
|
||||||
|
<option name="manufacturer" value="Samsung" />
|
||||||
|
<option name="name" value="Galaxy Tab S8 Ultra" />
|
||||||
|
<option name="screenDensity" value="320" />
|
||||||
|
<option name="screenX" value="1848" />
|
||||||
|
<option name="screenY" value="2960" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="husky" />
|
||||||
|
<option name="id" value="husky" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel 8 Pro" />
|
||||||
|
<option name="screenDensity" value="390" />
|
||||||
|
<option name="screenX" value="1008" />
|
||||||
|
<option name="screenY" value="2244" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="30" />
|
||||||
|
<option name="brand" value="motorola" />
|
||||||
|
<option name="codename" value="java" />
|
||||||
|
<option name="id" value="java" />
|
||||||
|
<option name="manufacturer" value="Motorola" />
|
||||||
|
<option name="name" value="G20" />
|
||||||
|
<option name="screenDensity" value="280" />
|
||||||
|
<option name="screenX" value="720" />
|
||||||
|
<option name="screenY" value="1600" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="komodo" />
|
||||||
|
<option name="id" value="komodo" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel 9 Pro XL" />
|
||||||
|
<option name="screenDensity" value="360" />
|
||||||
|
<option name="screenX" value="1008" />
|
||||||
|
<option name="screenY" value="2244" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="33" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="lynx" />
|
||||||
|
<option name="id" value="lynx" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel 7a" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="1080" />
|
||||||
|
<option name="screenY" value="2400" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="31" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="oriole" />
|
||||||
|
<option name="id" value="oriole" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel 6" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="1080" />
|
||||||
|
<option name="screenY" value="2400" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="33" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="panther" />
|
||||||
|
<option name="id" value="panther" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel 7" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="1080" />
|
||||||
|
<option name="screenY" value="2400" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="samsung" />
|
||||||
|
<option name="codename" value="q5q" />
|
||||||
|
<option name="id" value="q5q" />
|
||||||
|
<option name="manufacturer" value="Samsung" />
|
||||||
|
<option name="name" value="Galaxy Z Fold5" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="1812" />
|
||||||
|
<option name="screenY" value="2176" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="samsung" />
|
||||||
|
<option name="codename" value="q6q" />
|
||||||
|
<option name="id" value="q6q" />
|
||||||
|
<option name="manufacturer" value="Samsung" />
|
||||||
|
<option name="name" value="SM-F956B" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="1856" />
|
||||||
|
<option name="screenY" value="2160" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="30" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="r11" />
|
||||||
|
<option name="id" value="r11" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel Watch" />
|
||||||
|
<option name="screenDensity" value="320" />
|
||||||
|
<option name="screenX" value="384" />
|
||||||
|
<option name="screenY" value="384" />
|
||||||
|
<option name="type" value="WEAR_OS" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="30" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="redfin" />
|
||||||
|
<option name="id" value="redfin" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel 5" />
|
||||||
|
<option name="screenDensity" value="440" />
|
||||||
|
<option name="screenX" value="1080" />
|
||||||
|
<option name="screenY" value="2340" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="shiba" />
|
||||||
|
<option name="id" value="shiba" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel 8" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="1080" />
|
||||||
|
<option name="screenY" value="2400" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="33" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="tangorpro" />
|
||||||
|
<option name="id" value="tangorpro" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel Tablet" />
|
||||||
|
<option name="screenDensity" value="320" />
|
||||||
|
<option name="screenX" value="1600" />
|
||||||
|
<option name="screenY" value="2560" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
<PersistentDeviceSelectionData>
|
||||||
|
<option name="api" value="34" />
|
||||||
|
<option name="brand" value="google" />
|
||||||
|
<option name="codename" value="tokay" />
|
||||||
|
<option name="id" value="tokay" />
|
||||||
|
<option name="manufacturer" value="Google" />
|
||||||
|
<option name="name" value="Pixel 9" />
|
||||||
|
<option name="screenDensity" value="420" />
|
||||||
|
<option name="screenX" value="1080" />
|
||||||
|
<option name="screenY" value="2424" />
|
||||||
|
</PersistentDeviceSelectionData>
|
||||||
|
</list>
|
||||||
|
</option>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -1,6 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="CompilerConfiguration">
|
<component name="CompilerConfiguration">
|
||||||
<bytecodeTargetLevel target="17" />
|
<bytecodeTargetLevel target="21" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
10
sdl-android-project/.idea/deploymentTargetSelector.xml
Normal file
10
sdl-android-project/.idea/deploymentTargetSelector.xml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project version="4">
|
||||||
|
<component name="deploymentTargetSelector">
|
||||||
|
<selectionStates>
|
||||||
|
<SelectionState runConfigName="app">
|
||||||
|
<option name="selectionMode" value="DROPDOWN" />
|
||||||
|
</SelectionState>
|
||||||
|
</selectionStates>
|
||||||
|
</component>
|
||||||
|
</project>
|
|
@ -5,7 +5,7 @@
|
||||||
<option name="linkedExternalProjectsSettings">
|
<option name="linkedExternalProjectsSettings">
|
||||||
<GradleProjectSettings>
|
<GradleProjectSettings>
|
||||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
|
<option name="gradleJvm" value="temurin-21" />
|
||||||
<option name="modules">
|
<option name="modules">
|
||||||
<set>
|
<set>
|
||||||
<option value="$PROJECT_DIR$" />
|
<option value="$PROJECT_DIR$" />
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
||||||
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
|
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="temurin-21" project-jdk-type="JavaSDK">
|
||||||
<output url="file://$PROJECT_DIR$/build/classes" />
|
<output url="file://$PROJECT_DIR$/build/classes" />
|
||||||
</component>
|
</component>
|
||||||
<component name="ProjectType">
|
<component name="ProjectType">
|
||||||
|
|
|
@ -25,19 +25,12 @@ android {
|
||||||
standardOutput revListStdout
|
standardOutput revListStdout
|
||||||
}
|
}
|
||||||
def revParseStdout = new ByteArrayOutputStream();
|
def revParseStdout = new ByteArrayOutputStream();
|
||||||
def versionNameData = ""
|
|
||||||
exec {
|
exec {
|
||||||
commandLine "git", "rev-parse", "--abbrev-rev", "HEAD"
|
commandLine "./app/jni/version.sh"
|
||||||
standardOutput revParseStdout
|
|
||||||
}
|
|
||||||
versionNameData = revParseStdout.toString() + "-"
|
|
||||||
revParseStdout = new ByteArrayOutputStream()
|
|
||||||
exec {
|
|
||||||
commandLine "git", "rev-parse", "--short", "HEAD"
|
|
||||||
standardOutput revParseStdout
|
standardOutput revParseStdout
|
||||||
}
|
}
|
||||||
versionCode revListStdout.toString() as Integer
|
versionCode revListStdout.toString() as Integer
|
||||||
versionName versionNameData + revParseStdout.toString()
|
versionName revParseStdout.toString()
|
||||||
externalNativeBuild {
|
externalNativeBuild {
|
||||||
cmake {
|
cmake {
|
||||||
arguments "-DUSE_GLES=ON", "-DUSE_PORTALS=OFF", "-DDOWNLOAD_AUDIO_CODECS_DEPENDENCY=ON", "-DENABLE_DBUS=OFF", "-DBUILD_SDL=ON", "-DBUILD_SDL_IMAGE=ON", "-DDISABLE_GTK_UI=ON", "-DDISABLE_IMGUI_UI=OFF"
|
arguments "-DUSE_GLES=ON", "-DUSE_PORTALS=OFF", "-DDOWNLOAD_AUDIO_CODECS_DEPENDENCY=ON", "-DENABLE_DBUS=OFF", "-DBUILD_SDL=ON", "-DBUILD_SDL_IMAGE=ON", "-DDISABLE_GTK_UI=ON", "-DDISABLE_IMGUI_UI=OFF"
|
||||||
|
|
|
@ -6,7 +6,7 @@ buildscript {
|
||||||
google()
|
google()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:8.3.2'
|
classpath 'com.android.tools.build:gradle:8.6.1'
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#Thu Nov 11 18:20:34 PST 2021
|
#Thu Nov 11 18:20:34 PST 2021
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.4-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|
|
@ -1,2 +1,2 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
git describe --tags --all | tr -d '\n'
|
printf "%s-%s" "$(git rev-parse --abbrev-ref HEAD)" "$(git rev-parse --short HEAD)"
|
Loading…
Reference in a new issue