mirror of
https://github.com/lindbergh-loader/lindbergh-loader.git
synced 2026-10-14 01:49:12 +03:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a68dcbbdcf | ||
|
|
75642e285e | ||
|
|
d9d076f120 | ||
|
|
a5633bbf1d | ||
|
|
d72ac379ea | ||
|
|
c5c44ce395 | ||
|
|
988a9ee6e3 | ||
|
|
ea19a688cc | ||
|
|
c5fa5871d1 | ||
|
|
5be9aef4e0 | ||
|
|
f89f8e41ab | ||
|
|
ad085a1610 | ||
|
|
edba8bac7a | ||
|
|
98c6b740fd | ||
|
|
32d7347282 | ||
|
|
d500a5b80d | ||
|
|
e9390c85fa | ||
|
|
412d19e5f9 | ||
|
|
a374dec081 | ||
|
|
d1c98e6a7f | ||
|
|
1ade940d2f | ||
|
|
2e2a2b4052 | ||
|
|
23152f5788 | ||
|
|
efe34307e3 | ||
|
|
11b657e961 | ||
|
|
5ea59a05fd |
@@ -3,15 +3,19 @@ name: Automated Builds
|
|||||||
on:
|
on:
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
pull_request:
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '**.md'
|
- '**.md'
|
||||||
- '.github/ISSUE_TEMPLATE/*'
|
- '.github/ISSUE_TEMPLATE/*'
|
||||||
|
- '.docs/changelog'
|
||||||
push:
|
push:
|
||||||
branches:
|
branches:
|
||||||
- master
|
- master
|
||||||
paths-ignore:
|
paths-ignore:
|
||||||
- '**.md'
|
- '**.md'
|
||||||
- '.github/ISSUE_TEMPLATE/*'
|
- '.github/ISSUE_TEMPLATE/*'
|
||||||
|
- '.docs/changelog'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
linux-build:
|
linux-build:
|
||||||
|
|||||||
@@ -1,7 +1,32 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
## [2.0.10]
|
||||||
|
### Added
|
||||||
|
- Config option to specify a path for the library libCg.so required for some shader compilation.
|
||||||
|
- Improved folder patching for recompiled shaders (2Spicy, Rambo, Harly and HOD-EX).
|
||||||
|
- Cleaned a bit of lindbergh elf.
|
||||||
|
|
||||||
|
## [2.0.9]
|
||||||
|
- lindbergh elf mostly redone to make the loader work as a stand alone mode (read guide.md).
|
||||||
|
|
||||||
|
## [2.0.8]
|
||||||
|
### Added
|
||||||
|
- Changed preprocessor for avoiding multiple inclusions to #pragma once and clean some includes.
|
||||||
|
### Fixed
|
||||||
|
- Test mode in HOD4 SP now stretches.
|
||||||
|
|
||||||
|
## [2.0.7]
|
||||||
|
### Added
|
||||||
|
- Option -g | --gamepath to lindbergh to point to games in a different folder.
|
||||||
|
- lindbergh elf searches for lindbergh.so in common library folders ("/usr/lib/i386-linux-gnu", "/usr/lib32", etc).
|
||||||
|
- Improved Distro detection function to inform that the Distro is not based on Debian.
|
||||||
|
|
||||||
|
## [2.0.6]
|
||||||
|
### Fixed
|
||||||
|
- Reverted (Fixed LGJ, VT3 and ID4/ID5 JVS passthrough).
|
||||||
|
- Outrun 2 High Scores.
|
||||||
|
|
||||||
## [2.0.5]
|
## [2.0.5]
|
||||||
### Fixed
|
### Fixed
|
||||||
- Fixed LGJ, VT3 and ID4/ID5 JVS passthrough.
|
- Fixed LGJ, VT3 and ID4/ID5 JVS passthrough.
|
||||||
|
|||||||
@@ -224,3 +224,47 @@ flatpak install com.github.tchx84.Flatseal
|
|||||||
```
|
```
|
||||||
|
|
||||||
Then, run Flatseal and grant Lindbergh Loader access to additional directories.
|
Then, run Flatseal and grant Lindbergh Loader access to additional directories.
|
||||||
|
|
||||||
|
### Stand alone mode
|
||||||
|
|
||||||
|
Now, you have the option to run the games without copying any files to the game's folder.
|
||||||
|
Your system's 32 bit library folder, your current folder and the game's folder will be added to LD_LIBRARY_PATH env variable,
|
||||||
|
so you can han the loader libs in any of those locations.
|
||||||
|
|
||||||
|
Passing -c option you can specify the location of the .conf file like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
./lindbergh -c /my/custom/folder/myconfig.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
## -g or --gamepath
|
||||||
|
With this new option, you can specify the location of the game, where the game's ELF resides.
|
||||||
|
|
||||||
|
```
|
||||||
|
./lindbergh -g /my/custom/folder/hod4/elf
|
||||||
|
```
|
||||||
|
|
||||||
|
The loader will search for known elf files in that folder but you can also run it like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
./lindbergh myCustom.elf -g /my/custom/folder/hod4/elf
|
||||||
|
```
|
||||||
|
|
||||||
|
The loader will load `myCustom.elf` inside the passed folder.
|
||||||
|
|
||||||
|
## Passing a folder containing an elf
|
||||||
|
With this option, you pass a full path, including an ELF name like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
./lindbergh /my/custom/folder/hod4/elf/myCustom.elf
|
||||||
|
```
|
||||||
|
|
||||||
|
The loader will load the ELF in that folder.
|
||||||
|
|
||||||
|
You can combine all options.
|
||||||
|
|
||||||
|
You can have the needed libraries in the folder where `lindbergh` resides, in the system's 32 bit lib folder or in the game's folder.
|
||||||
|
The loader will try to find the files.
|
||||||
|
|
||||||
|
If by mistake, you pass both, a full path including an ELF and a path with -g option, the path passed with -g option will be omitted.
|
||||||
|
Remember that if the path containg spaces, which is not recommended, pass the path inside double quotes or `\` before the space.
|
||||||
|
|||||||
@@ -72,6 +72,10 @@ EMULATE_CARDREADER AUTO
|
|||||||
# Define the path to the eeprom.bin file
|
# Define the path to the eeprom.bin file
|
||||||
# EEPROM_PATH eeprom.bin
|
# EEPROM_PATH eeprom.bin
|
||||||
|
|
||||||
|
# If set, the library libCG.so needed for 2Spicy, Harley, Rambo and HOD-Ex shader recompilation
|
||||||
|
# will be loaded from the specifyied location. (include the name of file in the location)
|
||||||
|
# LIBCG_PATH /my/file/location/myLibCg.so
|
||||||
|
|
||||||
# Set the GPU vendor (0 = Autodetect / 1 = NVidia / 2 = AMD / 3 = ATI(AMD-PRO) / 4 = Intel / 5 = Unknown)
|
# Set the GPU vendor (0 = Autodetect / 1 = NVidia / 2 = AMD / 3 = ATI(AMD-PRO) / 4 = Intel / 5 = Unknown)
|
||||||
# GPU_VENDOR 0
|
# GPU_VENDOR 0
|
||||||
|
|
||||||
|
|||||||
@@ -1,28 +1,27 @@
|
|||||||
app-id: com.github.lindberghloader
|
app-id: com.github.lindberghloader
|
||||||
runtime: org.freedesktop.Platform
|
runtime: org.freedesktop.Platform
|
||||||
runtime-version: &runtime-version '24.08'
|
runtime-version: &runtime-version '24.08'
|
||||||
x-gl-version: &gl-version '1.4'
|
|
||||||
x-gl-versions: &gl-versions 24.08;1.4
|
|
||||||
x-gl-merge-dirs: &gl-merge-dirs vulkan/icd.d;glvnd/egl_vendor.d;egl/egl_external_platform.d;OpenCL/vendors;lib/dri;lib/d3d;lib/gbm;vulkan/explicit_layer.d;vulkan/implicit_layer.d
|
|
||||||
sdk: org.freedesktop.Sdk
|
sdk: org.freedesktop.Sdk
|
||||||
|
|
||||||
|
x-gl-versions: &gl-versions '24.08;1.4'
|
||||||
|
x-gl-merge-dirs: &gl-merge-dirs vulkan/icd.d;glvnd/egl_vendor.d;egl/egl_external_platform.d;OpenCL/vendors;lib/dri;lib/d3d;lib/gbm;vulkan/explicit_layer.d;vulkan/implicit_layer.d # Define GL merge dirs alias
|
||||||
|
x-i386-build-options: &i386-build-options
|
||||||
|
libdir: /app/lib32
|
||||||
|
env:
|
||||||
|
CC: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc
|
||||||
|
CXX: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-g++
|
||||||
|
LD: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-ld
|
||||||
|
LDFLAGS: "-L/app/lib32"
|
||||||
|
|
||||||
command: lindbergh
|
command: lindbergh
|
||||||
|
|
||||||
|
# SDK extensions needed for building 32-bit components
|
||||||
sdk-extensions:
|
sdk-extensions:
|
||||||
- org.freedesktop.Sdk.Extension.toolchain-i386
|
- org.freedesktop.Sdk.Extension.toolchain-i386
|
||||||
- org.freedesktop.Sdk.Compat.i386
|
- org.freedesktop.Sdk.Compat.i386
|
||||||
|
|
||||||
x-arch-build-options:
|
|
||||||
i386: &i386-build-options
|
|
||||||
libdir: /app/lib32
|
|
||||||
env:
|
|
||||||
CC: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc
|
|
||||||
CXX: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-g++
|
|
||||||
LD: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-ld
|
|
||||||
LDFLAGS: "-L/app/lib32"
|
|
||||||
|
|
||||||
finish-args:
|
finish-args:
|
||||||
- --env=LD_LIBRARY_PATH=/app/lib32:$LD_LIBRARY_PATH
|
- --env=LD_LIBRARY_PATH=/app/lib32:$LD_LIBRARY_PATH
|
||||||
- --env=LDFLAGS="-L/app/lib32"
|
|
||||||
- --env=PATH=/app/bin:/usr/bin
|
- --env=PATH=/app/bin:/usr/bin
|
||||||
- --allow=multiarch
|
- --allow=multiarch
|
||||||
- --share=ipc
|
- --share=ipc
|
||||||
@@ -33,23 +32,17 @@ finish-args:
|
|||||||
- --socket=pulseaudio
|
- --socket=pulseaudio
|
||||||
- --filesystem=~/Games
|
- --filesystem=~/Games
|
||||||
|
|
||||||
|
# Runtime extensions automatically downloaded and installed with the app (For some reason does not work)
|
||||||
add-extensions:
|
add-extensions:
|
||||||
org.freedesktop.Platform.Compat.i386:
|
org.freedesktop.Platform.Compat.i386:
|
||||||
directory: lib/i386-linux-gnu
|
directory: lib/i386-linux-gnu
|
||||||
version: *runtime-version
|
version: *runtime-version
|
||||||
no-autodownload: true
|
|
||||||
|
# 32-bit graphics driver extension
|
||||||
org.freedesktop.Platform.Compat.i386.Debug:
|
|
||||||
directory: lib/debug/lib/i386-linux-gnu
|
|
||||||
version: *runtime-version
|
|
||||||
no-autodownload: true
|
|
||||||
|
|
||||||
org.freedesktop.Platform.GL32:
|
org.freedesktop.Platform.GL32:
|
||||||
directory: lib/i386-linux-gnu/GL
|
directory: lib/i386-linux-gnu/GL
|
||||||
version: *gl-version
|
versions: *gl-versions
|
||||||
versions: *gl-versions
|
|
||||||
subdirectories: true
|
subdirectories: true
|
||||||
no-autodownload: true
|
|
||||||
autodelete: false
|
autodelete: false
|
||||||
add-ld-path: lib
|
add-ld-path: lib
|
||||||
merge-dirs: *gl-merge-dirs
|
merge-dirs: *gl-merge-dirs
|
||||||
@@ -57,17 +50,8 @@ add-extensions:
|
|||||||
enable-if: active-gl-driver
|
enable-if: active-gl-driver
|
||||||
autoprune-unless: active-gl-driver
|
autoprune-unless: active-gl-driver
|
||||||
|
|
||||||
org.freedesktop.Platform.GL32.Debug:
|
|
||||||
directory: lib/debug/lib/i386-linux-gnu/GL
|
|
||||||
version: *gl-version
|
|
||||||
versions: *gl-versions
|
|
||||||
subdirectories: true
|
|
||||||
no-autodownload: true
|
|
||||||
merge-dirs: *gl-merge-dirs
|
|
||||||
enable-if: active-gl-driver
|
|
||||||
autoprune-unless: active-gl-driver
|
|
||||||
|
|
||||||
modules:
|
modules:
|
||||||
|
# Pre-built 32-bit library (if required)
|
||||||
- name: libstdcxx5
|
- name: libstdcxx5
|
||||||
buildsystem: simple
|
buildsystem: simple
|
||||||
build-commands:
|
build-commands:
|
||||||
@@ -77,6 +61,7 @@ modules:
|
|||||||
- type: file
|
- type: file
|
||||||
path: ./assets/libstdc++.so.5
|
path: ./assets/libstdc++.so.5
|
||||||
|
|
||||||
|
# Build 32-bit libGLU
|
||||||
- name: libGLU
|
- name: libGLU
|
||||||
buildsystem: autotools
|
buildsystem: autotools
|
||||||
config-opts:
|
config-opts:
|
||||||
@@ -90,11 +75,13 @@ modules:
|
|||||||
url: https://mesa.freedesktop.org/archive/glu/glu-9.0.2.tar.xz
|
url: https://mesa.freedesktop.org/archive/glu/glu-9.0.2.tar.xz
|
||||||
sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4
|
sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4
|
||||||
|
|
||||||
|
# Build 32-bit freeglut
|
||||||
- name: freeglut
|
- name: freeglut
|
||||||
buildsystem: cmake
|
buildsystem: cmake
|
||||||
config-opts:
|
config-opts:
|
||||||
- -DCMAKE_BUILD_TYPE=Release
|
- -DCMAKE_BUILD_TYPE=Release
|
||||||
- -DCMAKE_INSTALL_PREFIX=/app
|
- -DCMAKE_INSTALL_PREFIX=/app
|
||||||
|
- -DCMAKE_INSTALL_LIBDIR=/app/lib32
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
url: https://downloads.sourceforge.net/freeglut/freeglut-3.2.2.tar.gz
|
url: https://downloads.sourceforge.net/freeglut/freeglut-3.2.2.tar.gz
|
||||||
@@ -103,6 +90,7 @@ modules:
|
|||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
|
# Build 32-bit libFAudio (dynamic)
|
||||||
- name: libFAudio-Dynamic
|
- name: libFAudio-Dynamic
|
||||||
buildsystem: cmake-ninja
|
buildsystem: cmake-ninja
|
||||||
config-opts:
|
config-opts:
|
||||||
@@ -121,28 +109,25 @@ modules:
|
|||||||
url: https://github.com/FNA-XNA/FAudio.git
|
url: https://github.com/FNA-XNA/FAudio.git
|
||||||
tag: "24.12"
|
tag: "24.12"
|
||||||
|
|
||||||
|
# Build 32-bit libXmu
|
||||||
- name: libxmu
|
- name: libxmu
|
||||||
buildsystem: autotools
|
buildsystem: autotools
|
||||||
config-opts:
|
config-opts:
|
||||||
- --libdir=/app/lib32
|
- --prefix=/app
|
||||||
- --with-shared
|
- --with-shared
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
url: https://xorg.freedesktop.org/releases/individual/lib/libXmu-1.2.1.tar.gz
|
url: https://xorg.freedesktop.org/releases/individual/lib/libXmu-1.2.1.tar.gz
|
||||||
sha256: bf0902583dd1123856c11e0a5085bd3c6e9886fbbd44954464975fd7d52eb599
|
sha256: bf0902583dd1123856c11e0a5085bd3c6e9886fbbd44954464975fd7d52eb599
|
||||||
build-options:
|
build-options:
|
||||||
# arch:
|
arch:
|
||||||
# x86_64: *i386-build-options
|
x86_64: *i386-build-options
|
||||||
env:
|
|
||||||
CC: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc
|
|
||||||
CXX: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-g++
|
|
||||||
LD: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-ld
|
|
||||||
libdir: /app/lib32
|
|
||||||
|
|
||||||
|
# Build 32-bit libmd
|
||||||
- name: libmd
|
- name: libmd
|
||||||
buildsystem: autotools
|
buildsystem: autotools
|
||||||
config-opts:
|
config-opts:
|
||||||
- --libdir=/app/lib32
|
- --prefix=/app
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
url: https://archive.hadrons.org/software/libmd/libmd-1.1.0.tar.xz
|
url: https://archive.hadrons.org/software/libmd/libmd-1.1.0.tar.xz
|
||||||
@@ -151,10 +136,11 @@ modules:
|
|||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
|
# Build 32-bit libbsd
|
||||||
- name: libbsd
|
- name: libbsd
|
||||||
buildsystem: autotools
|
buildsystem: autotools
|
||||||
config-opts:
|
config-opts:
|
||||||
- --libdir=/app/lib32
|
- --prefix=/app
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
url: https://libbsd.freedesktop.org/releases/libbsd-0.12.2.tar.xz
|
url: https://libbsd.freedesktop.org/releases/libbsd-0.12.2.tar.xz
|
||||||
@@ -163,10 +149,11 @@ modules:
|
|||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
|
# Build 32-bit ncurses (very old version)
|
||||||
- name: ncurses
|
- name: ncurses
|
||||||
buildsystem: autotools
|
buildsystem: autotools
|
||||||
config-opts:
|
config-opts:
|
||||||
- --libdir=/app/lib32
|
- --prefix=/app
|
||||||
- --with-shared
|
- --with-shared
|
||||||
- --without-debug
|
- --without-debug
|
||||||
sources:
|
sources:
|
||||||
@@ -181,7 +168,8 @@ modules:
|
|||||||
env:
|
env:
|
||||||
CPPFLAGS: "-P"
|
CPPFLAGS: "-P"
|
||||||
CXXFLAGS: "-std=c++14"
|
CXXFLAGS: "-std=c++14"
|
||||||
|
|
||||||
|
# Install pre-built 32-bit Nvidia Cg Toolkit (old)
|
||||||
- name: nvidia-cg-toolkit
|
- name: nvidia-cg-toolkit
|
||||||
buildsystem: simple
|
buildsystem: simple
|
||||||
build-commands:
|
build-commands:
|
||||||
@@ -192,10 +180,11 @@ modules:
|
|||||||
url: http://developer.download.nvidia.com/cg/Cg_3.1/Cg-3.1_April2012_x86.tgz
|
url: http://developer.download.nvidia.com/cg/Cg_3.1/Cg-3.1_April2012_x86.tgz
|
||||||
sha256: cef3591e436f528852db0e8c145d3842f920e0c89bcfb219c466797cb7b18879
|
sha256: cef3591e436f528852db0e8c145d3842f920e0c89bcfb219c466797cb7b18879
|
||||||
|
|
||||||
|
# Build 32-bit libsndio (dynamic)
|
||||||
- name: libsndio-dynamic
|
- name: libsndio-dynamic
|
||||||
buildsystem: autotools
|
buildsystem: autotools
|
||||||
config-opts:
|
config-opts:
|
||||||
- --libdir=/app/lib32
|
- --prefix=/app
|
||||||
- --enable-dynamic
|
- --enable-dynamic
|
||||||
- --enable-alsa
|
- --enable-alsa
|
||||||
sources:
|
sources:
|
||||||
@@ -206,23 +195,11 @@ modules:
|
|||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
- name: libsndio-static
|
# Build 32-bit libopenal (old version)
|
||||||
buildsystem: autotools
|
|
||||||
config-opts:
|
|
||||||
- --libdir=/app/lib32
|
|
||||||
- --enable-static
|
|
||||||
- --enable-alsa
|
|
||||||
sources:
|
|
||||||
- type: archive
|
|
||||||
url: https://www.sndio.org/sndio-1.10.0.tar.gz
|
|
||||||
sha256: bebd3bfd01c50c9376cf3e7814b9379bed9e17d0393b5113b7eb7a3d0d038c54
|
|
||||||
build-options:
|
|
||||||
arch:
|
|
||||||
x86_64: *i386-build-options
|
|
||||||
|
|
||||||
- name: libopenal
|
- name: libopenal
|
||||||
buildsystem: cmake
|
buildsystem: cmake
|
||||||
config-opts:
|
config-opts:
|
||||||
|
- -DCMAKE_INSTALL_PREFIX=/app
|
||||||
- -DCMAKE_INSTALL_LIBDIR=/app/lib32
|
- -DCMAKE_INSTALL_LIBDIR=/app/lib32
|
||||||
- -DALSOFT_BACKEND_PULSEAUDIO=ON
|
- -DALSOFT_BACKEND_PULSEAUDIO=ON
|
||||||
- -DALSOFT_BACKEND_ALSA=ON
|
- -DALSOFT_BACKEND_ALSA=ON
|
||||||
@@ -241,22 +218,24 @@ modules:
|
|||||||
CFLAGS: "-m32 -mstackrealign"
|
CFLAGS: "-m32 -mstackrealign"
|
||||||
CXXFLAGS: "-m32 -std=c++14 -mstackrealign"
|
CXXFLAGS: "-m32 -std=c++14 -mstackrealign"
|
||||||
|
|
||||||
|
# Build 32-bit OpenSSL (extremely old and insecure version)
|
||||||
- name: openssl
|
- name: openssl
|
||||||
buildsystem: simple
|
buildsystem: simple
|
||||||
build-commands:
|
build-commands:
|
||||||
- ./Configure --prefix=/app --openssldir=/app/etc/ssl shared 386 no-asm no-krb5 linux-pentium
|
- ./Configure --prefix=/app --openssldir=/app/etc/ssl shared 386 no-asm no-krb5 linux-pentium
|
||||||
- make CC=/usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc RANLIB=/usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-ranlib
|
- make CC=/usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc RANLIB=/usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-ranlib
|
||||||
- mv libcrypto.* /app/lib32
|
- install -d /app/lib32
|
||||||
- mv libssl.* /app/lib32
|
- mv libcrypto.so* /app/lib32/
|
||||||
|
- mv libssl.so* /app/lib32/
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
url: https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_0_9_7.tar.gz
|
url: https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_0_9_7.tar.gz
|
||||||
sha256: 14e3a90f75994689e8c1bef098a97021f225a1a1623a7b8012079bd8b2eca1e8
|
sha256: 14e3a90f75994689e8c1bef098a97021f225a1a1623a7b8012079bd8b2eca1e8
|
||||||
|
|
||||||
|
# Build 32-bit libpcsclite
|
||||||
- name: libpcsclite
|
- name: libpcsclite
|
||||||
buildsystem: meson
|
buildsystem: meson
|
||||||
config-opts:
|
config-opts:
|
||||||
- --libdir=/app/lib32
|
|
||||||
- -Dpolkit=false
|
- -Dpolkit=false
|
||||||
- -Dlibsystemd=false
|
- -Dlibsystemd=false
|
||||||
build-options:
|
build-options:
|
||||||
@@ -265,20 +244,19 @@ modules:
|
|||||||
env:
|
env:
|
||||||
CFLAGS: "-m32"
|
CFLAGS: "-m32"
|
||||||
CXXFLAGS: "-m32"
|
CXXFLAGS: "-m32"
|
||||||
LDFLAGS: "-m32"
|
LDFLAGS: "-m32 -L/app/lib32"
|
||||||
PKG_CONFIG_PATH: "/app/lib32/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig"
|
PKG_CONFIG_PATH: "/app/lib32/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/sdk/toolchain-i386/lib/pkgconfig"
|
||||||
LD_LIBRARY_PATH: "/app/lib32:/usr/lib/i386-linux-gnu/pkgconfig:$LD_LIBRARY_PATH"
|
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
url: https://pcsclite.apdu.fr/files/pcsc-lite-2.3.1.tar.xz
|
url: https://pcsclite.apdu.fr/files/pcsc-lite-2.3.1.tar.xz
|
||||||
sha256: a641d44d57affe1edd8365dd75307afc307e7eefb4e7ad839f6f146baa41ed56
|
sha256: a641d44d57affe1edd8365dd75307afc307e7eefb4e7ad839f6f146baa41ed56
|
||||||
|
|
||||||
|
# Build the main application (lindbergh-loader)
|
||||||
- name: lindbergh-loader
|
- name: lindbergh-loader
|
||||||
buildsystem: simple
|
buildsystem: simple
|
||||||
build-commands:
|
build-commands:
|
||||||
- export LD_LIBRARY_PATH=/app/lib32:$LD_LIBRARY_PATH
|
- export LD_LIBRARY_PATH=/app/lib32:$LD_LIBRARY_PATH
|
||||||
- make
|
- make -j$(nproc)
|
||||||
- mkdir -p /app/bin
|
|
||||||
- mkdir -p /app/lib/i386-linux-gnu
|
- mkdir -p /app/lib/i386-linux-gnu
|
||||||
- mkdir -p /app/lib/i386-linux-gnu/GL
|
- mkdir -p /app/lib/i386-linux-gnu/GL
|
||||||
- install -Dm755 ./build/lindbergh /app/bin/
|
- install -Dm755 ./build/lindbergh /app/bin/
|
||||||
@@ -287,11 +265,11 @@ modules:
|
|||||||
- install -Dm755 ./build/libkswapapi.so /app/lib32/
|
- install -Dm755 ./build/libkswapapi.so /app/lib32/
|
||||||
- install -Dm755 ./build/libposixtime.so /app/lib32/
|
- install -Dm755 ./build/libposixtime.so /app/lib32/
|
||||||
- install -Dm755 ./libs/libCg.so /app/lib32/libCg2.so
|
- install -Dm755 ./libs/libCg.so /app/lib32/libCg2.so
|
||||||
- ln -s -f libposixtime.so /app/lib32/libposixtime.so.1
|
- ln -sf libposixtime.so /app/lib32/libposixtime.so.1
|
||||||
- ln -s -f libposixtime.so /app/lib32/libposixtime.so.2.4
|
- ln -sf libposixtime.so /app/lib32/libposixtime.so.2.4
|
||||||
- ln -s -f libopenal.so /app/lib32/libopenal.so.0
|
- ln -sf libopenal.so.1 /app/lib32/libopenal.so.0
|
||||||
- ln -s -f libkswapapi.so /app/lib32/libGLcore.so.1
|
- ln -sf libkswapapi.so /app/lib32/libGLcore.so.1
|
||||||
- ln -s -f libkswapapi.so /app/lib32/libnvidia-tls.so.1
|
- ln -sf libkswapapi.so /app/lib32/libnvidia-tls.so.1
|
||||||
- mv /app/lib/libopenal* /app/lib32/
|
- mv /app/lib/libopenal* /app/lib32/
|
||||||
build-options:
|
build-options:
|
||||||
arch:
|
arch:
|
||||||
@@ -300,6 +278,7 @@ modules:
|
|||||||
- type: dir
|
- type: dir
|
||||||
path: ../..
|
path: ../..
|
||||||
|
|
||||||
|
# Setup dynamic linker configuration
|
||||||
- name: bundle-setup
|
- name: bundle-setup
|
||||||
buildsystem: simple
|
buildsystem: simple
|
||||||
build-commands:
|
build-commands:
|
||||||
@@ -308,16 +287,18 @@ modules:
|
|||||||
- type: file
|
- type: file
|
||||||
path: ./assets/ld.so.conf
|
path: ./assets/ld.so.conf
|
||||||
|
|
||||||
|
# Cleanup unnecessary files to reduce final flatpak size
|
||||||
- name: cleanup
|
- name: cleanup
|
||||||
buildsystem: simple
|
buildsystem: simple
|
||||||
build-commands:
|
build-commands:
|
||||||
- find /app/lib /app/lib32 -name '*.a' -type f -delete
|
- find /app/lib32 -name '*.a' -type f -delete
|
||||||
- find /app/lib /app/lib32 -name '*.la' -type f -delete
|
- find /app/lib32 -name '*.la' -type f -delete
|
||||||
- find /app/bin -mindepth 1 ! -name "lindbergh*" -exec rm -f {} \;
|
- find /app/bin -mindepth 1 ! -name "lindbergh" -exec rm -f {} \;
|
||||||
- rm -d /app/lib/terminfo
|
- rm -rf /app/lib/pkgconfig /app/lib32/pkgconfig /app/share/pkgconfig
|
||||||
- rm -rf /app/lib/pkgconfig /app/lib32/pkgconfig /app/share/pkgconfig /app/lib32/cmake /app/lib/debug /app/include /app/man /app/share
|
- rm -rf /app/lib32/cmake /app/lib/debug /app/include /app/man /app/share /app/etc/bash_completion.d
|
||||||
- rm /app/lib32/libmenu.*
|
- rm -f /app/lib32/libmenu.so*
|
||||||
- rm /app/lib32/libform.*
|
- rm -f /app/lib32/libform.so*
|
||||||
- rm /app/lib32/libpanel.*
|
- rm -f /app/lib32/libpanel.so*
|
||||||
- rm /app/lib32/libXmuu.*
|
- rm -f /app/lib32/libXmuu.so*
|
||||||
- rm /app/lib32/libbsd.so
|
- rm -f /app/lib32/libbsd.so*
|
||||||
|
- rm -rf /app/lib/terminfo
|
||||||
|
|||||||
+183
-183
@@ -2,7 +2,6 @@
|
|||||||
#include <string.h> /* String function definitions */
|
#include <string.h> /* String function definitions */
|
||||||
#include <unistd.h> /* UNIX standard function definitions */
|
#include <unistd.h> /* UNIX standard function definitions */
|
||||||
#include <fcntl.h> /* File control definitions */
|
#include <fcntl.h> /* File control definitions */
|
||||||
#include <errno.h> /* Error number definitions */
|
|
||||||
#include <stdlib.h> /* Standard library functions like malloc, free, exit, and atoi */
|
#include <stdlib.h> /* Standard library functions like malloc, free, exit, and atoi */
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
|
|
||||||
@@ -30,10 +29,10 @@
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint32_t srcAddress;
|
uint32_t srcAddress;
|
||||||
uint32_t srcSize;
|
uint32_t srcSize;
|
||||||
uint32_t destAddress;
|
uint32_t destAddress;
|
||||||
uint32_t destSize;
|
uint32_t destSize;
|
||||||
} BaseboardCommand;
|
} BaseboardCommand;
|
||||||
|
|
||||||
BaseboardCommand jvsCommand = {0};
|
BaseboardCommand jvsCommand = {0};
|
||||||
@@ -41,16 +40,16 @@ BaseboardCommand serialCommand = {0};
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint32_t *data;
|
uint32_t *data;
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
} readData_t;
|
} readData_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
uint32_t *data;
|
uint32_t *data;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
} writeData_t;
|
} writeData_t;
|
||||||
|
|
||||||
FILE *sram = NULL;
|
FILE *sram = NULL;
|
||||||
@@ -64,224 +63,225 @@ int jvsPacketSize = -1;
|
|||||||
|
|
||||||
int initBaseboard()
|
int initBaseboard()
|
||||||
{
|
{
|
||||||
char *sramPath = getConfig()->sramPath;
|
char *sramPath = getConfig()->sramPath;
|
||||||
|
|
||||||
sram = fopen(sramPath, "a");
|
sram = fopen(sramPath, "a");
|
||||||
|
|
||||||
// Create file if it doesn't exist
|
// Create file if it doesn't exist
|
||||||
if (sram == NULL)
|
if (sram == NULL)
|
||||||
{
|
|
||||||
printf("Error: Cannot open %s\n", sramPath);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
fclose(sram);
|
|
||||||
sram = fopen(sramPath, "rb+");
|
|
||||||
fseek(sram, 0, SEEK_SET);
|
|
||||||
|
|
||||||
if (getConfig()->emulateJVS == 0 && strcmp(getConfig()->jvsPath, "none") != 0)
|
|
||||||
{
|
|
||||||
jvsFileDescriptor = openJVSSerial(getConfig()->jvsPath);
|
|
||||||
if (jvsFileDescriptor < 0)
|
|
||||||
{
|
{
|
||||||
printf("Error: Failed to open %s for JVS\n", getConfig()->jvsPath);
|
printf("Error: Cannot open %s\n", sramPath);
|
||||||
return -1;
|
return 1;
|
||||||
|
}
|
||||||
|
fclose(sram);
|
||||||
|
sram = fopen(sramPath, "rb+");
|
||||||
|
fseek(sram, 0, SEEK_SET);
|
||||||
|
|
||||||
|
if (getConfig()->emulateJVS == 0 && strcmp(getConfig()->jvsPath, "none") != 0)
|
||||||
|
{
|
||||||
|
jvsFileDescriptor = openJVSSerial(getConfig()->jvsPath);
|
||||||
|
if (jvsFileDescriptor < 0)
|
||||||
|
{
|
||||||
|
printf("Error: Failed to open %s for JVS\n", getConfig()->jvsPath);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
initJVSSerial(jvsFileDescriptor);
|
||||||
|
startJVSFrameThread(&jvsFileDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
initJVSSerial(jvsFileDescriptor);
|
return 0;
|
||||||
startJVSFrameThread(&jvsFileDescriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t baseboardRead(int fd, void *buf, size_t count)
|
ssize_t baseboardRead(int fd, void *buf, size_t count)
|
||||||
{
|
{
|
||||||
memcpy(buf, &sharedMemory[sharedMemoryIndex], count);
|
memcpy(buf, &sharedMemory[sharedMemoryIndex], count);
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t baseboardWrite(int fd, const void *buf, size_t count)
|
ssize_t baseboardWrite(int fd, const void *buf, size_t count)
|
||||||
{
|
{
|
||||||
memcpy(&sharedMemory[sharedMemoryIndex], buf, count);
|
memcpy(&sharedMemory[sharedMemoryIndex], buf, count);
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
int baseboardSelect(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict exceptfds, struct timeval *restrict timeout)
|
int baseboardSelect(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict exceptfds,
|
||||||
|
struct timeval *restrict timeout)
|
||||||
{
|
{
|
||||||
return selectReply;
|
return selectReply;
|
||||||
}
|
}
|
||||||
|
|
||||||
int baseboardIoctl(int fd, unsigned int request, void *data)
|
int baseboardIoctl(int fd, unsigned int request, void *data)
|
||||||
{
|
{
|
||||||
switch (request)
|
switch (request)
|
||||||
{
|
|
||||||
|
|
||||||
case BASEBOARD_GET_VERSION:
|
|
||||||
{
|
|
||||||
uint8_t versionData[4] = {0x00, 0x19, 0x20, 0x07};
|
|
||||||
memcpy(data, versionData, 4);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_INIT:
|
|
||||||
{
|
|
||||||
// selectReply = -1; Considering adding this in
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_READY: // Not sure if this is what it should be called
|
|
||||||
{
|
|
||||||
selectReply = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_SEEK_SHM:
|
|
||||||
{
|
|
||||||
sharedMemoryIndex = (unsigned int)data;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_READ_SRAM:
|
|
||||||
{
|
|
||||||
readData_t *_data = data;
|
|
||||||
fseek(sram, _data->offset, SEEK_SET);
|
|
||||||
fread(_data->data, 1, _data->size, sram);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_WRITE_SRAM:
|
|
||||||
{
|
|
||||||
writeData_t *_data = data;
|
|
||||||
fseek(sram, _data->offset, SEEK_SET);
|
|
||||||
fwrite(_data->data, 1, _data->size, sram);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_REQUEST:
|
|
||||||
{
|
|
||||||
uint32_t *_data = data;
|
|
||||||
|
|
||||||
switch (_data[0])
|
|
||||||
{
|
{
|
||||||
|
|
||||||
case BASEBOARD_GET_SERIAL: // bcCmdSysInfoGetReq
|
case BASEBOARD_GET_VERSION:
|
||||||
{
|
{
|
||||||
serialCommand.destAddress = _data[1];
|
uint8_t versionData[4] = {0x00, 0x19, 0x20, 0x07};
|
||||||
serialCommand.destSize = _data[2];
|
memcpy(data, versionData, 4);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BASEBOARD_WRITE_FLASH: // bcCmdSysFlashWrite
|
case BASEBOARD_INIT:
|
||||||
{
|
{
|
||||||
log_warn("The game attempted to write to the baseboard flash\n");
|
// selectReply = -1; Considering adding this in
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BASEBOARD_PROCESS_JVS:
|
case BASEBOARD_READY: // Not sure if this is what it should be called
|
||||||
{
|
{
|
||||||
jvsCommand.srcAddress = _data[1];
|
selectReply = 0;
|
||||||
jvsCommand.srcSize = _data[2];
|
return 0;
|
||||||
jvsCommand.destAddress = _data[3];
|
}
|
||||||
jvsCommand.destSize = _data[4];
|
break;
|
||||||
memcpy(inputBuffer, &sharedMemory[jvsCommand.srcAddress], jvsCommand.srcSize);
|
|
||||||
|
|
||||||
if (getConfig()->emulateJVS)
|
case BASEBOARD_SEEK_SHM:
|
||||||
{
|
{
|
||||||
processPacket(&jvsPacketSize);
|
sharedMemoryIndex = (unsigned int)data;
|
||||||
}
|
return 0;
|
||||||
else if (jvsFileDescriptor >= 0)
|
}
|
||||||
{
|
break;
|
||||||
for (int i = 0; i < jvsCommand.srcSize; i++)
|
|
||||||
|
case BASEBOARD_READ_SRAM:
|
||||||
|
{
|
||||||
|
readData_t *_data = data;
|
||||||
|
fseek(sram, _data->offset, SEEK_SET);
|
||||||
|
fread(_data->data, 1, _data->size, sram);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BASEBOARD_WRITE_SRAM:
|
||||||
|
{
|
||||||
|
writeData_t *_data = data;
|
||||||
|
fseek(sram, _data->offset, SEEK_SET);
|
||||||
|
fwrite(_data->data, 1, _data->size, sram);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BASEBOARD_REQUEST:
|
||||||
|
{
|
||||||
|
uint32_t *_data = data;
|
||||||
|
|
||||||
|
switch (_data[0])
|
||||||
{
|
{
|
||||||
write(jvsFileDescriptor, &inputBuffer[i], 1);
|
|
||||||
if (inputBuffer[i] == 0xF0)
|
case BASEBOARD_GET_SERIAL: // bcCmdSysInfoGetReq
|
||||||
{
|
{
|
||||||
setSenseLine(3);
|
serialCommand.destAddress = _data[1];
|
||||||
}
|
serialCommand.destSize = _data[2];
|
||||||
else if (inputBuffer[i] == 0xF1)
|
|
||||||
{
|
|
||||||
setSenseLine(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
|
|
||||||
|
case BASEBOARD_WRITE_FLASH: // bcCmdSysFlashWrite
|
||||||
|
{
|
||||||
|
log_warn("The game attempted to write to the baseboard flash\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BASEBOARD_PROCESS_JVS:
|
||||||
|
{
|
||||||
|
jvsCommand.srcAddress = _data[1];
|
||||||
|
jvsCommand.srcSize = _data[2];
|
||||||
|
jvsCommand.destAddress = _data[3];
|
||||||
|
jvsCommand.destSize = _data[4];
|
||||||
|
memcpy(inputBuffer, &sharedMemory[jvsCommand.srcAddress], jvsCommand.srcSize);
|
||||||
|
|
||||||
|
if (getConfig()->emulateJVS)
|
||||||
|
{
|
||||||
|
processPacket(&jvsPacketSize);
|
||||||
|
}
|
||||||
|
else if (jvsFileDescriptor >= 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < jvsCommand.srcSize; i++)
|
||||||
|
{
|
||||||
|
write(jvsFileDescriptor, &inputBuffer[i], 1);
|
||||||
|
if (inputBuffer[i] == 0xF0)
|
||||||
|
{
|
||||||
|
setSenseLine(3);
|
||||||
|
}
|
||||||
|
else if (inputBuffer[i] == 0xF1)
|
||||||
|
{
|
||||||
|
setSenseLine(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BASEBOARD_GET_SENSE_LINE:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf("Error: Unknown baseboard command %X\n", _data[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Acknowledge the command
|
||||||
|
_data[0] |= 0xF0000000;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BASEBOARD_GET_SENSE_LINE:
|
case BASEBOARD_RECEIVE:
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
printf("Error: Unknown baseboard command %X\n", _data[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Acknowledge the command
|
|
||||||
_data[0] |= 0xF0000000;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_RECEIVE:
|
|
||||||
{
|
|
||||||
uint32_t *_data = data;
|
|
||||||
|
|
||||||
switch (_data[0] & 0xFFF)
|
|
||||||
{
|
{
|
||||||
|
uint32_t *_data = data;
|
||||||
|
|
||||||
case BASEBOARD_GET_SERIAL:
|
switch (_data[0] & 0xFFF)
|
||||||
{
|
{
|
||||||
memcpy(&sharedMemory[serialCommand.destAddress + 96], SERIAL_STRING, strlen(SERIAL_STRING));
|
|
||||||
_data[1] = 1; // Set the status to success
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_GET_SENSE_LINE:
|
case BASEBOARD_GET_SERIAL:
|
||||||
{
|
{
|
||||||
_data[2] = getSenseLine();
|
memcpy(&sharedMemory[serialCommand.destAddress + 96], SERIAL_STRING, strlen(SERIAL_STRING));
|
||||||
_data[1] = 1; // Set the status to success
|
_data[1] = 1; // Set the status to success
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BASEBOARD_PROCESS_JVS:
|
case BASEBOARD_GET_SENSE_LINE:
|
||||||
{
|
{
|
||||||
if (getConfig()->emulateJVS)
|
_data[2] = getSenseLine();
|
||||||
{
|
_data[1] = 1; // Set the status to success
|
||||||
memcpy(&sharedMemory[jvsCommand.destAddress], outputBuffer, jvsPacketSize);
|
}
|
||||||
_data[2] = jvsCommand.destAddress;
|
break;
|
||||||
_data[3] = jvsPacketSize;
|
|
||||||
_data[1] = 1; // Set the status to success
|
case BASEBOARD_PROCESS_JVS:
|
||||||
}
|
{
|
||||||
else if (jvsFileDescriptor >= 0)
|
if (getConfig()->emulateJVS)
|
||||||
{
|
{
|
||||||
JVSFrame frame = readJVSFrameFromThread();
|
memcpy(&sharedMemory[jvsCommand.destAddress], outputBuffer, jvsPacketSize);
|
||||||
memcpy(&sharedMemory[jvsCommand.destAddress], frame.buffer, frame.size);
|
_data[2] = jvsCommand.destAddress;
|
||||||
_data[2] = jvsCommand.destAddress;
|
_data[3] = jvsPacketSize;
|
||||||
_data[3] = frame.size;
|
_data[1] = 1; // Set the status to success
|
||||||
_data[1] = frame.ready;
|
}
|
||||||
}
|
else if (jvsFileDescriptor >= 0)
|
||||||
|
{
|
||||||
|
JVSFrame frame = readJVSFrameFromThread();
|
||||||
|
memcpy(&sharedMemory[jvsCommand.destAddress], frame.buffer, frame.size);
|
||||||
|
_data[2] = jvsCommand.destAddress;
|
||||||
|
_data[3] = frame.size;
|
||||||
|
_data[1] = frame.ready;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf("Error: Unknown baseboard receive command %X\n", _data[0] & 0xFFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Acknowledge the command
|
||||||
|
_data[0] |= 0xF0000000;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("Error: Unknown baseboard receive command %X\n", _data[0] & 0xFFF);
|
printf("Error: Unknown baseboard ioctl %X\n", request);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Acknowledge the command
|
|
||||||
_data[0] |= 0xF0000000;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
printf("Error: Unknown baseboard ioctl %X\n", request);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef BORDER_H
|
#pragma once
|
||||||
#define BORDER_H
|
|
||||||
|
|
||||||
void drawGameBorder(int width, int height, float whiteBorderPercentage, float blackBorderPercentage);
|
void drawGameBorder(int width, int height, float whiteBorderPercentage, float blackBorderPercentage);
|
||||||
|
|
||||||
#endif // BORDER_H
|
|
||||||
@@ -76,10 +76,7 @@ int initCardReader()
|
|||||||
|
|
||||||
int carReaderGetFdIdx(int fd)
|
int carReaderGetFdIdx(int fd)
|
||||||
{
|
{
|
||||||
if (fd == serialFD[0].fd)
|
return (fd == serialFD[0].fd) ? 0 : 1;
|
||||||
return 0;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t cardReaderGenChecksum(int fdIdx)
|
uint8_t cardReaderGenChecksum(int fdIdx)
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#ifndef CARD_READER_H
|
#pragma once
|
||||||
#define CARD_READER_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@@ -32,5 +31,3 @@ int initCardReader();
|
|||||||
size_t cardReaderWrite(int fd, const void *buf, size_t count);
|
size_t cardReaderWrite(int fd, const void *buf, size_t count);
|
||||||
size_t cardReaderRead(int fd, void *buf, size_t count);
|
size_t cardReaderRead(int fd, void *buf, size_t count);
|
||||||
void cardReaderSetFd(int serial, int fd, char *fName);
|
void cardReaderSetFd(int serial, int fd, char *fName);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -174,6 +174,8 @@ static int detectGame(uint32_t elf_crc)
|
|||||||
config.gameStatus = WORKING;
|
config.gameStatus = WORKING;
|
||||||
config.jvsIOType = SEGA_TYPE_1;
|
config.jvsIOType = SEGA_TYPE_1;
|
||||||
config.gameType = ABC;
|
config.gameType = ABC;
|
||||||
|
config.width = 640;
|
||||||
|
config.height = 480;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -188,6 +190,8 @@ static int detectGame(uint32_t elf_crc)
|
|||||||
config.gameStatus = WORKING;
|
config.gameStatus = WORKING;
|
||||||
config.jvsIOType = SEGA_TYPE_1;
|
config.jvsIOType = SEGA_TYPE_1;
|
||||||
config.gameType = ABC;
|
config.gameType = ABC;
|
||||||
|
config.width = 640;
|
||||||
|
config.height = 480;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -249,6 +253,8 @@ static int detectGame(uint32_t elf_crc)
|
|||||||
config.gameNativeResolutions = "";
|
config.gameNativeResolutions = "";
|
||||||
config.gameType = DRIVING;
|
config.gameType = DRIVING;
|
||||||
config.gameStatus = WORKING;
|
config.gameStatus = WORKING;
|
||||||
|
config.width = 1280;
|
||||||
|
config.height = 768;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -262,6 +268,8 @@ static int detectGame(uint32_t elf_crc)
|
|||||||
config.gameNativeResolutions = "1280x768";
|
config.gameNativeResolutions = "1280x768";
|
||||||
config.gameType = DRIVING;
|
config.gameType = DRIVING;
|
||||||
config.gameStatus = WORKING;
|
config.gameStatus = WORKING;
|
||||||
|
config.width = 1280;
|
||||||
|
config.height = 768;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -275,6 +283,8 @@ static int detectGame(uint32_t elf_crc)
|
|||||||
config.gameNativeResolutions = "";
|
config.gameNativeResolutions = "";
|
||||||
config.gameType = DRIVING;
|
config.gameType = DRIVING;
|
||||||
config.gameStatus = WORKING;
|
config.gameStatus = WORKING;
|
||||||
|
config.width = 1280;
|
||||||
|
config.height = 768;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1113,6 +1123,9 @@ int readConfig(FILE *configFile, EmulatorConfig *config)
|
|||||||
else if (strcmp(command, "SRAM_PATH") == 0)
|
else if (strcmp(command, "SRAM_PATH") == 0)
|
||||||
strcpy(config->sramPath, getNextToken(NULL, " ", &saveptr));
|
strcpy(config->sramPath, getNextToken(NULL, " ", &saveptr));
|
||||||
|
|
||||||
|
else if (strcmp(command, "LIBCG_PATH") == 0)
|
||||||
|
strcpy(config->libCgPath, getNextToken(NULL, " ", &saveptr));
|
||||||
|
|
||||||
else if (strcmp(command, "EMULATE_RIDEBOARD") == 0) {
|
else if (strcmp(command, "EMULATE_RIDEBOARD") == 0) {
|
||||||
int defaultValue = config->emulateRideboard;
|
int defaultValue = config->emulateRideboard;
|
||||||
config->emulateRideboard = getNextIntOrAuto(saveptr, defaultValue);
|
config->emulateRideboard = getNextIntOrAuto(saveptr, defaultValue);
|
||||||
@@ -1529,6 +1542,7 @@ int initConfig(const char* configFilePath)
|
|||||||
config.lindberghColour = YELLOW;
|
config.lindberghColour = YELLOW;
|
||||||
strcpy(config.eepromPath, "eeprom.bin");
|
strcpy(config.eepromPath, "eeprom.bin");
|
||||||
strcpy(config.sramPath, "sram.bin");
|
strcpy(config.sramPath, "sram.bin");
|
||||||
|
strcpy(config.libCgPath, "");
|
||||||
strcpy(config.jvsPath, "/dev/ttyUSB0");
|
strcpy(config.jvsPath, "/dev/ttyUSB0");
|
||||||
strcpy(config.serial1Path, "/dev/ttyS0");
|
strcpy(config.serial1Path, "/dev/ttyS0");
|
||||||
strcpy(config.serial2Path, "/dev/ttyS1");
|
strcpy(config.serial2Path, "/dev/ttyS1");
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#ifndef CONFIG_H
|
#pragma once
|
||||||
#define CONFIG_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
@@ -233,6 +232,7 @@ typedef struct
|
|||||||
int fullscreen;
|
int fullscreen;
|
||||||
char eepromPath[MAX_PATH_LENGTH];
|
char eepromPath[MAX_PATH_LENGTH];
|
||||||
char sramPath[MAX_PATH_LENGTH];
|
char sramPath[MAX_PATH_LENGTH];
|
||||||
|
char libCgPath[MAX_PATH_LENGTH];
|
||||||
char jvsPath[MAX_PATH_LENGTH];
|
char jvsPath[MAX_PATH_LENGTH];
|
||||||
char serial1Path[MAX_PATH_LENGTH];
|
char serial1Path[MAX_PATH_LENGTH];
|
||||||
char serial2Path[MAX_PATH_LENGTH];
|
char serial2Path[MAX_PATH_LENGTH];
|
||||||
@@ -300,4 +300,3 @@ const char *getLindberghColourString(Colour lindberghColour);
|
|||||||
const char *getGameRegionString(GameRegion region);
|
const char *getGameRegionString(GameRegion region);
|
||||||
const char *getGpuTypeString(GpuType gpuType);
|
const char *getGpuTypeString(GpuType gpuType);
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|||||||
@@ -1,5 +1,3 @@
|
|||||||
#ifndef CUSTOM_CURSORS_H
|
|
||||||
#define CUSTOM_CURSORS_H
|
|
||||||
|
|
||||||
int loadNewCursor(const char *cursorFileName, void **cursor, int customWidth, int customHeight);
|
int loadNewCursor(const char *cursorFileName, void **cursor, int customWidth, int customHeight);
|
||||||
void loadCursors();
|
void loadCursors();
|
||||||
@@ -7,4 +5,3 @@ void setCursor(void *cursor);
|
|||||||
void hideCursor();
|
void hideCursor();
|
||||||
void showCursor();
|
void showCursor();
|
||||||
void showPhCursor();
|
void showPhCursor();
|
||||||
#endif
|
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#ifndef FPS_LIMITER_H
|
#pragma once
|
||||||
#define FPS_LIMITER_H
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -13,5 +12,3 @@ typedef struct
|
|||||||
long Clock_now();
|
long Clock_now();
|
||||||
void FpsLimiter(fps_limit *stats);
|
void FpsLimiter(fps_limit *stats);
|
||||||
double calculateFps();
|
double calculateFps();
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#ifndef GLUTHOOKS_H
|
|
||||||
#define GLUTHOOKS_H
|
|
||||||
|
|
||||||
#endif
|
|
||||||
+418
-45
@@ -95,6 +95,12 @@ static int callback(struct dl_phdr_info *info, size_t size, void *data);
|
|||||||
|
|
||||||
uint16_t basePortAddress = 0xFFFF;
|
uint16_t basePortAddress = 0xFFFF;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Signal handler for SIGSEGV.
|
||||||
|
*
|
||||||
|
* This function handles segmentation faults (SIGSEGV) and attempts to recover
|
||||||
|
* from certain types of memory access errors, particularly those related to I/O ports.
|
||||||
|
*/
|
||||||
/**
|
/**
|
||||||
* Signal handler for the SIGSEGV signal, which is triggered when a process tries to access an illegal memory location.
|
* Signal handler for the SIGSEGV signal, which is triggered when a process tries to access an illegal memory location.
|
||||||
* @param signal
|
* @param signal
|
||||||
@@ -177,34 +183,97 @@ static void handleSegfault(int signal, siginfo_t *info, void *ptr)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char *checkIDlike()
|
/**
|
||||||
|
* @brief Trims leading and trailing whitespace and quotes from a string.
|
||||||
|
*
|
||||||
|
* This function removes leading and trailing whitespace characters, as well as
|
||||||
|
* single and double quotes, from the input string.
|
||||||
|
* @param str The string to trim.
|
||||||
|
*/
|
||||||
|
char *trimOS_ID(char *str)
|
||||||
{
|
{
|
||||||
FILE *file = fopen("/etc/os-release", "r");
|
if (!str)
|
||||||
if (!file)
|
return str;
|
||||||
|
|
||||||
|
char *end;
|
||||||
|
while (isspace((unsigned char)*str) || *str == '"' || *str == '\'')
|
||||||
|
str++;
|
||||||
|
|
||||||
|
if (*str == 0)
|
||||||
|
return str;
|
||||||
|
|
||||||
|
end = str + strlen(str) - 1;
|
||||||
|
while (end > str && (isspace((unsigned char)*end) || *end == '"' || *end == '\''))
|
||||||
|
end--;
|
||||||
|
|
||||||
|
*(end + 1) = '\0';
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Checks if the operating system is Debian-based.
|
||||||
|
*
|
||||||
|
* This function reads the /etc/os-release file to determine if the current
|
||||||
|
* operating system is Debian or Ubuntu, or a derivative of them.
|
||||||
|
*/
|
||||||
|
bool checkOS_ID()
|
||||||
|
{
|
||||||
|
FILE *fp = fopen("/etc/os-release", "r");
|
||||||
|
if (!fp)
|
||||||
{
|
{
|
||||||
perror("Failed to open /etc/os-release");
|
return false;
|
||||||
return NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char line[256];
|
char line[256];
|
||||||
char *result = NULL;
|
bool found = false;
|
||||||
|
|
||||||
while (fgets(line, sizeof(line), file))
|
while (fgets(line, sizeof(line), fp))
|
||||||
{
|
{
|
||||||
if (strncmp(line, "ID_LIKE=", 8) == 0)
|
if (strncmp(line, "ID=", 3) == 0)
|
||||||
{
|
{
|
||||||
char *id_like = strchr(line, '=');
|
char *value = trimOS_ID(line + 3);
|
||||||
if (id_like)
|
if (strcmp(value, "debian") == 0 || strcmp(value, "ubuntu") == 0)
|
||||||
{
|
{
|
||||||
result = strdup(id_like);
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (strncmp(line, "ID_LIKE=", 8) == 0)
|
||||||
|
{
|
||||||
|
char value_part[256];
|
||||||
|
strncpy(value_part, line + 8, sizeof(value_part) - 1);
|
||||||
|
value_part[sizeof(value_part) - 1] = '\0';
|
||||||
|
|
||||||
|
char *value_trimmed = trimOS_ID(value_part);
|
||||||
|
char *token = strtok(value_trimmed, " \t\n");
|
||||||
|
|
||||||
|
while (token != NULL)
|
||||||
|
{
|
||||||
|
char *clean_token = trimOS_ID(token);
|
||||||
|
if (strcmp(clean_token, "debian") == 0 || strcmp(clean_token, "ubuntu") == 0)
|
||||||
|
{
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
token = strtok(NULL, " \t\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (found)
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fclose(file);
|
|
||||||
return result;
|
fclose(fp);
|
||||||
|
return found;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Initialization function for the hook library.
|
||||||
|
*
|
||||||
|
* This function is called automatically when the library is loaded. It sets up
|
||||||
|
* signal handlers, initializes configuration, and performs other setup tasks.
|
||||||
|
*/
|
||||||
void __attribute__((constructor)) hook_init()
|
void __attribute__((constructor)) hook_init()
|
||||||
{
|
{
|
||||||
// Get offsets of the Game's ELF and calculate CRC32.
|
// Get offsets of the Game's ELF and calculate CRC32.
|
||||||
@@ -221,12 +290,7 @@ void __attribute__((constructor)) hook_init()
|
|||||||
|
|
||||||
gId = getConfig()->crc32;
|
gId = getConfig()->crc32;
|
||||||
|
|
||||||
char *id_like = checkIDlike();
|
if (!checkOS_ID())
|
||||||
if (id_like == NULL)
|
|
||||||
{
|
|
||||||
log_warn("Unable to get system info on current OS");
|
|
||||||
}
|
|
||||||
else if (strstr(id_like, "debian") == NULL)
|
|
||||||
{
|
{
|
||||||
log_warn("Seems like you're not in debian-like system. There might be unexpected issues.");
|
log_warn("Seems like you're not in debian-like system. There might be unexpected issues.");
|
||||||
}
|
}
|
||||||
@@ -321,6 +385,13 @@ void __attribute__((constructor)) hook_init()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the opendir function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to opendir and redirects them to different
|
||||||
|
* directories based on the game ID.
|
||||||
|
* @param dirname The name of the directory to open.
|
||||||
|
*/
|
||||||
DIR *opendir(const char *dirname)
|
DIR *opendir(const char *dirname)
|
||||||
{
|
{
|
||||||
DIR *(*_opendir)(const char *dirname) = dlsym(RTLD_NEXT, "opendir");
|
DIR *(*_opendir)(const char *dirname) = dlsym(RTLD_NEXT, "opendir");
|
||||||
@@ -337,9 +408,88 @@ DIR *opendir(const char *dirname)
|
|||||||
return _opendir(dirname + 1);
|
return _opendir(dirname + 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fix for Outrun high scores
|
||||||
|
switch (gId)
|
||||||
|
{
|
||||||
|
case OUTRUN_2_SP_SDX:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA:
|
||||||
|
case OUTRUN_2_SP_SDX_TEST:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST2:
|
||||||
|
{
|
||||||
|
if (strcmp(dirname, "/home/disk1/rankingdata") == 0)
|
||||||
|
{
|
||||||
|
return _opendir("./rankingdata");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
return _opendir(dirname);
|
return _opendir(dirname);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the remove function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to remove and redirects them to different
|
||||||
|
* paths based on the game ID.
|
||||||
|
* @param path The path to remove.
|
||||||
|
*/
|
||||||
|
int remove(const char *path)
|
||||||
|
{
|
||||||
|
int (*_remove)(const char *path) = dlsym(RTLD_NEXT, "remove");
|
||||||
|
|
||||||
|
switch (gId)
|
||||||
|
{
|
||||||
|
case OUTRUN_2_SP_SDX:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA:
|
||||||
|
case OUTRUN_2_SP_SDX_TEST:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST2:
|
||||||
|
{
|
||||||
|
if (strcmp(path, "/home/disk1/rankingdata/%s") == 0)
|
||||||
|
{
|
||||||
|
return _remove("./rankingdata/%s");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _remove(path);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the mkdir function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to mkdir and redirects them to different
|
||||||
|
* paths based on the game ID.
|
||||||
|
* @param path The path to create.
|
||||||
|
*/
|
||||||
|
int mkdir(const char *path, mode_t mode)
|
||||||
|
{
|
||||||
|
int (*_mkdir)(const char *path, mode_t mode) = dlsym(RTLD_NEXT, "mkdir");
|
||||||
|
|
||||||
|
switch (gId)
|
||||||
|
{
|
||||||
|
case OUTRUN_2_SP_SDX:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA:
|
||||||
|
case OUTRUN_2_SP_SDX_TEST:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST2:
|
||||||
|
{
|
||||||
|
if (strcmp(path, "/home/disk1/rankingdata") == 0)
|
||||||
|
{
|
||||||
|
return _mkdir("./rankingdata", mode);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return _mkdir(path, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the __xstat64 function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to __xstat64 and redirects them to different
|
||||||
|
* paths based on the game ID.
|
||||||
|
* @param path The path to stat.
|
||||||
|
*/
|
||||||
int __xstat64(int ver, const char *path, struct stat64 *stat_buf)
|
int __xstat64(int ver, const char *path, struct stat64 *stat_buf)
|
||||||
{
|
{
|
||||||
int (*___xstat64)(int ver, const char *path, struct stat64 *stat_buf) = dlsym(RTLD_NEXT, "__xstat64");
|
int (*___xstat64)(int ver, const char *path, struct stat64 *stat_buf) = dlsym(RTLD_NEXT, "__xstat64");
|
||||||
@@ -351,6 +501,13 @@ int __xstat64(int ver, const char *path, struct stat64 *stat_buf)
|
|||||||
return ___xstat64(ver, path, stat_buf);
|
return ___xstat64(ver, path, stat_buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the open function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to open and redirects them to different
|
||||||
|
* files or devices based on the pathname.
|
||||||
|
* @param pathname The path to open.
|
||||||
|
*/
|
||||||
int open(const char *pathname, int flags, ...)
|
int open(const char *pathname, int flags, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
@@ -437,6 +594,13 @@ int open(const char *pathname, int flags, ...)
|
|||||||
return _open(pathname, flags, mode);
|
return _open(pathname, flags, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the open64 function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to open64 and redirects them to different
|
||||||
|
* files or devices based on the pathname.
|
||||||
|
* @param pathname The path to open.
|
||||||
|
*/
|
||||||
int open64(const char *pathname, int flags, ...)
|
int open64(const char *pathname, int flags, ...)
|
||||||
{
|
{
|
||||||
va_list args;
|
va_list args;
|
||||||
@@ -447,6 +611,13 @@ int open64(const char *pathname, int flags, ...)
|
|||||||
return open(pathname, flags, mode);
|
return open(pathname, flags, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the fopen function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to fopen and redirects them to different
|
||||||
|
* files based on the pathname.
|
||||||
|
* @param pathname The path to open.
|
||||||
|
*/
|
||||||
FILE *fopen(const char *restrict pathname, const char *restrict mode)
|
FILE *fopen(const char *restrict pathname, const char *restrict mode)
|
||||||
{
|
{
|
||||||
FILE *(*_fopen)(const char *restrict pathname, const char *restrict mode) = dlsym(RTLD_NEXT, "fopen");
|
FILE *(*_fopen)(const char *restrict pathname, const char *restrict mode) = dlsym(RTLD_NEXT, "fopen");
|
||||||
@@ -572,6 +743,22 @@ FILE *fopen(const char *restrict pathname, const char *restrict mode)
|
|||||||
pathname = newPathname;
|
pathname = newPathname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Fix for Outrun high scores
|
||||||
|
switch (gId)
|
||||||
|
{
|
||||||
|
case OUTRUN_2_SP_SDX:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA:
|
||||||
|
case OUTRUN_2_SP_SDX_TEST:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST2:
|
||||||
|
{
|
||||||
|
if ((newPathname = strstr(pathname, "/home/disk1")) != NULL)
|
||||||
|
{
|
||||||
|
pathname = newPathname + 12;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// This forces LGJ games and ID games to not use the pre-compiled shaders.
|
// This forces LGJ games and ID games to not use the pre-compiled shaders.
|
||||||
if ((strstr(pathname, "asm_lbg") != NULL) || (strstr(pathname, "asm_gl") != NULL))
|
if ((strstr(pathname, "asm_lbg") != NULL) || (strstr(pathname, "asm_gl") != NULL))
|
||||||
{
|
{
|
||||||
@@ -644,6 +831,13 @@ FILE *fopen(const char *restrict pathname, const char *restrict mode)
|
|||||||
return _fopen(pathname, mode);
|
return _fopen(pathname, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the fopen64 function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to fopen64 and redirects them to different
|
||||||
|
* files based on the pathname.
|
||||||
|
* @param pathname The path to open.
|
||||||
|
*/
|
||||||
FILE *fopen64(const char *pathname, const char *mode)
|
FILE *fopen64(const char *pathname, const char *mode)
|
||||||
{
|
{
|
||||||
FILE *(*_fopen64)(const char *restrict pathname, const char *restrict mode) = dlsym(RTLD_NEXT, "fopen64");
|
FILE *(*_fopen64)(const char *restrict pathname, const char *restrict mode) = dlsym(RTLD_NEXT, "fopen64");
|
||||||
@@ -744,6 +938,13 @@ FILE *fopen64(const char *pathname, const char *mode)
|
|||||||
return _fopen64(pathname, mode);
|
return _fopen64(pathname, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the fclose function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to fclose and performs cleanup operations
|
||||||
|
* for the file hooks.
|
||||||
|
* @param stream The file stream to close.
|
||||||
|
*/
|
||||||
int fclose(FILE *stream)
|
int fclose(FILE *stream)
|
||||||
{
|
{
|
||||||
int (*_fclose)(FILE *stream) = dlsym(RTLD_NEXT, "fclose");
|
int (*_fclose)(FILE *stream) = dlsym(RTLD_NEXT, "fclose");
|
||||||
@@ -765,6 +966,14 @@ int fclose(FILE *stream)
|
|||||||
}
|
}
|
||||||
return _fclose(stream);
|
return _fclose(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the openat function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to openat and redirects them to different
|
||||||
|
* files or devices based on the pathname.
|
||||||
|
* @param pathname The path to open.
|
||||||
|
*/
|
||||||
int openat(int dirfd, const char *pathname, int flags, ...)
|
int openat(int dirfd, const char *pathname, int flags, ...)
|
||||||
{
|
{
|
||||||
int (*_openat)(int dirfd, const char *pathname, int flags) = dlsym(RTLD_NEXT, "openat");
|
int (*_openat)(int dirfd, const char *pathname, int flags) = dlsym(RTLD_NEXT, "openat");
|
||||||
@@ -779,6 +988,13 @@ int openat(int dirfd, const char *pathname, int flags, ...)
|
|||||||
return _openat(dirfd, pathname, flags);
|
return _openat(dirfd, pathname, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the close function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to close and performs cleanup operations
|
||||||
|
* for the file hooks.
|
||||||
|
* @param fd The file descriptor to close.
|
||||||
|
*/
|
||||||
int close(int fd)
|
int close(int fd)
|
||||||
{
|
{
|
||||||
int (*_close)(int fd) = dlsym(RTLD_NEXT, "close");
|
int (*_close)(int fd) = dlsym(RTLD_NEXT, "close");
|
||||||
@@ -795,6 +1011,13 @@ int close(int fd)
|
|||||||
return _close(fd);
|
return _close(fd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the fgets function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to fgets and redirects them to different
|
||||||
|
* files based on the stream.
|
||||||
|
* @param stream The file stream to read from.
|
||||||
|
*/
|
||||||
char *fgets(char *str, int n, FILE *stream)
|
char *fgets(char *str, int n, FILE *stream)
|
||||||
{
|
{
|
||||||
char *(*_fgets)(char *str, int n, FILE *stream) = dlsym(RTLD_NEXT, "fgets");
|
char *(*_fgets)(char *str, int n, FILE *stream) = dlsym(RTLD_NEXT, "fgets");
|
||||||
@@ -832,6 +1055,13 @@ char *fgets(char *str, int n, FILE *stream)
|
|||||||
return _fgets(str, n, stream);
|
return _fgets(str, n, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the read function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to read and redirects them to different
|
||||||
|
* files or devices based on the file descriptor.
|
||||||
|
* @param fd The file descriptor to read from.
|
||||||
|
*/
|
||||||
ssize_t read(int fd, void *buf, size_t count)
|
ssize_t read(int fd, void *buf, size_t count)
|
||||||
{
|
{
|
||||||
int (*_read)(int fd, void *buf, size_t count) = dlsym(RTLD_NEXT, "read");
|
int (*_read)(int fd, void *buf, size_t count) = dlsym(RTLD_NEXT, "read");
|
||||||
@@ -851,17 +1081,11 @@ ssize_t read(int fd, void *buf, size_t count)
|
|||||||
return driveboardRead(fd, buf, count);
|
return driveboardRead(fd, buf, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fd == hooks[SERIAL0] && getConfig()->emulateCardreader)
|
if ((fd == hooks[SERIAL0] || fd == hooks[SERIAL1]) && getConfig()->emulateCardreader)
|
||||||
{
|
{
|
||||||
return cardReaderRead(fd, buf, count);
|
return cardReaderRead(fd, buf, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fd == hooks[SERIAL1] && getConfig()->emulateCardreader)
|
|
||||||
{
|
|
||||||
return cardReaderRead(fd, buf, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we don't hook the serial just reply with nothing
|
|
||||||
if (fd == hooks[SERIAL0] || fd == hooks[SERIAL1])
|
if (fd == hooks[SERIAL0] || fd == hooks[SERIAL1])
|
||||||
{
|
{
|
||||||
if (gId == PRIMEVAL_HUNT && getConfig()->emulateTouchscreen == 1)
|
if (gId == PRIMEVAL_HUNT && getConfig()->emulateTouchscreen == 1)
|
||||||
@@ -881,6 +1105,13 @@ ssize_t read(int fd, void *buf, size_t count)
|
|||||||
return _read(fd, buf, count);
|
return _read(fd, buf, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the fread function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to fread and redirects them to different
|
||||||
|
* files based on the stream.
|
||||||
|
* @param stream The file stream to read from.
|
||||||
|
*/
|
||||||
size_t fread(void *buf, size_t size, size_t count, FILE *stream)
|
size_t fread(void *buf, size_t size, size_t count, FILE *stream)
|
||||||
{
|
{
|
||||||
size_t (*_fread)(void *buf, size_t size, size_t count, FILE *stream) = dlsym(RTLD_NEXT, "fread");
|
size_t (*_fread)(void *buf, size_t size, size_t count, FILE *stream) = dlsym(RTLD_NEXT, "fread");
|
||||||
@@ -901,11 +1132,6 @@ size_t fread(void *buf, size_t size, size_t count, FILE *stream)
|
|||||||
return freadReplace(buf, size, count, fileRead[FILE_RW2]);
|
return freadReplace(buf, size, count, fileRead[FILE_RW2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (stream == fileHooks[FILE_HARLEY])
|
|
||||||
// {
|
|
||||||
// return harleyFreadReplace(buf, size, count, fileHooks[FILE_HARLEY]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (stream == fileHooks[FILE_FONT_ABC])
|
if (stream == fileHooks[FILE_FONT_ABC])
|
||||||
{
|
{
|
||||||
memcpy(buf, fontABC + fontABCidx, size * count);
|
memcpy(buf, fontABC + fontABCidx, size * count);
|
||||||
@@ -933,6 +1159,13 @@ size_t fread(void *buf, size_t size, size_t count, FILE *stream)
|
|||||||
return _fread(buf, size, count, stream);
|
return _fread(buf, size, count, stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the ftell function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to ftell and redirects them to different
|
||||||
|
* files based on the stream.
|
||||||
|
* @param stream The file stream to get the position from.
|
||||||
|
*/
|
||||||
long int ftell(FILE *stream)
|
long int ftell(FILE *stream)
|
||||||
{
|
{
|
||||||
long int (*_ftell)(FILE *stream) = dlsym(RTLD_NEXT, "ftell");
|
long int (*_ftell)(FILE *stream) = dlsym(RTLD_NEXT, "ftell");
|
||||||
@@ -954,6 +1187,13 @@ long int ftell(FILE *stream)
|
|||||||
return _ftell(stream);
|
return _ftell(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the fseek function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to fseek and redirects them to different
|
||||||
|
* files based on the stream.
|
||||||
|
* @param stream The file stream to seek in.
|
||||||
|
*/
|
||||||
int fseek(FILE *stream, long int offset, int whence)
|
int fseek(FILE *stream, long int offset, int whence)
|
||||||
{
|
{
|
||||||
int (*_fseek)(FILE *stream, long int offset, int whence) = dlsym(RTLD_NEXT, "fseek");
|
int (*_fseek)(FILE *stream, long int offset, int whence) = dlsym(RTLD_NEXT, "fseek");
|
||||||
@@ -977,6 +1217,13 @@ int fseek(FILE *stream, long int offset, int whence)
|
|||||||
return _fseek(stream, offset, whence);
|
return _fseek(stream, offset, whence);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the rewind function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to rewind and redirects them to different
|
||||||
|
* files based on the stream.
|
||||||
|
* @param stream The file stream to rewind.
|
||||||
|
*/
|
||||||
void rewind(FILE *stream)
|
void rewind(FILE *stream)
|
||||||
{
|
{
|
||||||
void (*_rewind)(FILE *stream) = dlsym(RTLD_NEXT, "rewind");
|
void (*_rewind)(FILE *stream) = dlsym(RTLD_NEXT, "rewind");
|
||||||
@@ -990,6 +1237,13 @@ void rewind(FILE *stream)
|
|||||||
_rewind(stream);
|
_rewind(stream);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the write function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to write and redirects them to different
|
||||||
|
* files or devices based on the file descriptor.
|
||||||
|
* @param fd The file descriptor to write to.
|
||||||
|
*/
|
||||||
ssize_t write(int fd, const void *buf, size_t count)
|
ssize_t write(int fd, const void *buf, size_t count)
|
||||||
{
|
{
|
||||||
int (*_write)(int fd, const void *buf, size_t count) = dlsym(RTLD_NEXT, "write");
|
int (*_write)(int fd, const void *buf, size_t count) = dlsym(RTLD_NEXT, "write");
|
||||||
@@ -1015,12 +1269,7 @@ ssize_t write(int fd, const void *buf, size_t count)
|
|||||||
return driveboardWrite(fd, buf, count);
|
return driveboardWrite(fd, buf, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fd == hooks[SERIAL0] && getConfig()->emulateCardreader)
|
if ((fd == hooks[SERIAL0] || fd == hooks[SERIAL1]) && getConfig()->emulateCardreader)
|
||||||
{
|
|
||||||
return cardReaderWrite(fd, buf, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fd == hooks[SERIAL1] && getConfig()->emulateCardreader)
|
|
||||||
{
|
{
|
||||||
return cardReaderWrite(fd, buf, count);
|
return cardReaderWrite(fd, buf, count);
|
||||||
}
|
}
|
||||||
@@ -1028,6 +1277,13 @@ ssize_t write(int fd, const void *buf, size_t count)
|
|||||||
return _write(fd, buf, count);
|
return _write(fd, buf, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the ioctl function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to ioctl and redirects them to different
|
||||||
|
* devices based on the file descriptor.
|
||||||
|
* @param fd The file descriptor to perform the ioctl on.
|
||||||
|
*/
|
||||||
int ioctl(int fd, unsigned int request, void *data)
|
int ioctl(int fd, unsigned int request, void *data)
|
||||||
{
|
{
|
||||||
int (*_ioctl)(int fd, int request, void *data) = dlsym(RTLD_NEXT, "ioctl");
|
int (*_ioctl)(int fd, int request, void *data) = dlsym(RTLD_NEXT, "ioctl");
|
||||||
@@ -1057,6 +1313,13 @@ int ioctl(int fd, unsigned int request, void *data)
|
|||||||
return _ioctl(fd, request, data);
|
return _ioctl(fd, request, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the tcgetattr function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to tcgetattr and redirects them to different
|
||||||
|
* devices based on the file descriptor.
|
||||||
|
* @param fd The file descriptor to get the attributes from.
|
||||||
|
*/
|
||||||
int tcgetattr(int fd, struct termios *termios_p)
|
int tcgetattr(int fd, struct termios *termios_p)
|
||||||
{
|
{
|
||||||
int (*_tcgetattr)(int fd, struct termios *termios_p) = dlsym(RTLD_NEXT, "tcgetattr");
|
int (*_tcgetattr)(int fd, struct termios *termios_p) = dlsym(RTLD_NEXT, "tcgetattr");
|
||||||
@@ -1067,6 +1330,13 @@ int tcgetattr(int fd, struct termios *termios_p)
|
|||||||
return _tcgetattr(fd, termios_p);
|
return _tcgetattr(fd, termios_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the tcsetattr function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to tcsetattr and redirects them to different
|
||||||
|
* devices based on the file descriptor.
|
||||||
|
* @param fd The file descriptor to set the attributes on.
|
||||||
|
*/
|
||||||
int tcsetattr(int fd, int optional_actions, const struct termios *termios_p)
|
int tcsetattr(int fd, int optional_actions, const struct termios *termios_p)
|
||||||
{
|
{
|
||||||
int (*_tcsetattr)(int fd, int optional_actions, const struct termios *termios_p) = dlsym(RTLD_NEXT, "tcsetattr");
|
int (*_tcsetattr)(int fd, int optional_actions, const struct termios *termios_p) = dlsym(RTLD_NEXT, "tcsetattr");
|
||||||
@@ -1077,6 +1347,13 @@ int tcsetattr(int fd, int optional_actions, const struct termios *termios_p)
|
|||||||
return _tcsetattr(fd, optional_actions, termios_p);
|
return _tcsetattr(fd, optional_actions, termios_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the cfgetispeed function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to cfgetispeed and redirects them to different
|
||||||
|
* devices based on the file descriptor.
|
||||||
|
* @param termios_p The termios structure to get the input speed from.
|
||||||
|
*/
|
||||||
speed_t cfgetispeed(const struct termios *termios_p)
|
speed_t cfgetispeed(const struct termios *termios_p)
|
||||||
{
|
{
|
||||||
speed_t (*_cfgetispeed)(const struct termios *termios_p) = dlsym(RTLD_NEXT, "cfgetispeed");
|
speed_t (*_cfgetispeed)(const struct termios *termios_p) = dlsym(RTLD_NEXT, "cfgetispeed");
|
||||||
@@ -1087,6 +1364,13 @@ speed_t cfgetispeed(const struct termios *termios_p)
|
|||||||
return _cfgetispeed(termios_p);
|
return _cfgetispeed(termios_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the cfgetospeed function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to cfgetospeed and redirects them to different
|
||||||
|
* devices based on the file descriptor.
|
||||||
|
* @param termios_p The termios structure to get the output speed from.
|
||||||
|
*/
|
||||||
speed_t cfgetospeed(const struct termios *termios_p)
|
speed_t cfgetospeed(const struct termios *termios_p)
|
||||||
{
|
{
|
||||||
speed_t (*_cfgetospeed)(const struct termios *termios_p) = dlsym(RTLD_NEXT, "cfgetospeed");
|
speed_t (*_cfgetospeed)(const struct termios *termios_p) = dlsym(RTLD_NEXT, "cfgetospeed");
|
||||||
@@ -1097,6 +1381,13 @@ speed_t cfgetospeed(const struct termios *termios_p)
|
|||||||
return _cfgetospeed(termios_p);
|
return _cfgetospeed(termios_p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the cfsetispeed function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to cfsetispeed and redirects them to different
|
||||||
|
* devices based on the file descriptor.
|
||||||
|
* @param termios_p The termios structure to set the input speed on.
|
||||||
|
*/
|
||||||
int cfsetispeed(struct termios *termios_p, speed_t speed)
|
int cfsetispeed(struct termios *termios_p, speed_t speed)
|
||||||
{
|
{
|
||||||
int (*_cfsetispeed)(struct termios *termios_p, speed_t speed) = dlsym(RTLD_NEXT, "cfsetispeed");
|
int (*_cfsetispeed)(struct termios *termios_p, speed_t speed) = dlsym(RTLD_NEXT, "cfsetispeed");
|
||||||
@@ -1107,6 +1398,13 @@ int cfsetispeed(struct termios *termios_p, speed_t speed)
|
|||||||
return _cfsetispeed(termios_p, speed);
|
return _cfsetispeed(termios_p, speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the cfsetospeed function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to cfsetospeed and redirects them to different
|
||||||
|
* devices based on the file descriptor.
|
||||||
|
* @param termios_p The termios structure to set the output speed on.
|
||||||
|
*/
|
||||||
int cfsetospeed(struct termios *termios_p, speed_t speed)
|
int cfsetospeed(struct termios *termios_p, speed_t speed)
|
||||||
{
|
{
|
||||||
int (*_cfsetospeed)(struct termios *termios_p, speed_t speed) = dlsym(RTLD_NEXT, "cfsetospeed");
|
int (*_cfsetospeed)(struct termios *termios_p, speed_t speed) = dlsym(RTLD_NEXT, "cfsetospeed");
|
||||||
@@ -1117,6 +1415,14 @@ int cfsetospeed(struct termios *termios_p, speed_t speed)
|
|||||||
return _cfsetospeed(termios_p, speed);
|
return _cfsetospeed(termios_p, speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the select function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to select and redirects them to different
|
||||||
|
* devices based on the file descriptor.
|
||||||
|
* @param nfds The highest file descriptor number plus one.
|
||||||
|
* @param readfds The file descriptors to check for readability.
|
||||||
|
*/
|
||||||
int select(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict exceptfds,
|
int select(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict exceptfds,
|
||||||
struct timeval *restrict timeout)
|
struct timeval *restrict timeout)
|
||||||
{
|
{
|
||||||
@@ -1141,6 +1447,13 @@ int select(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set
|
|||||||
return _select(nfds, readfds, writefds, exceptfds, timeout);
|
return _select(nfds, readfds, writefds, exceptfds, timeout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the system function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to system and redirects them to different
|
||||||
|
* commands based on the command string.
|
||||||
|
* @param command The command to execute.
|
||||||
|
*/
|
||||||
int system(const char *command)
|
int system(const char *command)
|
||||||
{
|
{
|
||||||
int (*_system)(const char *command) = dlsym(RTLD_NEXT, "system");
|
int (*_system)(const char *command) = dlsym(RTLD_NEXT, "system");
|
||||||
@@ -1178,6 +1491,36 @@ int system(const char *command)
|
|||||||
return _system(command);
|
return _system(command);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the strncpy function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to strncpy and redirects them to different
|
||||||
|
* strings based on the game ID.
|
||||||
|
* @param dest The destination string.
|
||||||
|
*/
|
||||||
|
char *strncpy(char *dest, const char *src, size_t n)
|
||||||
|
{
|
||||||
|
char *(*_strncpy)(char *dest, const char *src, size_t n) = dlsym(RTLD_NEXT, "strncpy");
|
||||||
|
|
||||||
|
switch (gId)
|
||||||
|
{
|
||||||
|
case HARLEY_DAVIDSON:
|
||||||
|
case RAMBO:
|
||||||
|
case THE_HOUSE_OF_THE_DEAD_EX:
|
||||||
|
case TOO_SPICY:
|
||||||
|
if (getConfig()->GPUVendor != NVIDIA_GPU && (strstr(src, "../fs/compiledshader") != NULL || strstr(src, "../fs/compiled") != NULL))
|
||||||
|
return _strncpy(dest, "../fs/compiledmesa", n);
|
||||||
|
}
|
||||||
|
return _strncpy(dest, src, n);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the iopl function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to iopl and always returns 0.
|
||||||
|
* @param level The I/O privilege level to set.
|
||||||
|
* @return Always returns 0.
|
||||||
|
*/
|
||||||
int iopl(int level)
|
int iopl(int level)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1193,10 +1536,11 @@ void kswap_collect(void *p)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Hook for function used by Primevil
|
* @brief Hook for the powf function.
|
||||||
* @param base The number to raise to the exponent
|
*
|
||||||
* @param exp The exponent to raise the number to
|
* This function intercepts calls to powf and redirects them to pow.
|
||||||
* @return The result of raising the number to the exponent
|
* @param base The base number.
|
||||||
|
* @param exponent The exponent.
|
||||||
*/
|
*/
|
||||||
float powf(float base, float exponent)
|
float powf(float base, float exponent)
|
||||||
{
|
{
|
||||||
@@ -1211,6 +1555,13 @@ int sem_wait(sem_t *sem)
|
|||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Gets the machine's IP address.
|
||||||
|
*
|
||||||
|
* This function retrieves the machine's IP address and stores it in the
|
||||||
|
* provided sockaddr_in structure.
|
||||||
|
* @param addr The sockaddr_in structure to store the IP address in.
|
||||||
|
*/
|
||||||
int get_machine_ip(struct sockaddr_in *addr)
|
int get_machine_ip(struct sockaddr_in *addr)
|
||||||
{
|
{
|
||||||
struct ifaddrs *ifaddr, *ifa;
|
struct ifaddrs *ifaddr, *ifa;
|
||||||
@@ -1283,7 +1634,11 @@ int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Callback function to get the offset and size of the execution program in memory of the ELF we hook to.
|
* @brief Callback function for dl_iterate_phdr.
|
||||||
|
*
|
||||||
|
* This function is called for each program header in the loaded shared
|
||||||
|
* objects. It is used to calculate the CRC32 of the ELF file.
|
||||||
|
* @param info Information about the program header.
|
||||||
*/
|
*/
|
||||||
static int callback(struct dl_phdr_info *info, size_t size, void *data)
|
static int callback(struct dl_phdr_info *info, size_t size, void *data)
|
||||||
{
|
{
|
||||||
@@ -1295,7 +1650,11 @@ static int callback(struct dl_phdr_info *info, size_t size, void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stop the game changing the DISPLAY environment variable
|
* @brief Hook for the setenv function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to setenv and prevents the game from
|
||||||
|
* changing the DISPLAY environment variable.
|
||||||
|
* @param name The name of the environment variable.
|
||||||
*/
|
*/
|
||||||
int setenv(const char *name, const char *value, int overwrite)
|
int setenv(const char *name, const char *value, int overwrite)
|
||||||
{
|
{
|
||||||
@@ -1310,7 +1669,10 @@ int setenv(const char *name, const char *value, int overwrite)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fake the TEA_DIR environment variable to games that require it to run
|
* @brief Hook for the getenv function.
|
||||||
|
*
|
||||||
|
* This function "Fakes" the TEA_DIR environment variable to games that require it to run
|
||||||
|
* @param name The name of the environment variable.
|
||||||
*/
|
*/
|
||||||
char *getenv(const char *name)
|
char *getenv(const char *name)
|
||||||
{
|
{
|
||||||
@@ -1357,7 +1719,11 @@ char *getenv(const char *name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stop the game unsetting the DISPLAY environment variable
|
* @brief Hook for the unsetenv function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to unsetenv and prevents the game from
|
||||||
|
* unsetting the DISPLAY environment variable.
|
||||||
|
* @param name The name of the environment variable.
|
||||||
*/
|
*/
|
||||||
int unsetenv(const char *name)
|
int unsetenv(const char *name)
|
||||||
{
|
{
|
||||||
@@ -1384,6 +1750,13 @@ char *__strdup(const char *string)
|
|||||||
return ___strdup(string);
|
return ___strdup(string);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Hook for the localtime_r function.
|
||||||
|
*
|
||||||
|
* This function intercepts calls to localtime_r and redirects them to different
|
||||||
|
* times based on the game ID.
|
||||||
|
* @param timep The time to convert.
|
||||||
|
*/
|
||||||
struct tm *localtime_r(const time_t *timep, struct tm *result)
|
struct tm *localtime_r(const time_t *timep, struct tm *result)
|
||||||
{
|
{
|
||||||
struct tm *(*_localtime_r)(const time_t *, struct tm *) =
|
struct tm *(*_localtime_r)(const time_t *, struct tm *) =
|
||||||
|
|||||||
+1
-4
@@ -1,5 +1,4 @@
|
|||||||
#ifndef JVS_H_
|
#pragma once
|
||||||
#define JVS_H_
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -242,5 +241,3 @@ JVSIO* getJVSIO();
|
|||||||
int setSwitch(JVSPlayer player, JVSInput switchNumber, int value);
|
int setSwitch(JVSPlayer player, JVSInput switchNumber, int value);
|
||||||
int incrementCoin(JVSPlayer player, int amount);
|
int incrementCoin(JVSPlayer player, int amount);
|
||||||
int setAnalogue(JVSInput channel, int value);
|
int setAnalogue(JVSInput channel, int value);
|
||||||
|
|
||||||
#endif // JVS_H_
|
|
||||||
|
|||||||
+499
-146
@@ -1,8 +1,14 @@
|
|||||||
#include <dirent.h>
|
#include <dirent.h>
|
||||||
|
#include <libgen.h>
|
||||||
|
#include <linux/limits.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "evdevinput.h"
|
#include "evdevinput.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
@@ -11,9 +17,36 @@
|
|||||||
#define LD_LIBRARY_PATH "LD_LIBRARY_PATH"
|
#define LD_LIBRARY_PATH "LD_LIBRARY_PATH"
|
||||||
#define LD_PRELOAD "LD_PRELOAD"
|
#define LD_PRELOAD "LD_PRELOAD"
|
||||||
#define PRELOAD_FILE_NAME "lindbergh.so"
|
#define PRELOAD_FILE_NAME "lindbergh.so"
|
||||||
#define PRELOAD_FILE_FLATPAK "/app/lib32/lindbergh.so"
|
|
||||||
#define TEAM "bobbydilley, retrofan, dkeruza-neo, doozer, francesco, rolel, caviar-x"
|
#define TEAM "bobbydilley, retrofan, dkeruza-neo, doozer, francesco, rolel, caviar-x"
|
||||||
#define LINDBERGH_CONFIG_PATH "LINDBERGH_CONFIG_PATH"
|
#define LINDBERGH_CONFIG_PATH "LINDBERGH_CONFIG_PATH"
|
||||||
|
#define LINDBERGH_LOADER_CURRENT_DIR "LINDBERGH_LOADER_CURRENT_DIR"
|
||||||
|
#define MAX_PATH_LEN 1024
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Calculates the CRC32 of a single byte.
|
||||||
|
*
|
||||||
|
* This function calculates the CRC32 value for a given byte of data.
|
||||||
|
*
|
||||||
|
* @param crc The current CRC32 value.
|
||||||
|
* @param data The byte of data to calculate the CRC32 for.
|
||||||
|
* @return The updated CRC32 value.
|
||||||
|
*/
|
||||||
|
uint32_t calcCrc32(uint32_t crc, uint8_t data)
|
||||||
|
{
|
||||||
|
crc ^= data; // No shift needed; working in LSB-first order
|
||||||
|
for (int i = 0; i < 8; i++)
|
||||||
|
{
|
||||||
|
if (crc & 1)
|
||||||
|
{
|
||||||
|
crc = (crc >> 1) ^ 0xEDB88320;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
crc = (crc >> 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return crc;
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t elf_crc = 0;
|
uint32_t elf_crc = 0;
|
||||||
|
|
||||||
@@ -120,23 +153,14 @@ uint32_t cleanElfCRC32[] = {
|
|||||||
|
|
||||||
int cleanElfCRC32Count = sizeof(cleanElfCRC32) / sizeof(uint32_t);
|
int cleanElfCRC32Count = sizeof(cleanElfCRC32) / sizeof(uint32_t);
|
||||||
|
|
||||||
uint32_t calcCrc32(uint32_t crc, uint8_t data)
|
/**
|
||||||
{
|
* @brief Looks up a CRC value in the cleanElfCRC32 table.
|
||||||
crc ^= data; // No shift needed; working in LSB-first order
|
*
|
||||||
for (int i = 0; i < 8; i++)
|
* This function searches for a given CRC value within the cleanElfCRC32 array.
|
||||||
{
|
*
|
||||||
if (crc & 1)
|
* @param crc The CRC value to look up.
|
||||||
{
|
* @return 1 if the CRC is found in the table, 0 otherwise.
|
||||||
crc = (crc >> 1) ^ 0xEDB88320;
|
*/
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
crc = (crc >> 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return crc;
|
|
||||||
}
|
|
||||||
|
|
||||||
int lookupCrcTable(uint32_t crc)
|
int lookupCrcTable(uint32_t crc)
|
||||||
{
|
{
|
||||||
for (int x = 0; x < cleanElfCRC32Count; x++)
|
for (int x = 0; x < cleanElfCRC32Count; x++)
|
||||||
@@ -147,23 +171,52 @@ int lookupCrcTable(uint32_t crc)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void isCleanElf(char *command)
|
/**
|
||||||
|
* @brief Removes double quotes from a string.
|
||||||
|
*
|
||||||
|
* This function iterates through the input string and removes any double quote characters.
|
||||||
|
* It modifies the string in place.
|
||||||
|
*
|
||||||
|
* @param str The string to remove double quotes from.
|
||||||
|
*/
|
||||||
|
void removeDoubleQuotes(char *str)
|
||||||
{
|
{
|
||||||
const char *space_pos = strchr(command, ' ');
|
if (str == NULL)
|
||||||
size_t length = space_pos ? (size_t)(space_pos - command) : strlen(command);
|
|
||||||
|
|
||||||
char elfName[256];
|
|
||||||
strncpy(elfName, command, length);
|
|
||||||
elfName[length] = '\0';
|
|
||||||
|
|
||||||
FILE *file = fopen(elfName, "rb");
|
|
||||||
if (!file)
|
|
||||||
{
|
{
|
||||||
log_error("Could not calculate the Elf CRC32.");
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t crc = 0xFFFFFFFF;
|
int j = 0;
|
||||||
|
for (int i = 0; str[i] != '\0'; i++)
|
||||||
|
{
|
||||||
|
if (str[i] != '"')
|
||||||
|
{
|
||||||
|
str[j] = str[i];
|
||||||
|
j++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
str[j] = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Calculates the CRC32 of a file.
|
||||||
|
*
|
||||||
|
* This function calculates the CRC32 of the specified file.
|
||||||
|
*
|
||||||
|
* @param filename The path to the file.
|
||||||
|
* @param crc The pointer to the variable that will contain the CRC32.
|
||||||
|
* @return 0 if the CRC32 was calculated successfully, -1 otherwise.
|
||||||
|
*/
|
||||||
|
int calculateFileCRC32(const char *filename, uint32_t *crc)
|
||||||
|
{
|
||||||
|
FILE *file = fopen(filename, "rb");
|
||||||
|
if (!file)
|
||||||
|
{
|
||||||
|
log_error("Could not open file to calculate the CRC32.");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
*crc = 0xFFFFFFFF;
|
||||||
uint8_t buffer[4096];
|
uint8_t buffer[4096];
|
||||||
size_t bytesRead;
|
size_t bytesRead;
|
||||||
|
|
||||||
@@ -171,11 +224,52 @@ void isCleanElf(char *command)
|
|||||||
{
|
{
|
||||||
for (size_t i = 0; i < bytesRead; i++)
|
for (size_t i = 0; i < bytesRead; i++)
|
||||||
{
|
{
|
||||||
crc = calcCrc32(crc, buffer[i]);
|
*crc = calcCrc32(*crc, buffer[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(file);
|
fclose(file);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasSpaces(const char *str)
|
||||||
|
{
|
||||||
|
if (!str)
|
||||||
|
return false;
|
||||||
|
while (*str)
|
||||||
|
{
|
||||||
|
if (*str == ' ')
|
||||||
|
return true;
|
||||||
|
str++;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Checks if the ELF file is clean based on its CRC32.
|
||||||
|
*
|
||||||
|
* This function calculates the CRC32 of the specified ELF file and compares it
|
||||||
|
* against a list of known clean ELF CRC32 values.
|
||||||
|
* @param command The command line string containing the path to the ELF file.
|
||||||
|
*/
|
||||||
|
void checkIfElfisClean(char *command)
|
||||||
|
{
|
||||||
|
char *last_space = strrchr(command, ' ');
|
||||||
|
size_t length;
|
||||||
|
if (last_space != NULL && strcmp(last_space, " -t") == 0)
|
||||||
|
length = (size_t)(last_space - command);
|
||||||
|
else
|
||||||
|
length = strlen(command);
|
||||||
|
|
||||||
|
char elfName[256];
|
||||||
|
strncpy(elfName, command, length);
|
||||||
|
elfName[length] = '\0';
|
||||||
|
|
||||||
|
removeDoubleQuotes(elfName);
|
||||||
|
|
||||||
|
uint32_t crc;
|
||||||
|
if (calculateFileCRC32(elfName, &crc) != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
crc = crc ^ 0xFFFFFFFF;
|
crc = crc ^ 0xFFFFFFFF;
|
||||||
|
|
||||||
if (!lookupCrcTable(crc))
|
if (!lookupCrcTable(crc))
|
||||||
@@ -196,34 +290,55 @@ void isCleanElf(char *command)
|
|||||||
*/
|
*/
|
||||||
void testModePath(char *name)
|
void testModePath(char *name)
|
||||||
{
|
{
|
||||||
|
printf("name: %s\n", name);
|
||||||
|
char *pos;
|
||||||
// Check if a different testmode elf is used
|
// Check if a different testmode elf is used
|
||||||
if (strcmp(name, "./hod4M.elf") == 0)
|
pos = strstr(name, "hod4M.elf");
|
||||||
|
if (pos != NULL)
|
||||||
{
|
{
|
||||||
strcpy(name, "./hod4testM.elf");
|
strcpy(pos, "hod4testM.elf");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(name, "./hodexRI.elf") == 0)
|
pos = strstr(name, "hodexRI.elf");
|
||||||
|
if (pos != NULL)
|
||||||
{
|
{
|
||||||
strcpy(name, "./hodextestR.elf");
|
strcpy(pos, "hodextestR.elf");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(name, "./Jennifer") == 0)
|
pos = strstr(name, "/Jennifer/\"Jennifer");
|
||||||
|
if (pos != NULL)
|
||||||
{
|
{
|
||||||
strcpy(name, "../JenTest/JenTest");
|
strcpy(pos, "/Jennifer/\"../JenTest/JenTest");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(name, "./apacheM.elf") == 0)
|
pos = strstr(name, "/Jennifer");
|
||||||
|
if (pos != NULL)
|
||||||
{
|
{
|
||||||
strcpy(name, "./apachetestM.elf");
|
strcpy(pos, "/../JenTest/JenTest");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(name, "./vt3_Lindbergh") == 0)
|
pos = strstr(name, "apacheM.elf");
|
||||||
|
if (pos != NULL)
|
||||||
{
|
{
|
||||||
strcpy(name, "./vt3_testmode");
|
strcpy(pos, "apachetestM.elf");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos = strstr(name, "/vt3_Lindbergh/\"vt3_Lindbergh");
|
||||||
|
if (pos != NULL)
|
||||||
|
{
|
||||||
|
strcpy(pos, "/vt3_Lindbergh/\"vt3_testmode");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
pos = strstr(name, "/vt3_Lindbergh");
|
||||||
|
if (pos != NULL)
|
||||||
|
{
|
||||||
|
strcpy(pos, "/vt3_testmode");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,14 +346,139 @@ void testModePath(char *name)
|
|||||||
strcat(name, " -t");
|
strcat(name, " -t");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Checks if a given path is a valid directory.
|
||||||
|
*
|
||||||
|
* This function uses the stat system call to determine if the provided path
|
||||||
|
* corresponds to a directory.
|
||||||
|
* @param path The path to check.
|
||||||
|
*/
|
||||||
|
bool isValidDirectory(const char *path)
|
||||||
|
{
|
||||||
|
struct stat statbuf;
|
||||||
|
|
||||||
|
if (stat(path, &statbuf) != 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
return S_ISDIR(statbuf.st_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Finds a suitable 32-bit library folder.
|
||||||
|
*
|
||||||
|
* This function searches for a directory that is likely to contain 32-bit
|
||||||
|
* libraries, based on a predefined list of candidate paths.
|
||||||
|
* @return A dynamically allocated string containing the path to the found
|
||||||
|
* directory, or NULL if no suitable directory is found.
|
||||||
|
*/
|
||||||
|
char *find32bLibFolder(void)
|
||||||
|
{
|
||||||
|
const char *folderCandidates[] = {"/app/lib32", "/usr/lib/i386-linux-gnu", "/usr/lib/i686-linux-gnu", "/usr/lib32", "/usr/lib"};
|
||||||
|
int numCandidates = sizeof(folderCandidates) / sizeof(folderCandidates[0]);
|
||||||
|
|
||||||
|
char currentPath[PATH_MAX];
|
||||||
|
struct stat st;
|
||||||
|
char *resultPath = NULL;
|
||||||
|
|
||||||
|
for (int i = 0; i < numCandidates; ++i)
|
||||||
|
{
|
||||||
|
int written = snprintf(currentPath, sizeof(currentPath), "%s", folderCandidates[i]);
|
||||||
|
|
||||||
|
if (written < 0 || (size_t)written >= sizeof(currentPath))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (stat(currentPath, &st) == 0 && S_ISDIR(st.st_mode))
|
||||||
|
{
|
||||||
|
size_t pathLen = strlen(currentPath);
|
||||||
|
resultPath = (char *)malloc(pathLen + 1);
|
||||||
|
|
||||||
|
if (resultPath == NULL)
|
||||||
|
{
|
||||||
|
log_fatal("Failed to allocate memory for result path.");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
strcpy(resultPath, currentPath);
|
||||||
|
return resultPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Finds the path to the LD_PRELOAD library.
|
||||||
|
*
|
||||||
|
* This function searches for the lindbergh.so library in various locations,
|
||||||
|
* including the current directory and system library folders.
|
||||||
|
* @return A dynamically allocated string containing the path to the library, or an empty string if not found.
|
||||||
|
*/
|
||||||
|
char *findLDPreloadLibrary()
|
||||||
|
{
|
||||||
|
char *foundPathPtr = NULL;
|
||||||
|
|
||||||
|
char *systemLibFolder = find32bLibFolder();
|
||||||
|
|
||||||
|
if (systemLibFolder == NULL || systemLibFolder[0] == '\0')
|
||||||
|
{
|
||||||
|
log_error("Error: library folder not found.\n");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
char fullLibPath[PATH_MAX];
|
||||||
|
|
||||||
|
int lenWritten = snprintf(fullLibPath, sizeof(fullLibPath), "%s/%s", systemLibFolder, PRELOAD_FILE_NAME);
|
||||||
|
|
||||||
|
if (lenWritten < 0 || (size_t)lenWritten >= sizeof(fullLibPath))
|
||||||
|
{
|
||||||
|
log_error("Warning: Constructed path is too long or invalid: %s/%s\n", systemLibFolder, PRELOAD_FILE_NAME);
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (access(PRELOAD_FILE_NAME, F_OK) == 0) // lindbergh.so in current folder
|
||||||
|
{
|
||||||
|
char curDir[MAX_PATH_LEN];
|
||||||
|
if (getcwd(curDir, sizeof(curDir)) == NULL)
|
||||||
|
return "";
|
||||||
|
size_t len = strlen(curDir) + strlen(PRELOAD_FILE_NAME) + 1;
|
||||||
|
foundPathPtr = (char *)malloc(len + 1);
|
||||||
|
if (foundPathPtr == NULL)
|
||||||
|
return "";
|
||||||
|
else
|
||||||
|
snprintf(foundPathPtr, len + 1, "%s/%s", curDir, PRELOAD_FILE_NAME);
|
||||||
|
}
|
||||||
|
else if (access(fullLibPath, F_OK) == 0) // lindbergh.so in system lib folder
|
||||||
|
{
|
||||||
|
foundPathPtr = (char *)malloc(strlen(fullLibPath) + 1);
|
||||||
|
if (foundPathPtr == NULL)
|
||||||
|
return "";
|
||||||
|
else
|
||||||
|
strcpy(foundPathPtr, fullLibPath);
|
||||||
|
}
|
||||||
|
else // lindbergh.so in the ELF folder.
|
||||||
|
{
|
||||||
|
return PRELOAD_FILE_NAME;
|
||||||
|
}
|
||||||
|
return foundPathPtr;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Makes sure the environment variables are set correctly
|
* Makes sure the environment variables are set correctly
|
||||||
|
*
|
||||||
|
* This function sets the LD_LIBRARY_PATH and LD_PRELOAD environment variables
|
||||||
|
* to ensure that the game can find the necessary libraries and preload the
|
||||||
|
* lindbergh.so library.
|
||||||
|
*
|
||||||
|
* @param ldLibPath The path to the LD_PRELOAD library.
|
||||||
|
* @param curDir The current working directory.
|
||||||
|
* @param gameDir The directory where the game is located.
|
||||||
|
* @param zink Flag indicating whether to use Zink.
|
||||||
|
* @param nvidia Flag indicating whether to use NVIDIA GPU.
|
||||||
* to run the game.
|
* to run the game.
|
||||||
*/
|
*/
|
||||||
void setEnvironmentVariables(int isFlatpak, int zink, int nvidia)
|
void setEnvironmentVariables(char *ldLibPath, char *curDir, char *gameDir, int zink, int nvidia)
|
||||||
{
|
{
|
||||||
// Ensure the library path is set correctly
|
// Ensure the library path is set correctly
|
||||||
char libraryPath[128] = {0};
|
char libraryPath[MAX_PATH_LEN] = {0};
|
||||||
|
|
||||||
const char *currentLibraryPath = getenv(LD_LIBRARY_PATH);
|
const char *currentLibraryPath = getenv(LD_LIBRARY_PATH);
|
||||||
if (currentLibraryPath != NULL)
|
if (currentLibraryPath != NULL)
|
||||||
@@ -249,13 +489,33 @@ void setEnvironmentVariables(int isFlatpak, int zink, int nvidia)
|
|||||||
|
|
||||||
strcat(libraryPath, ".:lib:../lib");
|
strcat(libraryPath, ".:lib:../lib");
|
||||||
|
|
||||||
|
char *tmpLibPath = dirname(strdup(ldLibPath));
|
||||||
|
|
||||||
|
if (strcmp(tmpLibPath, ".") != 0)
|
||||||
|
{
|
||||||
|
strcat(libraryPath, ":");
|
||||||
|
strcat(libraryPath, tmpLibPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (curDir != NULL && curDir[0] != '\0' && strcmp(curDir, tmpLibPath) != 0)
|
||||||
|
{
|
||||||
|
strcat(libraryPath, ":");
|
||||||
|
strcat(libraryPath, curDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gameDir != NULL && gameDir[0] != '\0')
|
||||||
|
{
|
||||||
|
strcat(libraryPath, ":");
|
||||||
|
strcat(libraryPath, gameDir);
|
||||||
|
}
|
||||||
|
|
||||||
setenv(LD_LIBRARY_PATH, libraryPath, 1);
|
setenv(LD_LIBRARY_PATH, libraryPath, 1);
|
||||||
|
|
||||||
// Ensure the preload path is set correctly
|
// Ensure the preload path is set correctly
|
||||||
if (!isFlatpak)
|
if (strcmp(ldLibPath, "") != 0)
|
||||||
setenv(LD_PRELOAD, PRELOAD_FILE_NAME, 1);
|
setenv(LD_PRELOAD, ldLibPath, 1);
|
||||||
else
|
else
|
||||||
setenv(LD_PRELOAD, PRELOAD_FILE_FLATPAK, 1);
|
setenv(LD_PRELOAD, PRELOAD_FILE_NAME, 1); // Should not reach here
|
||||||
|
|
||||||
if (zink)
|
if (zink)
|
||||||
setenv("MESA_LOADER_DRIVER_OVERRIDE", "zink", 1);
|
setenv("MESA_LOADER_DRIVER_OVERRIDE", "zink", 1);
|
||||||
@@ -265,9 +525,15 @@ void setEnvironmentVariables(int isFlatpak, int zink, int nvidia)
|
|||||||
setenv("__GLX_VENDOR_LIBRARY_NAME", "nvidia", 1);
|
setenv("__GLX_VENDOR_LIBRARY_NAME", "nvidia", 1);
|
||||||
setenv("__NV_PRIME_RENDER_OFFLOAD", "1", 1);
|
setenv("__NV_PRIME_RENDER_OFFLOAD", "1", 1);
|
||||||
}
|
}
|
||||||
|
setenv("LINDBERGH_LOADER_CURRENT_DIR", curDir, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @brief Prints the usage information for the Lindbergh loader.
|
||||||
|
*
|
||||||
|
* This function displays the command-line options and usage instructions for
|
||||||
|
* the Lindbergh loader.
|
||||||
|
* @param argv The command-line arguments array.
|
||||||
* Prints the usage for the loader
|
* Prints the usage for the loader
|
||||||
*/
|
*/
|
||||||
void printUsage(char *argv[])
|
void printUsage(char *argv[])
|
||||||
@@ -283,9 +549,16 @@ void printUsage(char *argv[])
|
|||||||
printf(" --version Displays the version of the loader and team's names\n");
|
printf(" --version Displays the version of the loader and team's names\n");
|
||||||
printf(" --help Displays this usage text\n");
|
printf(" --help Displays this usage text\n");
|
||||||
printf(" --config | -c Specifies configuration path\n");
|
printf(" --config | -c Specifies configuration path\n");
|
||||||
|
printf(" --gamepath | -g Specifies game path without ELF name\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @brief Lists available evdev controllers and their inputs.
|
||||||
|
*
|
||||||
|
* This function initializes the controller system and then iterates through
|
||||||
|
* the available controllers, printing their names and the names of their
|
||||||
|
* inputs.
|
||||||
|
* @return EXIT_SUCCESS on success, EXIT_FAILURE on failure.
|
||||||
* Lists available evdev controllers and their inputs
|
* Lists available evdev controllers and their inputs
|
||||||
*/
|
*/
|
||||||
int listControllers()
|
int listControllers()
|
||||||
@@ -319,8 +592,10 @@ int listControllers()
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Small utility to automatically detect the game and run it without
|
* @brief Prints the version information of the Lindbergh loader.
|
||||||
* having to type a long string in.
|
*
|
||||||
|
* This function displays the version number of the Lindbergh loader and the
|
||||||
|
* names of the team members.
|
||||||
*/
|
*/
|
||||||
void printVersion() {
|
void printVersion() {
|
||||||
printf("Lindbergh Loader v%d.%d\n", MAJOR_VERSION, MINOR_VERSION);
|
printf("Lindbergh Loader v%d.%d\n", MAJOR_VERSION, MINOR_VERSION);
|
||||||
@@ -333,60 +608,14 @@ void printVersion() {
|
|||||||
*/
|
*/
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
// Check for --version before directory operations
|
char gameELF[128] = {0};
|
||||||
|
char gameDir[MAX_PATH_LEN] = {0};
|
||||||
|
|
||||||
if (argc > 1 && strcmp(argv[1], "--version") == 0) {
|
if (argc > 1 && strcmp(argv[1], "--version") == 0) {
|
||||||
printVersion();
|
printVersion();
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Look for the games
|
|
||||||
struct dirent *ent;
|
|
||||||
DIR *dir = opendir(".");
|
|
||||||
|
|
||||||
if (dir == NULL)
|
|
||||||
{
|
|
||||||
log_error("Could not list files in current directory.");
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *game = NULL;
|
|
||||||
|
|
||||||
int lindberghSharedObjectFound = 0;
|
|
||||||
int isFlatpak = 0;
|
|
||||||
|
|
||||||
while ((ent = readdir(dir)) != NULL)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (ent->d_type != DT_REG)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strcmp(ent->d_name, PRELOAD_FILE_NAME) == 0)
|
|
||||||
{
|
|
||||||
lindberghSharedObjectFound = 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
int index = 0;
|
|
||||||
while (game == NULL)
|
|
||||||
{
|
|
||||||
if (strcmp(games[index], "END") == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (strcmp(ent->d_name, games[index]) == 0)
|
|
||||||
{
|
|
||||||
game = games[index];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (game != NULL && lindberghSharedObjectFound)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
closedir(dir);
|
|
||||||
|
|
||||||
if (argc > 1 && strcmp(argv[1], "--help") == 0)
|
if (argc > 1 && strcmp(argv[1], "--help") == 0)
|
||||||
{
|
{
|
||||||
printUsage(argv);
|
printUsage(argv);
|
||||||
@@ -397,62 +626,46 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
return listControllers();
|
return listControllers();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lindberghSharedObjectFound)
|
|
||||||
{
|
|
||||||
FILE *file = fopen(PRELOAD_FILE_FLATPAK, "r");
|
|
||||||
if (file)
|
|
||||||
{
|
|
||||||
fclose(file);
|
|
||||||
isFlatpak = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
log_error("The preload object lindbergh.so was not found in this directory.");
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build up the command to start the game
|
// Build up the command to start the game
|
||||||
|
int testMode = false;
|
||||||
int testMode = 0;
|
int gdb = false;
|
||||||
int gdb = 0;
|
int zink = false;
|
||||||
int zink = 0;
|
int nvidia = false;
|
||||||
int nvidia = 0;
|
int forceGame = false;
|
||||||
int forceGame = 0;
|
int segaboot = false;
|
||||||
int segaboot = 0;
|
char *extConfigPath = NULL;
|
||||||
char extConfigPath[PATH_MAX] = {0};
|
char *passedGamePath = NULL;
|
||||||
char forceGamePath[128] = {0};
|
char *forcedGamePath = NULL;
|
||||||
|
|
||||||
for (int i = 1; i < argc; i++)
|
for (int i = 1; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--test") == 0)
|
if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--test") == 0)
|
||||||
{
|
{
|
||||||
testMode = 1;
|
testMode = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(argv[i], "-s") == 0 || strcmp(argv[i], "--segaboot") == 0)
|
if (strcmp(argv[i], "-s") == 0 || strcmp(argv[i], "--segaboot") == 0)
|
||||||
{
|
{
|
||||||
segaboot = 1;
|
segaboot = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(argv[i], "--gdb") == 0)
|
if (strcmp(argv[i], "--gdb") == 0)
|
||||||
{
|
{
|
||||||
gdb = 1;
|
gdb = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(argv[i], "-z") == 0 || strcmp(argv[i], "--zink") == 0)
|
if (strcmp(argv[i], "-z") == 0 || strcmp(argv[i], "--zink") == 0)
|
||||||
{
|
{
|
||||||
zink = 1;
|
zink = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(argv[i], "-n") == 0 || strcmp(argv[i], "--nvidia") == 0)
|
if (strcmp(argv[i], "-n") == 0 || strcmp(argv[i], "--nvidia") == 0)
|
||||||
{
|
{
|
||||||
nvidia = 1;
|
nvidia = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -462,42 +675,158 @@ int main(int argc, char *argv[])
|
|||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
strncpy(extConfigPath, argv[i + 1], PATH_MAX);
|
extConfigPath = strdup(argv[i + 1]);
|
||||||
i += 1;
|
i += 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcmp(argv[i], "-g") == 0 || strcmp(argv[i], "--gamepath") == 0)
|
||||||
|
{
|
||||||
|
if (i + 1 >= argc)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
passedGamePath = strdup(argv[i + 1]);
|
||||||
|
|
||||||
|
i += 1;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
// Treat the argument as the game name
|
// Treat the argument as the game name
|
||||||
strcpy(forceGamePath, argv[i]);
|
forcedGamePath = strdup(argv[i]);
|
||||||
forceGame = 1;
|
forceGame = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ensure environment variables are set correctly
|
// We save the current dir to return to it later
|
||||||
setEnvironmentVariables(isFlatpak, zink, nvidia);
|
char curDir[MAX_PATH_LEN];
|
||||||
|
if (getcwd(curDir, sizeof(curDir)) == NULL)
|
||||||
|
{
|
||||||
|
log_error("Error: could not get the current directory.");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
char command[128] = {0};
|
if (hasSpaces(curDir))
|
||||||
strcpy(command, "./");
|
{
|
||||||
|
log_warn("The current path contains spaces, this most likely will cause issues.");
|
||||||
|
log_warn("Please, make sure you don't use spaces in the path.");
|
||||||
|
}
|
||||||
|
|
||||||
|
char command[PATH_MAX] = {0};
|
||||||
|
char *forcedGameDir;
|
||||||
|
char *forcedGameElf;
|
||||||
if (forceGame)
|
if (forceGame)
|
||||||
{
|
{
|
||||||
strcat(command, forceGamePath);
|
if (forcedGamePath != NULL)
|
||||||
}
|
{
|
||||||
else if (segaboot)
|
forcedGameDir = dirname(strdup(forcedGamePath));
|
||||||
{
|
forcedGameElf = basename(strdup(forcedGamePath));
|
||||||
strcat(command, "segaboot -t");
|
|
||||||
|
if (strcmp(forcedGameDir, ".") == 0) // Only the ELF file name was passed.
|
||||||
|
{
|
||||||
|
if (passedGamePath[0] != '\0')
|
||||||
|
snprintf(gameDir, MAX_PATH_LEN, "%s", passedGamePath);
|
||||||
|
else
|
||||||
|
snprintf(gameDir, MAX_PATH_LEN, "./");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (passedGamePath != NULL) // ELF with path and also -g option pointing to a folder
|
||||||
|
log_warn("Warning: elf passed with a path, and -g option enabled. Ignoring -g option.");
|
||||||
|
|
||||||
|
snprintf(gameDir, MAX_PATH_LEN, "%s", forcedGameDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(forcedGameElf, ".") != 0)
|
||||||
|
strcpy(gameELF, forcedGameElf);
|
||||||
|
// Check if the passed folder is valid
|
||||||
|
if (!isValidDirectory(gameDir))
|
||||||
|
{
|
||||||
|
log_error("%s is not a valid directory here.", gameDir);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (game == NULL)
|
// Look for the game ELF's
|
||||||
|
struct dirent *ent;
|
||||||
|
DIR *dir;
|
||||||
|
|
||||||
|
if (passedGamePath != NULL && passedGamePath[0] != '\0')
|
||||||
{
|
{
|
||||||
log_error("No lindbergh game found in this directory.");
|
snprintf(gameDir, MAX_PATH_LEN, "%s", passedGamePath);
|
||||||
|
|
||||||
|
// Check if the passed folder is valid
|
||||||
|
if (!isValidDirectory(gameDir))
|
||||||
|
{
|
||||||
|
log_error("%s is not a valid directory.", gameDir);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
dir = opendir(gameDir);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf(gameDir, MAX_PATH_LEN, "%s", curDir);
|
||||||
|
dir = opendir(curDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (dir == NULL)
|
||||||
|
{
|
||||||
|
log_error("Could not list files in current directory.");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
strcat(command, game);
|
|
||||||
|
bool found = false;
|
||||||
|
while ((ent = readdir(dir)) != NULL)
|
||||||
|
{
|
||||||
|
if (ent->d_type != DT_REG)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
int index = 0;
|
||||||
|
while (!found)
|
||||||
|
{
|
||||||
|
if (strcmp(games[index], "END") == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (strcmp(ent->d_name, games[index]) == 0)
|
||||||
|
{
|
||||||
|
strcpy(gameELF, games[index]);
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
index++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (segaboot)
|
||||||
|
{
|
||||||
|
strcpy(gameELF, "segaboot");
|
||||||
|
testMode = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gameELF[0] == '\0')
|
||||||
|
{
|
||||||
|
log_error("No lindbergh game found in this directory.");
|
||||||
|
printUsage(argv);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
sprintf(command, "\"%s/\"%s", gameDir, gameELF);
|
||||||
|
|
||||||
|
char *ldPreloadLibrary = findLDPreloadLibrary();
|
||||||
|
|
||||||
|
if (strcmp(curDir, gameDir) == 0)
|
||||||
|
ldPreloadLibrary = PRELOAD_FILE_NAME;
|
||||||
|
|
||||||
|
// Ensure environment variables are set correctly
|
||||||
|
setEnvironmentVariables(ldPreloadLibrary, curDir, gameDir, zink, nvidia);
|
||||||
|
|
||||||
if (testMode)
|
if (testMode)
|
||||||
testModePath(command);
|
testModePath(command);
|
||||||
|
|
||||||
isCleanElf(command);
|
checkIfElfisClean(command);
|
||||||
|
|
||||||
if (gdb)
|
if (gdb)
|
||||||
{
|
{
|
||||||
@@ -507,12 +836,36 @@ int main(int argc, char *argv[])
|
|||||||
strcpy(command, temp);
|
strcpy(command, temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (extConfigPath[0] != '\0')
|
if (extConfigPath != NULL && extConfigPath[0] != '\0')
|
||||||
{
|
{
|
||||||
|
if (hasSpaces(extConfigPath))
|
||||||
|
{
|
||||||
|
log_warn("The config path contains spaces, this most likely will cause issues.");
|
||||||
|
log_warn("Please, make sure you don't use spaces in the path.");
|
||||||
|
}
|
||||||
setenv(LINDBERGH_CONFIG_PATH, extConfigPath, 1);
|
setenv(LINDBERGH_CONFIG_PATH, extConfigPath, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
log_info("Starting $ %s", command);
|
log_info("Starting $ %s", command);
|
||||||
|
|
||||||
return system(command);
|
if (gameDir[0] != '\0')
|
||||||
|
{
|
||||||
|
if (chdir(gameDir) != 0)
|
||||||
|
{
|
||||||
|
log_error("Could not change to game path.");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int sysCmd = system(command);
|
||||||
|
|
||||||
|
if (gameDir[0] != '\0')
|
||||||
|
{
|
||||||
|
if (chdir(curDir) != 0)
|
||||||
|
{
|
||||||
|
log_error("Could not return to the original directory.");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return sysCmd;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-4
@@ -1,5 +1,4 @@
|
|||||||
#ifndef LINDBERGH_LOADER_LOG_H
|
#pragma once
|
||||||
#define LINDBERGH_LOADER_LOG_H
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
@@ -46,5 +45,3 @@ LogFormattedMessage logFormatMessage(const char *message, va_list args);
|
|||||||
FILE* logGetStream();
|
FILE* logGetStream();
|
||||||
void logInitTimer();
|
void logInitTimer();
|
||||||
void logGetElapsedTime(long *seconds, long *milliseconds);
|
void logGetElapsedTime(long *seconds, long *milliseconds);
|
||||||
|
|
||||||
#endif //LINDBERGH_LOADER_LOG_H
|
|
||||||
@@ -212,8 +212,8 @@ void *readJVSFrameThread(void * arg)
|
|||||||
* @param fd
|
* @param fd
|
||||||
* @return 0|1
|
* @return 0|1
|
||||||
*/
|
*/
|
||||||
int startJVSFrameThread(int * fd) {
|
int startJVSFrameThread(int *fd)
|
||||||
int fdlocal = *((int *) fd);
|
{
|
||||||
printf("SERIAL: starting thread.\n");
|
printf("SERIAL: starting thread.\n");
|
||||||
|
|
||||||
// Clean shared JVS frame buffer
|
// Clean shared JVS frame buffer
|
||||||
@@ -236,17 +236,21 @@ int startJVSFrameThread(int * fd) {
|
|||||||
* Return a JVSFrame structure with empty or full data, no in between
|
* Return a JVSFrame structure with empty or full data, no in between
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
JVSFrame readJVSFrameFromThread() {
|
JVSFrame readJVSFrameFromThread()
|
||||||
|
{
|
||||||
JVSFrame frame;
|
JVSFrame frame;
|
||||||
// Lock while reading/writing to shared frame
|
// Lock while reading/writing to shared frame
|
||||||
pthread_mutex_lock(&jvsBuffer_lock);
|
pthread_mutex_lock(&jvsBuffer_lock);
|
||||||
|
|
||||||
// Check if we have a valid frame
|
// Check if we have a valid frame
|
||||||
if (jvsFrameBuffer.ready == 1) {
|
if (jvsFrameBuffer.ready == 1)
|
||||||
|
{
|
||||||
frame = jvsFrameBuffer;
|
frame = jvsFrameBuffer;
|
||||||
// It has been red, we disable this frame
|
// It has been read, we disable this frame
|
||||||
jvsFrameBuffer.ready = 0;
|
jvsFrameBuffer.ready = 0;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
frame.ready = 0;
|
frame.ready = 0;
|
||||||
frame.size = 0;
|
frame.size = 0;
|
||||||
memset(frame.buffer, 0, JVSBUFFER_SIZE);
|
memset(frame.buffer, 0, JVSBUFFER_SIZE);
|
||||||
|
|||||||
+5
-11
@@ -628,11 +628,9 @@ int initPatch()
|
|||||||
|
|
||||||
if (GPUVendor != NVIDIA_GPU)
|
if (GPUVendor != NVIDIA_GPU)
|
||||||
{
|
{
|
||||||
cacheModedShaderFiles();
|
|
||||||
loadLibCg();
|
loadLibCg();
|
||||||
|
cacheModedShaderFiles();
|
||||||
cacheNnstdshader();
|
cacheNnstdshader();
|
||||||
patchMemory(0x082d4437, "9090909090"); // Stop the folder rename
|
|
||||||
patchMemory(0x088a6127, "66732f636f6d70696c65646d657361"); // Change folder to compiledshdmesa
|
|
||||||
patchMemory(0x082646b3, "01"); // Compile using CGC
|
patchMemory(0x082646b3, "01"); // Compile using CGC
|
||||||
replaceCallAtAddress(0x082d48ac, compileWithCGC);
|
replaceCallAtAddress(0x082d48ac, compileWithCGC);
|
||||||
replaceCallAtAddress(0x082d4b3b, compileWithCGC);
|
replaceCallAtAddress(0x082d4b3b, compileWithCGC);
|
||||||
@@ -2059,12 +2057,9 @@ int initPatch()
|
|||||||
{
|
{
|
||||||
loadLibCg();
|
loadLibCg();
|
||||||
cacheNnstdshader();
|
cacheNnstdshader();
|
||||||
patchMemory(0x08200c17, "9090909090"); // Stop the folder rename
|
|
||||||
patchMemory(0x084173e7, "66732f636f6d70696c65646d657361"); // Change folder to compiledshdmesa
|
|
||||||
patchMemory(0x080b3d71, "01"); // Compile using CGC
|
patchMemory(0x080b3d71, "01"); // Compile using CGC
|
||||||
replaceCallAtAddress(0x082015bf, compileWithCGC);
|
replaceCallAtAddress(0x082015bf, compileWithCGC);
|
||||||
replaceCallAtAddress(0x082012c1, compileWithCGC);
|
replaceCallAtAddress(0x082012c1, compileWithCGC);
|
||||||
// patchMemory(0x080b3d65, "00"); // Force recompile shaders
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -2141,6 +2136,7 @@ int initPatch()
|
|||||||
detourFunction(0x084d44fc, amDipswSetLed);
|
detourFunction(0x084d44fc, amDipswSetLed);
|
||||||
detourFunction(0x084d4485, amDipswGetData);
|
detourFunction(0x084d4485, amDipswGetData);
|
||||||
patchMemory(0x0804edb2, "9090909090"); //__intel_new_proc_init_P
|
patchMemory(0x0804edb2, "9090909090"); //__intel_new_proc_init_P
|
||||||
|
detourFunction(0x08178e6c, stubRetOne); // _ZN7am_ctrl18SetNetworkAddrEth0Ejj.
|
||||||
|
|
||||||
detourFunction(0x0804e594, gl_XGetProcAddressARB);
|
detourFunction(0x0804e594, gl_XGetProcAddressARB);
|
||||||
srtvElfShaderPatcher();
|
srtvElfShaderPatcher();
|
||||||
@@ -2487,9 +2483,8 @@ int initPatch()
|
|||||||
// Mesa Patches
|
// Mesa Patches
|
||||||
if (GPUVendor != NVIDIA_GPU)
|
if (GPUVendor != NVIDIA_GPU)
|
||||||
{
|
{
|
||||||
patchMemory(0x08503bfa, "6d657361"); // Rename compile folder to compmesa
|
|
||||||
cacheModedShaderFiles();
|
|
||||||
loadLibCg();
|
loadLibCg();
|
||||||
|
cacheModedShaderFiles();
|
||||||
cacheNnstdshader();
|
cacheNnstdshader();
|
||||||
replaceCallAtAddress(0x08370aa7, compileWithCGC);
|
replaceCallAtAddress(0x08370aa7, compileWithCGC);
|
||||||
replaceCallAtAddress(0x08370bb6, compileWithCGC);
|
replaceCallAtAddress(0x08370bb6, compileWithCGC);
|
||||||
@@ -2550,10 +2545,9 @@ int initPatch()
|
|||||||
if (GPUVendor != NVIDIA_GPU)
|
if (GPUVendor != NVIDIA_GPU)
|
||||||
{
|
{
|
||||||
loadLibCg();
|
loadLibCg();
|
||||||
cacheNnstdshader();
|
|
||||||
patchMemory(0x081ef9d8, "01"); // Force the game to recompile the shaders using cgc
|
|
||||||
patchMemory(0x08413f04, "646d657361"); // Changes compiledshader folder to compiledshdmesa
|
|
||||||
cacheModedShaderFiles();
|
cacheModedShaderFiles();
|
||||||
|
cacheNnstdshader();
|
||||||
|
patchMemory(0x081ef9d8, "01"); // Force the game to recompile the shaders using cgc
|
||||||
replaceCallAtAddress(0x08259fe5, compileWithCGC);
|
replaceCallAtAddress(0x08259fe5, compileWithCGC);
|
||||||
replaceCallAtAddress(0x0825a089, compileWithCGC);
|
replaceCallAtAddress(0x0825a089, compileWithCGC);
|
||||||
}
|
}
|
||||||
|
|||||||
+195
-8
@@ -214,13 +214,12 @@ void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
// case THE_HOUSE_OF_THE_DEAD_4_REVA:
|
|
||||||
// case THE_HOUSE_OF_THE_DEAD_4_REVB:
|
|
||||||
// case THE_HOUSE_OF_THE_DEAD_4_REVC:
|
|
||||||
case THE_HOUSE_OF_THE_DEAD_4_REVA_TEST:
|
case THE_HOUSE_OF_THE_DEAD_4_REVA_TEST:
|
||||||
case THE_HOUSE_OF_THE_DEAD_4_REVB_TEST:
|
case THE_HOUSE_OF_THE_DEAD_4_REVB_TEST:
|
||||||
case THE_HOUSE_OF_THE_DEAD_4_REVC_TEST:
|
case THE_HOUSE_OF_THE_DEAD_4_REVC_TEST:
|
||||||
case THE_HOUSE_OF_THE_DEAD_EX_TEST:
|
case THE_HOUSE_OF_THE_DEAD_EX_TEST:
|
||||||
|
case THE_HOUSE_OF_THE_DEAD_4_SPECIAL_REVB_TEST:
|
||||||
|
case THE_HOUSE_OF_THE_DEAD_4_SPECIAL_TEST:
|
||||||
{
|
{
|
||||||
if (width == 640 && height == 480)
|
if (width == 640 && height == 480)
|
||||||
{
|
{
|
||||||
@@ -1268,6 +1267,172 @@ void glVertex3fHOD4(GLfloat x, GLfloat y, GLfloat z)
|
|||||||
_glVertex3f(x, y, z);
|
_glVertex3f(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tooSpicySC(uint32_t param_1, uint32_t param_2)
|
||||||
|
{
|
||||||
|
myEnableScaling = true;
|
||||||
|
SDL_WarpMouseInWindow(SDLwindow, 1280 / 2, 768 / 2);
|
||||||
|
((void (*)(uint32_t, uint32_t))0x082fa77c)(param_1, param_2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void tooSpicyPR(uint32_t param_1, uint32_t param_2)
|
||||||
|
{
|
||||||
|
myEnableScaling = false;
|
||||||
|
((void (*)(uint32_t, uint32_t))0x081eb4d4)(param_1, param_2);
|
||||||
|
}
|
||||||
|
|
||||||
|
int tooSpicyVsprintf(char *str, const char *format, va_list arg)
|
||||||
|
{
|
||||||
|
int (*_vsprintf)(char *str, const char *format, va_list arg) = dlsym(RTLD_NEXT, "vsprintf");
|
||||||
|
|
||||||
|
int res = _vsprintf(str, format, arg);
|
||||||
|
|
||||||
|
if (strcmp(str, "Additional 475") == 0)
|
||||||
|
{
|
||||||
|
myEnableScaling = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
void glVertex3f2SP(GLfloat x, GLfloat y, GLfloat z)
|
||||||
|
{
|
||||||
|
int (*_glVertex3f)(GLfloat x, GLfloat y, GLfloat z) = dlsym(RTLD_NEXT, "glVertex3f");
|
||||||
|
|
||||||
|
void *returnAddress = __builtin_return_address(0);
|
||||||
|
|
||||||
|
float scaleX = gWidth / 1280.0f;
|
||||||
|
float scaleY = gHeight / 768.0f;
|
||||||
|
|
||||||
|
float TestX = ((((gWidth - 1280.0) / 2.0) * 1.1116317809) / 1280.0) * (1.5 / scaleX);
|
||||||
|
float TestY = ((((gHeight - 768.0) / 2.0) * 0.666979044) / 768.0) * (1.5 / scaleX);
|
||||||
|
|
||||||
|
float OffsetX = TestX; // test
|
||||||
|
float OffsetY = TestY;
|
||||||
|
|
||||||
|
float scaleZ = fabs(z) / 1.510000;
|
||||||
|
|
||||||
|
float AdjOffsetX = OffsetX * scaleZ;
|
||||||
|
float AdjOffsetY = OffsetY * scaleZ;
|
||||||
|
|
||||||
|
if (z == -3.000000f)
|
||||||
|
{ // videos
|
||||||
|
}
|
||||||
|
else if (z == -1.010000f)
|
||||||
|
{ // bd main
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.510000f)
|
||||||
|
{ // logo - coin/start - 2D
|
||||||
|
if (curTextureID == 497) // right
|
||||||
|
{
|
||||||
|
x -= OffsetX;
|
||||||
|
y -= OffsetY;
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (curTextureID == 498)
|
||||||
|
{ // deadend
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x += OffsetX;
|
||||||
|
y -= OffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (z == -1.460000f)
|
||||||
|
{ // 2D title
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.490000f)
|
||||||
|
{ // 2D title
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.500000f)
|
||||||
|
{ // 2D title
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.310000f)
|
||||||
|
{ // 2D
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.210000f)
|
||||||
|
{ // 2D
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.5109999180f)
|
||||||
|
{ // 2D
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.200000f)
|
||||||
|
{ // target - select
|
||||||
|
|
||||||
|
if (curTextureID == 454 || curTextureID == 461 || curTextureID == 456)
|
||||||
|
{ // 457 X - 454 461 456 O
|
||||||
|
|
||||||
|
if (myEnableScaling)
|
||||||
|
{
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (z == -1.710000f)
|
||||||
|
{ // 2D
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z > -1.85f)
|
||||||
|
{ // 2d
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
_glVertex3f(x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
void glVertex3fHarley(GLfloat x, GLfloat y, GLfloat z)
|
void glVertex3fHarley(GLfloat x, GLfloat y, GLfloat z)
|
||||||
{
|
{
|
||||||
int (*_glVertex3f)(GLfloat x, GLfloat y, GLfloat z) = dlsym(RTLD_NEXT, "glVertex3f");
|
int (*_glVertex3f)(GLfloat x, GLfloat y, GLfloat z) = dlsym(RTLD_NEXT, "glVertex3f");
|
||||||
@@ -1287,11 +1452,6 @@ void glVertex3fHarley(GLfloat x, GLfloat y, GLfloat z)
|
|||||||
y *= scaleY;
|
y *= scaleY;
|
||||||
}
|
}
|
||||||
void *addr = __builtin_return_address(0);
|
void *addr = __builtin_return_address(0);
|
||||||
// printf("glVertex3f is hooked: x=%f, y=%f, z=%f\n", x, y, z);
|
|
||||||
// printf("z values: %.10f\n", z);
|
|
||||||
|
|
||||||
// if ( z == -3517.2272949219f){ //1360x768
|
|
||||||
// if ( z == -4271.795898f){ //900p
|
|
||||||
if (z == -5300.7529296875)
|
if (z == -5300.7529296875)
|
||||||
{ // 1080p
|
{ // 1080p
|
||||||
printf("glVertex3f hooked: x=%f, y=%f, z=%f, addr: %p\n", x, y, z, addr);
|
printf("glVertex3f hooked: x=%f, y=%f, z=%f, addr: %p\n", x, y, z, addr);
|
||||||
@@ -2656,6 +2816,23 @@ int initResolutionPatches()
|
|||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
setVariable(0x08785b80, gWidth); // main
|
||||||
|
setVariable(0x08785b84, gHeight);
|
||||||
|
|
||||||
|
patchMemory(0x082a3222, "02");
|
||||||
|
setVariable(0x08785ad8, 1360); // sprite res 1280x768
|
||||||
|
setVariable(0x08785adc, 768);
|
||||||
|
setVariable(0x087859b8, 1360); // sprite res 640x480
|
||||||
|
setVariable(0x087859bc, 768);
|
||||||
|
|
||||||
|
patchMemory(0x081775d2, "b801000000"); // target
|
||||||
|
patchMemory(0x0804e5d2, "909090909090");
|
||||||
|
|
||||||
|
// detourFunction(0x0804d254, glVertex3fHODEX);
|
||||||
|
|
||||||
|
setVariable(0x087aa080, gWidth); // render res
|
||||||
|
patchMemory(0x0804e60c, "909090909090");
|
||||||
|
patchMemory(0x0828cc2f, "909090909090");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TOO_SPICY:
|
case TOO_SPICY:
|
||||||
@@ -2670,6 +2847,16 @@ int initResolutionPatches()
|
|||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
setVariable(0x08202b22, gWidth); // render res
|
||||||
|
patchMemory(0x08202b19, "74");
|
||||||
|
setVariable(0x08664410, gWidth); // 1280x768
|
||||||
|
setVariable(0x08664414, gHeight);
|
||||||
|
detourFunction(0x0804d0d0, glVertex3f2SP);
|
||||||
|
detourFunction(0x0804dda0, myGlBindTexture);
|
||||||
|
replaceCallAtAddress(0x080d96ff, tooSpicySC);
|
||||||
|
replaceCallAtAddress(0x080da026, tooSpicyPR);
|
||||||
|
detourFunction(0x0804ce10, tooSpicyVsprintf);
|
||||||
|
patchMemory(0x081f96b9, "02"); // 5
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TOO_SPICY_TEST:
|
case TOO_SPICY_TEST:
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#ifndef __i386__
|
#ifndef __i386__
|
||||||
#define __i386__
|
#define __i386__
|
||||||
|
|
||||||
#include "shader_work/vf5.h"
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#endif
|
#endif
|
||||||
#undef __x86_64__
|
#undef __x86_64__
|
||||||
@@ -23,6 +22,7 @@
|
|||||||
#include "../libxdiff/xdiff/xdiff.h"
|
#include "../libxdiff/xdiff/xdiff.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "patch.h"
|
#include "patch.h"
|
||||||
|
#include "log.h"
|
||||||
|
|
||||||
#include "shader_work/2spicy.h"
|
#include "shader_work/2spicy.h"
|
||||||
#include "shader_work/abc.h"
|
#include "shader_work/abc.h"
|
||||||
@@ -93,8 +93,8 @@ char *replaceSubstring(const char *buffer, int start, int end, const char *searc
|
|||||||
maxOccurrences++;
|
maxOccurrences++;
|
||||||
tmp += searchLen;
|
tmp += searchLen;
|
||||||
}
|
}
|
||||||
int maxNewLen = (bufferLen + (maxOccurrences * (replaceLen - searchLen))) +
|
int maxNewLen =
|
||||||
15; // 15 instead of 1 because it crashes with SRTV for no reason??
|
(bufferLen + (maxOccurrences * (replaceLen - searchLen))) + 15; // 15 instead of 1 because it crashes with SRTV for no reason??
|
||||||
|
|
||||||
char *newBuffer = malloc(maxNewLen);
|
char *newBuffer = malloc(maxNewLen);
|
||||||
memset(newBuffer, '\0', maxNewLen);
|
memset(newBuffer, '\0', maxNewLen);
|
||||||
@@ -1542,41 +1542,99 @@ int parseCgcArgs(const char *input, const char ***compilerArgs, const char **out
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void loadLibCg()
|
char *findLibCg()
|
||||||
{
|
{
|
||||||
int isFlatpak = 0;
|
const char *foundPath = NULL;
|
||||||
void *handle = dlopen("./libCg.so", RTLD_NOW);
|
FILE *libCgF = NULL;
|
||||||
if (!handle)
|
|
||||||
|
char *pathsToCheck[] = {NULL, "/app/lib32/libCg2.so", "./libCg.so", NULL};
|
||||||
|
|
||||||
|
if (strcmp(getConfig()->libCgPath, "") != 0)
|
||||||
{
|
{
|
||||||
handle = dlopen("/app/lib32/libCg2.so", RTLD_NOW);
|
pathsToCheck[0] = getConfig()->libCgPath;
|
||||||
if (!handle)
|
}
|
||||||
|
|
||||||
|
const char *currentDir = getenv("LINDBERGH_LOADER_CURRENT_DIR");
|
||||||
|
if (currentDir != NULL)
|
||||||
|
{
|
||||||
|
size_t pathLen = strlen(currentDir) + strlen("/libCg.so") + 1;
|
||||||
|
pathsToCheck[3] = malloc(pathLen);
|
||||||
|
if (pathsToCheck[3] != NULL)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Error: Unable to load library libCg.so %s\n", dlerror());
|
snprintf(pathsToCheck[3], pathLen, "%s/%s", currentDir, "libCg.so");
|
||||||
fprintf(stderr, "Error: libCg.so version 2.0 is needed to compile the shaders in the game's folder.\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
isFlatpak = 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char libCgVersion[9];
|
for (int i = 0; i < 4; ++i)
|
||||||
FILE *libF;
|
{
|
||||||
if (isFlatpak)
|
if (pathsToCheck[i] == NULL)
|
||||||
libF = fopen("/app/lib32/libCg2.so", "r");
|
continue;
|
||||||
else
|
|
||||||
libF = fopen("./libCg.so", "r");
|
|
||||||
|
|
||||||
fseek(libF, 0x226d84, SEEK_SET);
|
if (access(pathsToCheck[i], F_OK) == 0)
|
||||||
fread(libCgVersion, 9, 1, libF);
|
{
|
||||||
fclose(libF);
|
foundPath = pathsToCheck[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (foundPath != pathsToCheck[3] && pathsToCheck[3] != NULL)
|
||||||
|
{
|
||||||
|
free(pathsToCheck[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (foundPath == NULL)
|
||||||
|
{
|
||||||
|
log_error("Error: Unable to find library libCg.so\n");
|
||||||
|
log_error("Error: libCg.so version 2.0 is needed to compile the shaders in the game's folder.\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
char libCgVersion[9] = {0};
|
||||||
|
libCgF = fopen(foundPath, "rb");
|
||||||
|
if (libCgF == NULL)
|
||||||
|
{
|
||||||
|
log_error("Failed to open: %s\n", foundPath);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
fseek(libCgF, 0x226d84L, SEEK_SET);
|
||||||
|
if (fread(libCgVersion, 1, sizeof(libCgVersion) - 1, libCgF) != sizeof(libCgVersion) - 1)
|
||||||
|
{
|
||||||
|
log_error("Failed to read version from: %s\n", foundPath);
|
||||||
|
fclose(libCgF);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
fclose(libCgF);
|
||||||
|
|
||||||
if (strcmp(libCgVersion, "2.0.0.12") != 0)
|
if (strcmp(libCgVersion, "2.0.0.12") != 0)
|
||||||
{
|
{
|
||||||
printf("ERROR: Wrong libCg.so, version 2.0.0.12 is needed.\n");
|
log_error("ERROR: Wrong libCg.so version '%s', version 2.0.0.12 is needed.\n", libCgVersion);
|
||||||
exit(1);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *resultPath = strdup(foundPath);
|
||||||
|
if (resultPath == NULL)
|
||||||
|
{
|
||||||
|
log_error("Error allocating memory for result path");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
return resultPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
void loadLibCg()
|
||||||
|
{
|
||||||
|
void *handle;
|
||||||
|
char *libCgFilePath = findLibCg();
|
||||||
|
|
||||||
|
handle = dlopen(libCgFilePath, RTLD_NOW);
|
||||||
|
if (!handle)
|
||||||
|
{
|
||||||
|
log_error("Error: Unable to find library libCg.so\n");
|
||||||
|
log_error("Error: libCg.so version 2.0 is needed to compile the shaders in the game's folder.\n");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
free(libCgFilePath);
|
||||||
dlerror();
|
dlerror();
|
||||||
|
|
||||||
char *error;
|
char *error;
|
||||||
|
|||||||
+307
-357
@@ -1,36 +1,31 @@
|
|||||||
#ifndef TWOSPICY_H
|
|
||||||
#define TWOSPICY_H
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// File: average.frag
|
// File: average.frag
|
||||||
const char toospicyFileName_0[] = "average.frag";
|
const char toospicyFileName_0[] = "average.frag";
|
||||||
const size_t toospicyPatchSize_0 = 271;
|
const size_t toospicyPatchSize_0 = 271;
|
||||||
const unsigned char toospicyPatchBuffer_0[] = {
|
const unsigned char toospicyPatchBuffer_0[] = {
|
||||||
0xe4, 0x97, 0xac, 0x3a, 0x18, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x01, 0x2b,
|
0xe4, 0x97, 0xac, 0x3a, 0x18, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x01, 0x2b, 0x76, 0x65,
|
||||||
0x76, 0x65, 0x63, 0x34, 0x20, 0x56, 0x45, 0x52, 0x54, 0x45, 0x58, 0x5f, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x3b, 0x09,
|
0x63, 0x34, 0x20, 0x56, 0x45, 0x52, 0x54, 0x45, 0x58, 0x5f, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x3b, 0x09, 0x0d, 0x0a, 0x76, 0x61,
|
||||||
0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43,
|
0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x02,
|
||||||
0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x02, 0x69, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x14, 0x66, 0x6c, 0x6f,
|
0x69, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x14, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x20, 0x3d, 0x20, 0x30,
|
||||||
0x61, 0x74, 0x20, 0x63, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x02, 0xac,
|
0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x02, 0xac, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f,
|
||||||
0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x3f, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x00,
|
0x2f, 0x02, 0x3f, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x6c, 0x01, 0x00, 0x00, 0x2e, 0x00,
|
||||||
0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x6c, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x4f, 0x09, 0x09, 0x63,
|
0x00, 0x00, 0x01, 0x4f, 0x09, 0x09, 0x63, 0x72, 0x64, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72,
|
||||||
0x72, 0x64, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x20, 0x2b,
|
0x64, 0x2e, 0x78, 0x20, 0x2b, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x64, 0x78, 0x29, 0x20, 0x2f, 0x20, 0x31, 0x32,
|
||||||
0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x64, 0x78, 0x29, 0x20, 0x2f, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x30,
|
0x38, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x72, 0x64, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78,
|
||||||
0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x72, 0x64, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x43,
|
0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x20, 0x2b, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x64, 0x79, 0x29, 0x02,
|
||||||
0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x20, 0x2b, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x64, 0x79, 0x29,
|
0x8d, 0x01, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x01, 0x2a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x53, 0x69, 0x7a, 0x65, 0x50,
|
||||||
0x02, 0x8d, 0x01, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x01, 0x2a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x53, 0x69,
|
0x6f, 0x77, 0x65, 0x72, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72,
|
||||||
0x7a, 0x65, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67,
|
0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x29, 0x02, 0xeb, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00};
|
||||||
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x29, 0x02, 0xeb, 0x01, 0x00,
|
|
||||||
0x00, 0x2d, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: average.vert
|
// File: average.vert
|
||||||
const char toospicyFileName_1[] = "average.vert";
|
const char toospicyFileName_1[] = "average.vert";
|
||||||
const size_t toospicyPatchSize_1 = 82;
|
const size_t toospicyPatchSize_1 = 82;
|
||||||
const unsigned char toospicyPatchBuffer_1[] = {
|
const unsigned char toospicyPatchBuffer_1[] = {
|
||||||
0x07, 0x35, 0xa3, 0xe1, 0xa8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
|
0x07, 0x35, 0xa3, 0xe1, 0xa8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x15, 0x61, 0x72,
|
||||||
0x01, 0x15, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78,
|
0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x02, 0x1b,
|
||||||
0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x02, 0x1b, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x02,
|
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01,
|
||||||
0x2f, 0x2f, 0x02, 0x5b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x09, 0x74, 0x65, 0x78, 0x43,
|
0x09, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3d, 0x02, 0x6d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00};
|
||||||
0x6f, 0x6f, 0x72, 0x64, 0x3d, 0x02, 0x6d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: DoF.frag
|
// File: DoF.frag
|
||||||
const char toospicyFileName_2[] = "DoF.frag";
|
const char toospicyFileName_2[] = "DoF.frag";
|
||||||
@@ -46,146 +41,131 @@ const unsigned char toospicyPatchBuffer_2[] = {
|
|||||||
const char toospicyFileName_3[] = "GaussH.frag";
|
const char toospicyFileName_3[] = "GaussH.frag";
|
||||||
const size_t toospicyPatchSize_3 = 241;
|
const size_t toospicyPatchSize_3 = 241;
|
||||||
const unsigned char toospicyPatchBuffer_3[] = {
|
const unsigned char toospicyPatchBuffer_3[] = {
|
||||||
0xae, 0x80, 0x41, 0x90, 0xa9, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x61,
|
0xae, 0x80, 0x41, 0x90, 0xa9, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x61, 0x66, 0x6c, 0x6f,
|
||||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f,
|
0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f,
|
||||||
0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x3b, 0x0d, 0x0a, 0x75,
|
0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c,
|
||||||
0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x38,
|
0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66,
|
||||||
0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48, 0x45,
|
0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d,
|
||||||
0x49, 0x47, 0x48, 0x54, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f,
|
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0x9c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x01, 0x22, 0x76, 0x65, 0x63, 0x34, 0x20,
|
||||||
0x61, 0x74, 0x02, 0x9c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x01, 0x22, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63,
|
0x63, 0x6f, 0x6c, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e,
|
||||||
0x6f, 0x6c, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20,
|
0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x02, 0xd4, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x01, 0x01, 0x2e, 0x02, 0x71, 0x01,
|
||||||
0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x02, 0xd4, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x01,
|
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x39, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f,
|
||||||
0x01, 0x2e, 0x02, 0x71, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x39, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67,
|
0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67,
|
||||||
0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x63, 0x6f, 0x6c,
|
0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x7d};
|
||||||
0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f,
|
|
||||||
0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x7d};
|
|
||||||
|
|
||||||
// File: GaussH.vert
|
// File: GaussH.vert
|
||||||
const char toospicyFileName_4[] = "GaussH.vert";
|
const char toospicyFileName_4[] = "GaussH.vert";
|
||||||
const size_t toospicyPatchSize_4 = 53;
|
const size_t toospicyPatchSize_4 = 53;
|
||||||
const unsigned char toospicyPatchBuffer_4[] = {
|
const unsigned char toospicyPatchBuffer_4[] = {0xc1, 0x77, 0x6f, 0x38, 0x53, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3a,
|
||||||
0xc1, 0x77, 0x6f, 0x38, 0x53, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x01, 0x00, 0x00, 0x01,
|
0x01, 0x00, 0x00, 0x01, 0x22, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x69, 0x29, 0x2b,
|
||||||
0x22, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x69, 0x29, 0x2b, 0x30, 0x2e, 0x35, 0x29, 0x2a, 0x57, 0x49, 0x44,
|
0x30, 0x2e, 0x35, 0x29, 0x2a, 0x57, 0x49, 0x44, 0x54, 0x48, 0x2c, 0x30, 0x2e, 0x30,
|
||||||
0x54, 0x48, 0x2c, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x7d};
|
0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x7d};
|
||||||
|
|
||||||
// File: GaussH_Depth.frag
|
// File: GaussH_Depth.frag
|
||||||
const char toospicyFileName_5[] = "GaussH_Depth.frag";
|
const char toospicyFileName_5[] = "GaussH_Depth.frag";
|
||||||
const size_t toospicyPatchSize_5 = 495;
|
const size_t toospicyPatchSize_5 = 495;
|
||||||
const unsigned char toospicyPatchBuffer_5[] = {
|
const unsigned char toospicyPatchBuffer_5[] = {
|
||||||
0x80, 0x58, 0x2b, 0x1c, 0x71, 0x04, 0x00, 0x00, 0x01, 0x52, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68,
|
0x80, 0x58, 0x2b, 0x1c, 0x71, 0x04, 0x00, 0x00, 0x01, 0x52, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66,
|
||||||
0x61, 0x6c, 0x66, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20,
|
0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x32, 0x09,
|
||||||
0x68, 0x61, 0x6c, 0x66, 0x32, 0x09, 0x76, 0x65, 0x63, 0x32, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
|
0x76, 0x65, 0x63, 0x32, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x09, 0x76, 0x65,
|
||||||
0x20, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x09, 0x76, 0x65, 0x63, 0x33, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e,
|
0x63, 0x33, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x09, 0x76, 0x65, 0x63, 0x34,
|
||||||
0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x09, 0x76, 0x65, 0x63, 0x34, 0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00, 0x00,
|
0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x01, 0xba, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20,
|
||||||
0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x01, 0xba, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x47, 0x61, 0x6d, 0x65,
|
0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61,
|
||||||
0x44, 0x65, 0x70, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d,
|
0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x52, 0x61, 0x79, 0x44, 0x65, 0x70, 0x74, 0x68,
|
||||||
0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x52, 0x61, 0x79, 0x44, 0x65, 0x70,
|
0x3b, 0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f,
|
||||||
0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x54,
|
0x72, 0x64, 0x5b, 0x38, 0x5d, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20,
|
||||||
0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x5b, 0x38, 0x5d, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72,
|
0x57, 0x49, 0x44, 0x54, 0x48, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20,
|
||||||
0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69,
|
0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74,
|
||||||
0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x3b, 0x0d,
|
0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61,
|
||||||
0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54,
|
0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c,
|
||||||
0x48, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20,
|
0x6f, 0x61, 0x74, 0x02, 0xd7, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x19, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e,
|
||||||
0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66,
|
0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x02, 0x0e, 0x01, 0x00, 0x00,
|
||||||
0x6c, 0x6f, 0x61, 0x74, 0x02, 0xd7, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x19, 0x20, 0x76, 0x65, 0x63,
|
0xa9, 0x00, 0x00, 0x00, 0x02, 0xb8, 0x01, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xdf, 0x01, 0x00, 0x00,
|
||||||
0x34, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e,
|
0x2b, 0x00, 0x00, 0x00, 0x02, 0x0b, 0x02, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0x32, 0x02, 0x00, 0x00,
|
||||||
0x30, 0x29, 0x02, 0x0e, 0x01, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x02, 0xb8, 0x01, 0x00, 0x00, 0x27, 0x00, 0x00,
|
0x9f, 0x00, 0x00, 0x00, 0x01, 0x06, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x02, 0x29, 0x01, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x01,
|
||||||
0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xdf, 0x01, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x0b, 0x02, 0x00, 0x00,
|
0x03, 0x2e, 0x30, 0x29, 0x02, 0xf6, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x06, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x02,
|
||||||
0x27, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0x32, 0x02, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x01, 0x06,
|
0x0c, 0x03, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x03, 0x2e, 0x30, 0x29, 0x02, 0x30, 0x03, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00,
|
||||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x02, 0x29, 0x01, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x01, 0x03, 0x2e, 0x30,
|
0x01, 0x01, 0x2e, 0x02, 0xeb, 0x03, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x01, 0x18, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e, 0x30,
|
||||||
0x29, 0x02, 0xf6, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x06, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x02,
|
0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x02, 0x47, 0x04, 0x00, 0x00, 0x25,
|
||||||
0x0c, 0x03, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x03, 0x2e, 0x30, 0x29, 0x02, 0x30, 0x03, 0x00, 0x00, 0xbc,
|
0x00, 0x00, 0x00, 0x01, 0x06, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
||||||
0x00, 0x00, 0x00, 0x01, 0x01, 0x2e, 0x02, 0xeb, 0x03, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x01, 0x18, 0x76, 0x65,
|
|
||||||
0x63, 0x34, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30,
|
|
||||||
0x2e, 0x30, 0x29, 0x02, 0x47, 0x04, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x01, 0x06, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d,
|
|
||||||
0x0a};
|
|
||||||
|
|
||||||
// File: GaussH_Depth.vert
|
// File: GaussH_Depth.vert
|
||||||
const char toospicyFileName_6[] = "GaussH_Depth.vert";
|
const char toospicyFileName_6[] = "GaussH_Depth.vert";
|
||||||
const size_t toospicyPatchSize_6 = 53;
|
const size_t toospicyPatchSize_6 = 53;
|
||||||
const unsigned char toospicyPatchBuffer_6[] = {
|
const unsigned char toospicyPatchBuffer_6[] = {0xc1, 0x77, 0x6f, 0x38, 0x53, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3a,
|
||||||
0xc1, 0x77, 0x6f, 0x38, 0x53, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x01, 0x00, 0x00, 0x01,
|
0x01, 0x00, 0x00, 0x01, 0x22, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x69, 0x29, 0x2b,
|
||||||
0x22, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x69, 0x29, 0x2b, 0x30, 0x2e, 0x35, 0x29, 0x2a, 0x57, 0x49, 0x44,
|
0x30, 0x2e, 0x35, 0x29, 0x2a, 0x57, 0x49, 0x44, 0x54, 0x48, 0x2c, 0x30, 0x2e, 0x30,
|
||||||
0x54, 0x48, 0x2c, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x7d};
|
0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x7d};
|
||||||
|
|
||||||
// File: GaussV.frag
|
// File: GaussV.frag
|
||||||
const char toospicyFileName_7[] = "GaussV.frag";
|
const char toospicyFileName_7[] = "GaussV.frag";
|
||||||
const size_t toospicyPatchSize_7 = 281;
|
const size_t toospicyPatchSize_7 = 281;
|
||||||
const unsigned char toospicyPatchBuffer_7[] = {
|
const unsigned char toospicyPatchBuffer_7[] = {
|
||||||
0x47, 0x81, 0xa3, 0x96, 0xad, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x01, 0x6a,
|
0x47, 0x81, 0xa3, 0x96, 0xad, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x01, 0x6a, 0x66, 0x6c, 0x6f,
|
||||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x47, 0x61, 0x75, 0x73, 0x73, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5b, 0x38,
|
0x61, 0x74, 0x20, 0x47, 0x61, 0x75, 0x73, 0x73, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0d, 0x0a, 0x75, 0x6e,
|
||||||
0x5d, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48,
|
0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x38, 0x3b, 0x0d, 0x0a,
|
||||||
0x45, 0x49, 0x47, 0x48, 0x54, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c,
|
0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x3b, 0x0d,
|
||||||
0x6f, 0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72,
|
0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x38, 0x3b,
|
||||||
0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e,
|
0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0xa7, 0x00, 0x00, 0x00, 0x22, 0x00,
|
||||||
0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0xa7, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00,
|
0x00, 0x00, 0x01, 0x22, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63, 0x6f, 0x6c, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e, 0x30,
|
||||||
0x00, 0x01, 0x22, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63, 0x6f, 0x6c, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30,
|
0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x02, 0xd4, 0x00, 0x00, 0x00, 0x97,
|
||||||
0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x02,
|
0x00, 0x00, 0x00, 0x01, 0x64, 0x2e, 0x30, 0x2c, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x38, 0x29, 0x29, 0x2a, 0x47, 0x61, 0x75, 0x73,
|
||||||
0xd4, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x01, 0x64, 0x2e, 0x30, 0x2c, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54,
|
0x73, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5b, 0x37, 0x2d, 0x69, 0x5d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x20,
|
||||||
0x38, 0x29, 0x29, 0x2a, 0x47, 0x61, 0x75, 0x73, 0x73, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5b, 0x37, 0x2d, 0x69,
|
0x20, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67,
|
||||||
0x5d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67,
|
0x62, 0x3d, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67,
|
||||||
0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x63, 0x6f, 0x6c,
|
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
||||||
0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f,
|
|
||||||
0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: GaussV.vert
|
// File: GaussV.vert
|
||||||
const char toospicyFileName_8[] = "GaussV.vert";
|
const char toospicyFileName_8[] = "GaussV.vert";
|
||||||
const size_t toospicyPatchSize_8 = 40;
|
const size_t toospicyPatchSize_8 = 40;
|
||||||
const unsigned char toospicyPatchBuffer_8[] = {0x73, 0x83, 0x54, 0x8f, 0x81, 0x01, 0x00, 0x00, 0x02, 0x00,
|
const unsigned char toospicyPatchBuffer_8[] = {0x73, 0x83, 0x54, 0x8f, 0x81, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x65,
|
||||||
0x00, 0x00, 0x00, 0x65, 0x01, 0x00, 0x00, 0x01, 0x0c, 0x2e,
|
0x01, 0x00, 0x00, 0x01, 0x0c, 0x2e, 0x30, 0x2c, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74,
|
||||||
0x30, 0x2c, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x69,
|
0x28, 0x69, 0x29, 0x02, 0x68, 0x01, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00};
|
||||||
0x29, 0x02, 0x68, 0x01, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: GetBrightArea.frag
|
// File: GetBrightArea.frag
|
||||||
const char toospicyFileName_9[] = "GetBrightArea.frag";
|
const char toospicyFileName_9[] = "GetBrightArea.frag";
|
||||||
const size_t toospicyPatchSize_9 = 63;
|
const size_t toospicyPatchSize_9 = 63;
|
||||||
const unsigned char toospicyPatchBuffer_9[] = {
|
const unsigned char toospicyPatchBuffer_9[] = {
|
||||||
0x32, 0x1e, 0x86, 0xd8, 0x17, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00,
|
0x32, 0x1e, 0x86, 0xd8, 0x17, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f,
|
||||||
0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02,
|
0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x46, 0x00, 0x00,
|
||||||
0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f,
|
0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0x1a, 0x02, 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00, 0x01, 0x02, 0x0d, 0x0a};
|
||||||
0x61, 0x74, 0x02, 0x1a, 0x02, 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00, 0x01, 0x02, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: GlareCompose.frag
|
// File: GlareCompose.frag
|
||||||
const char toospicyFileName_10[] = "GlareCompose.frag";
|
const char toospicyFileName_10[] = "GlareCompose.frag";
|
||||||
const size_t toospicyPatchSize_10 = 482;
|
const size_t toospicyPatchSize_10 = 482;
|
||||||
const unsigned char toospicyPatchBuffer_10[] = {
|
const unsigned char toospicyPatchBuffer_10[] = {
|
||||||
0x3d, 0xef, 0xd1, 0x18, 0x06, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x02,
|
0x3d, 0xef, 0xd1, 0x18, 0x06, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02,
|
||||||
0x2f, 0x2f, 0x02, 0x1a, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x6c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65,
|
0x1a, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x6c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x42, 0x61,
|
||||||
0x72, 0x32, 0x44, 0x20, 0x42, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x6e, 0x65, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x50, 0x69,
|
0x73, 0x65, 0x54, 0x6f, 0x6e, 0x65, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x50, 0x69, 0x63, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f,
|
||||||
0x63, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x50,
|
0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x61, 0x72,
|
||||||
0x6f, 0x77, 0x65, 0x72, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65,
|
0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x5b, 0x35, 0x5d, 0x3b,
|
||||||
0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x5b, 0x35, 0x5d, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a,
|
0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x29, 0x0d, 0x0a, 0x7b,
|
||||||
0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x29, 0x0d, 0x0a, 0x7b, 0x0d,
|
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x02, 0x27, 0x01, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x02, 0x53, 0x01, 0x00, 0x00,
|
||||||
0x0a, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x02, 0x27, 0x01, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x02, 0x53, 0x01,
|
0x58, 0x00, 0x00, 0x00, 0x03, 0x19, 0x01, 0x00, 0x00, 0x23, 0x69, 0x66, 0x20, 0x31, 0x20, 0x2f, 0x2f, 0x92, 0xc7, 0x89, 0xc1, 0x81,
|
||||||
0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x03, 0x19, 0x01, 0x00, 0x00, 0x23, 0x69, 0x66, 0x20, 0x31, 0x20, 0x2f, 0x2f,
|
0x40, 0x68, 0x61, 0x72, 0x61, 0x68, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x34, 0x09, 0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43,
|
||||||
0x92, 0xc7, 0x89, 0xc1, 0x81, 0x40, 0x68, 0x61, 0x72, 0x61, 0x68, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x34, 0x09,
|
0x6f, 0x6c, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x42, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x6e,
|
||||||
0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72,
|
0x65, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x50, 0x69, 0x63, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x5b, 0x30, 0x5d, 0x29,
|
||||||
0x65, 0x32, 0x44, 0x28, 0x42, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x6e, 0x65, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x50, 0x69,
|
0x2a, 0x31, 0x2e, 0x37, 0x35, 0x3b, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x34, 0x09, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78,
|
||||||
0x63, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x5b, 0x30, 0x5d, 0x29, 0x2a, 0x31, 0x2e, 0x37, 0x35,
|
0x3b, 0x0d, 0x0a, 0x09, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x63,
|
||||||
0x3b, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x34, 0x09, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x3b, 0x0d,
|
0x6f, 0x6c, 0x2e, 0x72, 0x2c, 0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x2e, 0x72, 0x29, 0x3b, 0x0d, 0x0a, 0x09,
|
||||||
0x0a, 0x09, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28,
|
0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x67, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x63, 0x6f, 0x6c, 0x2e, 0x67,
|
||||||
0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x2c, 0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x2e, 0x72, 0x29,
|
0x2c, 0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x2e, 0x67, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x62, 0x6c, 0x65, 0x6e,
|
||||||
0x3b, 0x0d, 0x0a, 0x09, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x67, 0x20, 0x3d, 0x20, 0x6d, 0x61,
|
0x64, 0x6d, 0x69, 0x78, 0x2e, 0x62, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x63, 0x6f, 0x6c, 0x2e, 0x62, 0x2c, 0x42, 0x54, 0x47,
|
||||||
0x78, 0x28, 0x63, 0x6f, 0x6c, 0x2e, 0x67, 0x2c, 0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x2e,
|
0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x2e, 0x62, 0x29, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x20,
|
||||||
0x67, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x62, 0x20, 0x3d, 0x20,
|
0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x3d, 0x62, 0x6c,
|
||||||
0x6d, 0x61, 0x78, 0x28, 0x63, 0x6f, 0x6c, 0x2e, 0x62, 0x2c, 0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f,
|
0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x2a, 0x20, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x3b, 0x0d, 0x0a, 0x23,
|
||||||
0x6c, 0x2e, 0x62, 0x29, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67,
|
0x69, 0x66, 0x20, 0x30, 0x02, 0xca, 0x01, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x01, 0x1b, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46,
|
||||||
0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x3d, 0x62, 0x6c,
|
0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
||||||
0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x2a, 0x20, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x3b,
|
|
||||||
0x0d, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x30, 0x02, 0xca, 0x01, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x01, 0x1b, 0x20,
|
|
||||||
0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x3d, 0x31, 0x2e,
|
|
||||||
0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: gradate.frag
|
// File: gradate.frag
|
||||||
const char toospicyFileName_11[] = "gradate.frag";
|
const char toospicyFileName_11[] = "gradate.frag";
|
||||||
const size_t toospicyPatchSize_11 = 101;
|
const size_t toospicyPatchSize_11 = 101;
|
||||||
const unsigned char toospicyPatchBuffer_11[] = {
|
const unsigned char toospicyPatchBuffer_11[] = {
|
||||||
0xa4, 0x99, 0x62, 0x6c, 0x21, 0x02, 0x00, 0x00, 0x01, 0x52, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
|
0xa4, 0x99, 0x62, 0x6c, 0x21, 0x02, 0x00, 0x00, 0x01, 0x52, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c,
|
||||||
0x20, 0x68, 0x61, 0x6c, 0x66, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66,
|
0x66, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66,
|
||||||
0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x32, 0x09, 0x76, 0x65, 0x63, 0x32, 0x0d, 0x0a, 0x23,
|
0x32, 0x09, 0x76, 0x65, 0x63, 0x32, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x33,
|
||||||
0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x09, 0x76, 0x65, 0x63, 0x33,
|
0x09, 0x76, 0x65, 0x63, 0x33, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x09,
|
||||||
0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x09, 0x76,
|
0x76, 0x65, 0x63, 0x34, 0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x21, 0x02, 0x00, 0x00};
|
||||||
0x65, 0x63, 0x34, 0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x21, 0x02, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: intensitytest.frag
|
// File: intensitytest.frag
|
||||||
const char toospicyFileName_12[] = "intensitytest.frag";
|
const char toospicyFileName_12[] = "intensitytest.frag";
|
||||||
@@ -199,286 +179,256 @@ const unsigned char toospicyPatchBuffer_12[] = {0x2c, 0xe4, 0xe3, 0x09, 0x56, 0x
|
|||||||
const char toospicyFileName_13[] = "Laplacian.frag";
|
const char toospicyFileName_13[] = "Laplacian.frag";
|
||||||
const size_t toospicyPatchSize_13 = 152;
|
const size_t toospicyPatchSize_13 = 152;
|
||||||
const unsigned char toospicyPatchBuffer_13[] = {
|
const unsigned char toospicyPatchBuffer_13[] = {
|
||||||
0x27, 0xee, 0x97, 0x8c, 0x91, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02,
|
0x27, 0xee, 0x97, 0x8c, 0x91, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02,
|
||||||
0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00,
|
0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01,
|
||||||
0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0x35, 0x02, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x01,
|
0x02, 0x2e, 0x30, 0x02, 0x35, 0x02, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xba, 0x02, 0x00, 0x00, 0x41,
|
||||||
0x02, 0x2e, 0x30, 0x02, 0xba, 0x02, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x76, 0x65, 0x63, 0x33, 0x28,
|
0x00, 0x00, 0x00, 0x01, 0x0e, 0x76, 0x65, 0x63, 0x33, 0x28, 0x6c, 0x61, 0x70, 0x29, 0x2c, 0x76, 0x65, 0x63, 0x33, 0x02, 0xff, 0x02,
|
||||||
0x6c, 0x61, 0x70, 0x29, 0x2c, 0x76, 0x65, 0x63, 0x33, 0x02, 0xff, 0x02, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01,
|
0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30,
|
||||||
0x0e, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x02, 0x2f, 0x03, 0x00,
|
0x02, 0x2f, 0x03, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x2c,
|
||||||
0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x2c, 0x31,
|
0x31, 0x2e, 0x30, 0x02, 0x56, 0x03, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01, 0x06, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
||||||
0x2e, 0x30, 0x02, 0x56, 0x03, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01, 0x06, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: Monochrome.frag
|
// File: Monochrome.frag
|
||||||
const char toospicyFileName_14[] = "Monochrome.frag";
|
const char toospicyFileName_14[] = "Monochrome.frag";
|
||||||
const size_t toospicyPatchSize_14 = 330;
|
const size_t toospicyPatchSize_14 = 330;
|
||||||
const unsigned char toospicyPatchBuffer_14[] = {
|
const unsigned char toospicyPatchBuffer_14[] = {
|
||||||
0x60, 0xe0, 0xef, 0x32, 0x33, 0x03, 0x00, 0x00, 0x01, 0x66, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x09, 0x4d,
|
0x60, 0xe0, 0xef, 0x32, 0x33, 0x03, 0x00, 0x00, 0x01, 0x66, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x09, 0x4d, 0x4f, 0x44, 0x45,
|
||||||
0x4f, 0x44, 0x45, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x44, 0x45, 0x09, 0x30,
|
0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x44, 0x45, 0x09, 0x30, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64,
|
||||||
0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
|
0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x4e, 0x4f, 0x43, 0x48, 0x52, 0x4f,
|
||||||
0x09, 0x4d, 0x4f, 0x4e, 0x4f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45,
|
0x4d, 0x45, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45, 0x3d, 0x3d, 0x30, 0x29, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e,
|
||||||
0x3d, 0x3d, 0x30, 0x29, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x53, 0x45, 0x50, 0x49, 0x41,
|
0x65, 0x09, 0x53, 0x45, 0x50, 0x49, 0x41, 0x09, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45, 0x3d, 0x3d, 0x31, 0x29, 0x0d, 0x0a,
|
||||||
0x09, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45, 0x3d, 0x3d, 0x31, 0x29, 0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00,
|
0x0d, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00,
|
0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x01, 0x3f, 0x68, 0x61, 0x6c, 0x66, 0x34,
|
||||||
0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x01, 0x3f, 0x68, 0x61, 0x6c,
|
0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, 0x6c, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e,
|
||||||
0x66, 0x34, 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, 0x6c, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e,
|
0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x6e,
|
||||||
0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d,
|
0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x76, 0x65, 0x63, 0x33, 0x28, 0x02, 0x91, 0x02, 0x00, 0x00, 0x29, 0x00, 0x00,
|
||||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x76, 0x65,
|
0x00, 0x01, 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x23, 0x69, 0x66, 0x09, 0x53, 0x45, 0x50, 0x49, 0x41, 0x0d, 0x0a, 0x09, 0x6d, 0x6f, 0x6e,
|
||||||
0x63, 0x33, 0x28, 0x02, 0x91, 0x02, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x01, 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x23,
|
0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x2a, 0x3d, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x30, 0x2e,
|
||||||
0x69, 0x66, 0x09, 0x53, 0x45, 0x50, 0x49, 0x41, 0x0d, 0x0a, 0x09, 0x6d, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, 0x6c, 0x2e,
|
0x36, 0x2c, 0x30, 0x2e, 0x33, 0x29, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x09, 0x2f, 0x2a, 0x09, 0x53, 0x45, 0x50,
|
||||||
0x72, 0x67, 0x62, 0x2a, 0x3d, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x36, 0x2c,
|
0x49, 0x41, 0x09, 0x2a, 0x2f, 0x0d, 0x0a, 0x09, 0x6d, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30, 0x3b,
|
||||||
0x30, 0x2e, 0x33, 0x29, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x09, 0x2f, 0x2a, 0x09, 0x53, 0x45,
|
0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x02, 0xed, 0x02, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x01, 0x03, 0x7d, 0x0d, 0x0a};
|
||||||
0x50, 0x49, 0x41, 0x09, 0x2a, 0x2f, 0x0d, 0x0a, 0x09, 0x6d, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x61, 0x3d,
|
|
||||||
0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x02, 0xed, 0x02, 0x00, 0x00, 0x29, 0x00,
|
|
||||||
0x00, 0x00, 0x01, 0x03, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: Monochrome.vert
|
// File: Monochrome.vert
|
||||||
const char toospicyFileName_15[] = "Monochrome.vert";
|
const char toospicyFileName_15[] = "Monochrome.vert";
|
||||||
const size_t toospicyPatchSize_15 = 121;
|
const size_t toospicyPatchSize_15 = 121;
|
||||||
const unsigned char toospicyPatchBuffer_15[] = {
|
const unsigned char toospicyPatchBuffer_15[] = {
|
||||||
0x78, 0x26, 0x8a, 0x51, 0x79, 0x00, 0x00, 0x00, 0x01, 0x66, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x09,
|
0x78, 0x26, 0x8a, 0x51, 0x79, 0x00, 0x00, 0x00, 0x01, 0x66, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x09, 0x4d, 0x4f, 0x44,
|
||||||
0x4d, 0x4f, 0x44, 0x45, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x44, 0x45,
|
0x45, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x44, 0x45, 0x09, 0x30, 0x0d, 0x0a, 0x23, 0x65,
|
||||||
0x09, 0x30, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66,
|
0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x4e, 0x4f, 0x43,
|
||||||
0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x4e, 0x4f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x09, 0x09, 0x09, 0x28,
|
0x48, 0x52, 0x4f, 0x4d, 0x45, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45, 0x3d, 0x3d, 0x30, 0x29, 0x0d, 0x0a, 0x23, 0x64,
|
||||||
0x4d, 0x4f, 0x44, 0x45, 0x3d, 0x3d, 0x30, 0x29, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09,
|
0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x53, 0x45, 0x50, 0x49, 0x41, 0x09, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45, 0x3d,
|
||||||
0x53, 0x45, 0x50, 0x49, 0x41, 0x09, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45, 0x3d, 0x3d, 0x31, 0x29,
|
0x3d, 0x31, 0x29, 0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00};
|
||||||
0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: nnstdshader.vert
|
// File: nnstdshader.vert
|
||||||
const char toospicyFileName_16[] = "nnstdshader.vert";
|
const char toospicyFileName_16[] = "nnstdshader.vert";
|
||||||
const size_t toospicyPatchSize_16 = 652;
|
const size_t toospicyPatchSize_16 = 652;
|
||||||
const unsigned char toospicyPatchBuffer_16[] = {
|
const unsigned char toospicyPatchBuffer_16[] = {
|
||||||
0x39, 0x15, 0xd4, 0xa8, 0x53, 0x16, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x01, 0x01, 0x00, 0x02, 0xaa,
|
0x39, 0x15, 0xd4, 0xa8, 0x53, 0x16, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x01, 0x01, 0x00, 0x02, 0xaa, 0x01, 0x01, 0x00,
|
||||||
0x01, 0x01, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x04, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16,
|
0x27, 0x00, 0x00, 0x00, 0x01, 0x04, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x39, 0x3e,
|
||||||
0x00, 0x00, 0x00, 0x01, 0x39, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09,
|
0x20, 0x30, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x6e, 0x6e, 0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50,
|
||||||
0x6e, 0x6e, 0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67,
|
0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x28, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||||
0x68, 0x74, 0x28, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x69, 0x66, 0x02, 0xf2, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01,
|
||||||
0x20, 0x09, 0x23, 0x69, 0x66, 0x02, 0xf2, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x20, 0x3e, 0x20,
|
0x0f, 0x20, 0x3e, 0x20, 0x31, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16,
|
||||||
0x31, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16, 0x00,
|
0x00, 0x00, 0x00, 0x01, 0x39, 0x3e, 0x20, 0x31, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x6e, 0x6e, 0x67,
|
||||||
0x00, 0x00, 0x01, 0x39, 0x3e, 0x20, 0x31, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x6e,
|
0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x28, 0x31, 0x29, 0x3b,
|
||||||
0x6e, 0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67, 0x68,
|
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x69, 0x66, 0x02, 0xf2, 0x0d, 0x00,
|
||||||
0x74, 0x28, 0x31, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x20, 0x3e, 0x20, 0x32, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28,
|
||||||
0x09, 0x23, 0x69, 0x66, 0x02, 0xf2, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x20, 0x3e, 0x20, 0x32,
|
0x02, 0x4a, 0x36, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x39, 0x3e, 0x20, 0x32, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
||||||
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16, 0x00, 0x00,
|
0x20, 0x09, 0x09, 0x6e, 0x6e, 0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67,
|
||||||
0x00, 0x01, 0x39, 0x3e, 0x20, 0x32, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x6e, 0x6e,
|
0x68, 0x74, 0x28, 0x32, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23,
|
||||||
0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74,
|
0x69, 0x66, 0x02, 0xf2, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x20, 0x3e, 0x20, 0x33, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
||||||
0x28, 0x32, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09,
|
0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x6c, 0x3e, 0x20, 0x33, 0x29, 0x20,
|
||||||
0x23, 0x69, 0x66, 0x02, 0xf2, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x20, 0x3e, 0x20, 0x33, 0x0d,
|
0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x6e, 0x6e, 0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c,
|
||||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
|
0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x28, 0x33, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a,
|
||||||
0x01, 0x6c, 0x3e, 0x20, 0x33, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x6e, 0x6e, 0x67,
|
0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x65, 0x6e, 0x64,
|
||||||
0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x28,
|
0x69, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09,
|
||||||
0x33, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23,
|
0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x02, 0x3a, 0x37, 0x00, 0x00, 0x20, 0x00,
|
||||||
0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d,
|
0x00, 0x00, 0x01, 0x21, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6e, 0x67, 0x6c, 0x75, 0x4e, 0x75, 0x6d, 0x50,
|
||||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09,
|
0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x02, 0xd2, 0x02, 0x01, 0x00, 0x18, 0x00,
|
||||||
0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x02, 0x3a, 0x37, 0x00,
|
0x00, 0x00, 0x01, 0x0a, 0x34, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x7d, 0x0d, 0x0a, 0x09, 0x02, 0x3a, 0x37, 0x00, 0x00, 0x1e, 0x00, 0x00,
|
||||||
0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x21, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6e, 0x67,
|
0x00, 0x01, 0x23, 0x20, 0x3e, 0x20, 0x31, 0x0d, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6e, 0x67, 0x6c, 0x75, 0x4e, 0x75, 0x6d,
|
||||||
0x6c, 0x75, 0x4e, 0x75, 0x6d, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3e, 0x20, 0x30,
|
0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3e, 0x20, 0x31, 0x29, 0x20, 0x02, 0xd2, 0x02, 0x01, 0x00, 0x18,
|
||||||
0x29, 0x20, 0x02, 0xd2, 0x02, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x34, 0x29, 0x3b, 0x0d, 0x0a, 0x09,
|
0x00, 0x00, 0x00, 0x01, 0x09, 0x35, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x7d, 0x0d, 0x0a, 0x02, 0x54, 0xc9, 0x00, 0x00, 0x15, 0x00, 0x00,
|
||||||
0x7d, 0x0d, 0x0a, 0x09, 0x02, 0x3a, 0x37, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x23, 0x20, 0x3e, 0x20, 0x31,
|
0x00, 0x01, 0x03, 0x23, 0x69, 0x66, 0x02, 0xef, 0x38, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x36, 0x0d, 0x0a, 0x09, 0x69, 0x66,
|
||||||
0x0d, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6e, 0x67, 0x6c, 0x75, 0x4e, 0x75, 0x6d, 0x50, 0x6f, 0x69, 0x6e,
|
0x20, 0x28, 0x6e, 0x6e, 0x67, 0x6c, 0x75, 0x4e, 0x75, 0x6d, 0x53, 0x70, 0x6f, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3e, 0x20,
|
||||||
0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3e, 0x20, 0x31, 0x29, 0x20, 0x02, 0xd2, 0x02, 0x01, 0x00, 0x18, 0x00,
|
0x30, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x09, 0x09, 0x6e, 0x6e, 0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x53, 0x70, 0x6f, 0x74, 0x4c, 0x69,
|
||||||
0x00, 0x00, 0x01, 0x09, 0x35, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x7d, 0x0d, 0x0a, 0x02, 0x54, 0xc9, 0x00, 0x00, 0x15,
|
0x67, 0x68, 0x74, 0x28, 0x36, 0x02, 0xb0, 0x03, 0x01, 0x00, 0xa3, 0x12, 0x00, 0x00};
|
||||||
0x00, 0x00, 0x00, 0x01, 0x03, 0x23, 0x69, 0x66, 0x02, 0xef, 0x38, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x36,
|
|
||||||
0x0d, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6e, 0x67, 0x6c, 0x75, 0x4e, 0x75, 0x6d, 0x53, 0x70, 0x6f, 0x74,
|
|
||||||
0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x09, 0x09, 0x6e, 0x6e, 0x67,
|
|
||||||
0x6c, 0x43, 0x61, 0x6c, 0x63, 0x53, 0x70, 0x6f, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x28, 0x36, 0x02, 0xb0, 0x03,
|
|
||||||
0x01, 0x00, 0xa3, 0x12, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: Posterization.frag
|
// File: Posterization.frag
|
||||||
const char toospicyFileName_17[] = "Posterization.frag";
|
const char toospicyFileName_17[] = "Posterization.frag";
|
||||||
const size_t toospicyPatchSize_17 = 59;
|
const size_t toospicyPatchSize_17 = 59;
|
||||||
const unsigned char toospicyPatchBuffer_17[] = {0xc1, 0xb7, 0x73, 0x37, 0xa9, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
const unsigned char toospicyPatchBuffer_17[] = {0xc1, 0xb7, 0x73, 0x37, 0xa9, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01,
|
||||||
0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5c, 0x01,
|
0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0,
|
0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x05,
|
||||||
0x01, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f,
|
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0x1a, 0x02, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00};
|
||||||
0x61, 0x74, 0x02, 0x1a, 0x02, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: Sepia.frag
|
// File: Sepia.frag
|
||||||
const char toospicyFileName_18[] = "Sepia.frag";
|
const char toospicyFileName_18[] = "Sepia.frag";
|
||||||
const size_t toospicyPatchSize_18 = 320;
|
const size_t toospicyPatchSize_18 = 320;
|
||||||
const unsigned char toospicyPatchBuffer_18[] = {
|
const unsigned char toospicyPatchBuffer_18[] = {
|
||||||
0xe5, 0x2e, 0xad, 0xed, 0xa1, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02,
|
0xe5, 0x2e, 0xad, 0xed, 0xa1, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02,
|
||||||
0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x22, 0x2f, 0x2f, 0x23, 0x65, 0x6e, 0x64,
|
0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x22, 0x2f, 0x2f, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a,
|
||||||
0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20,
|
0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b,
|
||||||
0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x02, 0xf2, 0x01, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x01,
|
0x02, 0xf2, 0x01, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x01, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x61, 0x74, 0x65, 0x3b,
|
||||||
0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x61, 0x74, 0x65, 0x3b, 0x02, 0x44, 0x02, 0x00, 0x00, 0x18, 0x00,
|
0x02, 0x44, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0xdd, 0x20, 0x20, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x6f,
|
||||||
0x00, 0x00, 0x01, 0xdd, 0x20, 0x20, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x63,
|
0x72, 0x69, 0x67, 0x63, 0x6f, 0x6c, 0x3d, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x4f, 0x72, 0x69, 0x67, 0x50,
|
||||||
0x6f, 0x6c, 0x3d, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x4f, 0x72, 0x69, 0x67, 0x50, 0x69,
|
0x69, 0x63, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x61, 0x6c,
|
||||||
0x63, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68,
|
0x66, 0x34, 0x20, 0x73, 0x65, 0x70, 0x69, 0x61, 0x63, 0x6f, 0x6c, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x70, 0x69,
|
||||||
0x61, 0x6c, 0x66, 0x34, 0x20, 0x73, 0x65, 0x70, 0x69, 0x61, 0x63, 0x6f, 0x6c, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
0x61, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x64, 0x6f, 0x74, 0x28, 0x6f, 0x72, 0x69, 0x67, 0x63, 0x6f, 0x6c, 0x2e, 0x72,
|
||||||
0x20, 0x73, 0x65, 0x70, 0x69, 0x61, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x64, 0x6f, 0x74, 0x28, 0x6f,
|
0x67, 0x62, 0x2c, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x30, 0x2e, 0x32, 0x39, 0x39, 0x2c, 0x30, 0x2e, 0x35, 0x38, 0x37, 0x2c, 0x30,
|
||||||
0x72, 0x69, 0x67, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x2c, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x30, 0x2e,
|
0x2e, 0x31, 0x34, 0x34, 0x29, 0x29, 0x2a, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x36, 0x2c, 0x30,
|
||||||
0x32, 0x39, 0x39, 0x2c, 0x30, 0x2e, 0x35, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x31, 0x34, 0x34, 0x29, 0x29, 0x2a, 0x68,
|
0x2e, 0x33, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x70, 0x69, 0x61, 0x63, 0x6f, 0x6c, 0x2e, 0x61, 0x3d, 0x31,
|
||||||
0x61, 0x6c, 0x66, 0x33, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x36, 0x2c, 0x30, 0x2e, 0x33, 0x29, 0x3b, 0x0d,
|
0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f,
|
||||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x70, 0x69, 0x61, 0x63, 0x6f, 0x6c, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30,
|
0x72, 0x3d, 0x6d, 0x69, 0x78, 0x28, 0x6f, 0x72, 0x69, 0x67, 0x63, 0x6f, 0x6c, 0x2c, 0x73, 0x65, 0x70, 0x69, 0x61, 0x63, 0x6f, 0x6c,
|
||||||
0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c,
|
0x2c, 0x52, 0x61, 0x74, 0x65, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
||||||
0x6f, 0x72, 0x3d, 0x6d, 0x69, 0x78, 0x28, 0x6f, 0x72, 0x69, 0x67, 0x63, 0x6f, 0x6c, 0x2c, 0x73, 0x65, 0x70, 0x69,
|
|
||||||
0x61, 0x63, 0x6f, 0x6c, 0x2c, 0x52, 0x61, 0x74, 0x65, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: Sepia.vert
|
// File: Sepia.vert
|
||||||
const char toospicyFileName_19[] = "Sepia.vert";
|
const char toospicyFileName_19[] = "Sepia.vert";
|
||||||
const size_t toospicyPatchSize_19 = 68;
|
const size_t toospicyPatchSize_19 = 68;
|
||||||
const unsigned char toospicyPatchBuffer_19[] = {
|
const unsigned char toospicyPatchBuffer_19[] = {0xd1, 0x30, 0x7b, 0xf2, 0x9a, 0x00, 0x00, 0x00, 0x01, 0x31, 0x76, 0x61, 0x72, 0x79,
|
||||||
0xd1, 0x30, 0x7b, 0xf2, 0x9a, 0x00, 0x00, 0x00, 0x01, 0x31, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67,
|
0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f,
|
||||||
0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x0d, 0x0a,
|
0x6f, 0x72, 0x64, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d,
|
||||||
0x0d, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x29,
|
0x61, 0x69, 0x6e, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a,
|
||||||
0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x02, 0x52, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00};
|
0x20, 0x20, 0x20, 0x02, 0x52, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00};
|
||||||
|
|
||||||
// File: Solarization.frag
|
// File: Solarization.frag
|
||||||
const char toospicyFileName_20[] = "Solarization.frag";
|
const char toospicyFileName_20[] = "Solarization.frag";
|
||||||
const size_t toospicyPatchSize_20 = 98;
|
const size_t toospicyPatchSize_20 = 98;
|
||||||
const unsigned char toospicyPatchBuffer_20[] = {
|
const unsigned char toospicyPatchBuffer_20[] = {
|
||||||
0x90, 0xdb, 0xc4, 0x2d, 0x22, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00,
|
0x90, 0xdb, 0xc4, 0x2d, 0x22, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f,
|
||||||
0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f,
|
0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x46,
|
||||||
0x02, 0xd0, 0x01, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02,
|
0x00, 0x00, 0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0x1a, 0x02, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x01,
|
||||||
0x1a, 0x02, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xa5, 0x02, 0x00, 0x00,
|
0x02, 0x2e, 0x30, 0x02, 0xa5, 0x02, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xd1, 0x02, 0x00,
|
||||||
0x2c, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xd1, 0x02, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
|
0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xfd, 0x02, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00};
|
||||||
0x01, 0x02, 0x2e, 0x30, 0x02, 0xfd, 0x02, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: Test0.frag
|
// File: Test0.frag
|
||||||
const char toospicyFileName_21[] = "Test0.frag";
|
const char toospicyFileName_21[] = "Test0.frag";
|
||||||
const size_t toospicyPatchSize_21 = 907;
|
const size_t toospicyPatchSize_21 = 907;
|
||||||
const unsigned char toospicyPatchBuffer_21[] = {
|
const unsigned char toospicyPatchBuffer_21[] = {
|
||||||
0x82, 0x87, 0xe9, 0xd6, 0x17, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x01, 0x77,
|
0x82, 0x87, 0xe9, 0xd6, 0x17, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x01, 0x77, 0x66, 0x6c, 0x6f,
|
||||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x45, 0x64, 0x67, 0x65, 0x52, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f,
|
0x61, 0x74, 0x20, 0x45, 0x64, 0x67, 0x65, 0x52, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f,
|
||||||
0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x45, 0x64, 0x67, 0x65, 0x47, 0x3b, 0x0d, 0x0a, 0x75, 0x6e,
|
0x61, 0x74, 0x20, 0x45, 0x64, 0x67, 0x65, 0x47, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f,
|
||||||
0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x45, 0x64, 0x67, 0x65, 0x42, 0x3b, 0x0d,
|
0x61, 0x74, 0x20, 0x45, 0x64, 0x67, 0x65, 0x42, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f,
|
||||||
0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x54, 0x68, 0x72, 0x65,
|
0x61, 0x74, 0x20, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d,
|
||||||
0x73, 0x68, 0x6f, 0x6c, 0x64, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f,
|
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d,
|
||||||
0x61, 0x74, 0x20, 0x57, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20,
|
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0xd3, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x01, 0x5e, 0x66, 0x6c, 0x6f, 0x61, 0x74,
|
||||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0xd3, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x01, 0x5e, 0x66, 0x6c, 0x6f,
|
0x20, 0x44, 0x65, 0x70, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d,
|
||||||
0x61, 0x74, 0x20, 0x44, 0x65, 0x70, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32,
|
0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x29, 0x29,
|
||||||
0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65,
|
0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x3d, 0x66,
|
||||||
0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x29, 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x46, 0x72,
|
0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2a, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x29, 0x2f, 0x32, 0x35, 0x36, 0x2e,
|
||||||
0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x3d, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x44, 0x65, 0x70,
|
0x30, 0x02, 0x6d, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x53, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x46,
|
||||||
0x74, 0x68, 0x2a, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x29, 0x2f, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x02, 0x6d, 0x01, 0x00,
|
0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x67, 0x3d, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x44, 0x65, 0x70, 0x74, 0x68,
|
||||||
0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x53, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61,
|
0x2a, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x29, 0x2f, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68,
|
||||||
0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x67, 0x3d, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x44, 0x65, 0x70, 0x74,
|
0x2d, 0x3d, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x67, 0x3b, 0x44, 0x65, 0x70, 0x74, 0x68,
|
||||||
0x68, 0x2a, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x29, 0x2f, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x44,
|
0x2a, 0x3d, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x02, 0xdf, 0x01, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x01, 0x31, 0x3b, 0x0d, 0x0a, 0x23,
|
||||||
0x65, 0x70, 0x74, 0x68, 0x2d, 0x3d, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e,
|
0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x43, 0x44, 0x65, 0x70, 0x74, 0x68, 0x3b, 0x0d, 0x0a,
|
||||||
0x67, 0x3b, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2a, 0x3d, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x02, 0xdf, 0x01, 0x00, 0x00,
|
0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x34, 0x5d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x76, 0x65,
|
||||||
0x2f, 0x00, 0x00, 0x00, 0x01, 0x31, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x09, 0x66, 0x6c,
|
0x63, 0x02, 0x3f, 0x02, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x03, 0x4e, 0x01, 0x00, 0x00, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65,
|
||||||
0x6f, 0x61, 0x74, 0x20, 0x43, 0x44, 0x65, 0x70, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74,
|
0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x29,
|
||||||
0x20, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x34, 0x5d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x76, 0x65, 0x63, 0x02, 0x3f,
|
0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75,
|
||||||
0x02, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x03, 0x4e, 0x01, 0x00, 0x00, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65,
|
0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65,
|
||||||
0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f,
|
0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2d, 0x32, 0x2e, 0x30, 0x2f, 0x57, 0x69, 0x64, 0x74, 0x68, 0x2c, 0x74, 0x65, 0x78,
|
||||||
0x72, 0x64, 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x30, 0x5d, 0x20, 0x3d,
|
0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x29, 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x31,
|
||||||
0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74,
|
0x5d, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74,
|
||||||
0x68, 0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2d, 0x32,
|
0x68, 0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2b, 0x32, 0x2e, 0x30, 0x2f,
|
||||||
0x2e, 0x30, 0x2f, 0x57, 0x69, 0x64, 0x74, 0x68, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79,
|
0x57, 0x69, 0x64, 0x74, 0x68, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x29, 0x29, 0x2e, 0x72, 0x3b, 0x0d,
|
||||||
0x29, 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20,
|
0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44,
|
||||||
0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68,
|
0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f,
|
||||||
0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2b, 0x32, 0x2e,
|
0x72, 0x64, 0x2e, 0x78, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x2d, 0x32, 0x2e, 0x30, 0x2f, 0x48, 0x65,
|
||||||
0x30, 0x2f, 0x57, 0x69, 0x64, 0x74, 0x68, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x29,
|
0x69, 0x67, 0x68, 0x74, 0x29, 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x33, 0x5d, 0x20, 0x3d,
|
||||||
0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x74,
|
0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x76,
|
||||||
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c,
|
0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72,
|
||||||
0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2c, 0x74, 0x65, 0x78,
|
0x64, 0x2e, 0x79, 0x2b, 0x32, 0x2e, 0x30, 0x2f, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x29, 0x29, 0x2e, 0x72, 0x3b, 0x02, 0xd3, 0x03,
|
||||||
0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x2d, 0x32, 0x2e, 0x30, 0x2f, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x29,
|
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x01, 0x2e, 0x02, 0xf2, 0x03, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x6e, 0x20, 0x28,
|
||||||
0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x74,
|
0x65, 0x64, 0x67, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||||
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c,
|
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67,
|
||||||
0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2c, 0x74, 0x65, 0x78,
|
0x62, 0x3d, 0x76, 0x65, 0x63, 0x33, 0x28, 0x45, 0x64, 0x67, 0x65, 0x52, 0x2c, 0x45, 0x64, 0x67, 0x65, 0x47, 0x2c, 0x45, 0x64, 0x67,
|
||||||
0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x2b, 0x32, 0x2e, 0x30, 0x2f, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x29,
|
0x65, 0x42, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||||
0x29, 0x2e, 0x72, 0x3b, 0x02, 0xd3, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x01, 0x2e, 0x02, 0xf2, 0x03,
|
0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x02, 0x9d,
|
||||||
0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x6e, 0x20, 0x28, 0x65, 0x64, 0x67, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x30,
|
0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x12, 0x3b, 0x0d, 0x0a, 0x09, 0x7d, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66,
|
||||||
0x29, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
||||||
0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x76,
|
|
||||||
0x65, 0x63, 0x33, 0x28, 0x45, 0x64, 0x67, 0x65, 0x52, 0x2c, 0x45, 0x64, 0x67, 0x65, 0x47, 0x2c, 0x45, 0x64, 0x67,
|
|
||||||
0x65, 0x42, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
|
||||||
0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x20, 0x3d,
|
|
||||||
0x20, 0x31, 0x2e, 0x30, 0x02, 0x9d, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x12, 0x3b, 0x0d, 0x0a, 0x09,
|
|
||||||
0x7d, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: Test1.frag
|
// File: Test1.frag
|
||||||
const char toospicyFileName_22[] = "Test1.frag";
|
const char toospicyFileName_22[] = "Test1.frag";
|
||||||
const size_t toospicyPatchSize_22 = 544;
|
const size_t toospicyPatchSize_22 = 544;
|
||||||
const unsigned char toospicyPatchBuffer_22[] = {
|
const unsigned char toospicyPatchBuffer_22[] = {
|
||||||
0xde, 0x48, 0xcd, 0x78, 0x13, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00, 0x01, 0x02,
|
0xde, 0x48, 0xcd, 0x78, 0x13, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02,
|
||||||
0x2f, 0x2f, 0x02, 0x5a, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02,
|
0x5a, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0x8e, 0x01, 0x00, 0x00, 0x41, 0x00,
|
||||||
0x8e, 0x01, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xcf, 0x01, 0x00, 0x00, 0x82, 0x00,
|
0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xcf, 0x01, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x01, 0x90, 0x66, 0x6c, 0x6f, 0x61, 0x74,
|
||||||
0x00, 0x00, 0x01, 0x90, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x58, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f,
|
0x20, 0x58, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x59, 0x3b, 0x0d,
|
||||||
0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x59, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72,
|
0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69,
|
||||||
0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d,
|
0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69,
|
||||||
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66,
|
0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x32, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72,
|
||||||
0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x32, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66,
|
0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x46, 0x6c, 0x61, 0x74, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d,
|
||||||
0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x46, 0x6c, 0x61, 0x74, 0x3b, 0x0d, 0x0a, 0x75, 0x6e,
|
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x32, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72,
|
||||||
0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x32, 0x3b,
|
0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0xd9, 0x02, 0x00, 0x00, 0xce, 0x01, 0x00, 0x00, 0x01, 0x01, 0x2e, 0x02, 0xa6, 0x04,
|
||||||
0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0xd9, 0x02, 0x00,
|
0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x68, 0x61, 0x6c, 0x66, 0x20, 0x6e, 0x65, 0x77, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x3d,
|
||||||
0x00, 0xce, 0x01, 0x00, 0x00, 0x01, 0x01, 0x2e, 0x02, 0xa6, 0x04, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x01, 0x4b,
|
0x30, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x20, 0x3e, 0x20, 0x31, 0x2e, 0x30,
|
||||||
0x68, 0x61, 0x6c, 0x66, 0x20, 0x6e, 0x65, 0x77, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x3d, 0x30, 0x2e, 0x30, 0x3b, 0x0d,
|
0x29, 0x7b, 0x0d, 0x0a, 0x09, 0x09, 0x20, 0x20, 0x6e, 0x2e, 0x78, 0x20, 0x2a, 0x3d, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a,
|
||||||
0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x20, 0x3e, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x7b,
|
0x09, 0x09, 0x09, 0x6e, 0x65, 0x77, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x32, 0x2e, 0x30, 0x02, 0x33, 0x05, 0x00, 0x00,
|
||||||
0x0d, 0x0a, 0x09, 0x09, 0x20, 0x20, 0x6e, 0x2e, 0x78, 0x20, 0x2a, 0x3d, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x3b, 0x0d,
|
0x39, 0x00, 0x00, 0x00, 0x01, 0x23, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x65, 0x79, 0x65, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x30,
|
||||||
0x0a, 0x09, 0x09, 0x09, 0x6e, 0x65, 0x77, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x32, 0x2e, 0x30, 0x02,
|
0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x65, 0x79, 0x65, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x02, 0x89, 0x05,
|
||||||
0x33, 0x05, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x01, 0x23, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x65, 0x79,
|
0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x03, 0x6e, 0x65, 0x77, 0x02, 0xb0, 0x05, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x01, 0x25,
|
||||||
0x65, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x65, 0x79, 0x65, 0x2e, 0x7a,
|
0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64,
|
||||||
0x20, 0x3d, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x02, 0x89, 0x05, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x03, 0x6e,
|
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x02, 0x48, 0x06, 0x00, 0x00, 0x26, 0x00,
|
||||||
0x65, 0x77, 0x02, 0xb0, 0x05, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x01, 0x25, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20,
|
0x00, 0x00, 0x01, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x02, 0x6f, 0x06, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00,
|
||||||
0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x0d, 0x0a,
|
0x01, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x02, 0xb7, 0x06, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x01, 0x2d,
|
||||||
0x20, 0x20, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x02, 0x48, 0x06, 0x00, 0x00, 0x26, 0x00,
|
0x76, 0x65, 0x63, 0x32, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x32,
|
||||||
0x00, 0x00, 0x01, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x02, 0x6f, 0x06, 0x00, 0x00, 0x47,
|
0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64,
|
||||||
0x00, 0x00, 0x00, 0x01, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x02, 0xb7, 0x06, 0x00, 0x00,
|
0x32, 0x02, 0x7f, 0x07, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x11, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x65,
|
||||||
0xbf, 0x00, 0x00, 0x00, 0x01, 0x2d, 0x76, 0x65, 0x63, 0x32, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64,
|
0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x32, 0x02, 0xa5, 0x07, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00};
|
||||||
0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x32, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x6f, 0x64, 0x69,
|
|
||||||
0x66, 0x69, 0x65, 0x64, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x32, 0x02, 0x7f, 0x07, 0x00, 0x00, 0x1e,
|
|
||||||
0x00, 0x00, 0x00, 0x01, 0x11, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f,
|
|
||||||
0x72, 0x64, 0x32, 0x02, 0xa5, 0x07, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: YUVCompose.frag
|
// File: YUVCompose.frag
|
||||||
const char toospicyFileName_23[] = "YUVCompose.frag";
|
const char toospicyFileName_23[] = "YUVCompose.frag";
|
||||||
const size_t toospicyPatchSize_23 = 507;
|
const size_t toospicyPatchSize_23 = 507;
|
||||||
const unsigned char toospicyPatchBuffer_23[] = {
|
const unsigned char toospicyPatchBuffer_23[] = {
|
||||||
0xee, 0x1d, 0x3d, 0x9c, 0x54, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02,
|
0xee, 0x1d, 0x3d, 0x9c, 0x54, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02,
|
||||||
0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x49, 0x2f, 0x2f, 0x23, 0x65, 0x6e, 0x64,
|
0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x49, 0x2f, 0x2f, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a,
|
||||||
0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20,
|
0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b,
|
||||||
0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20,
|
0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x59, 0x54,
|
||||||
0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x59, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x3b,
|
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x02, 0x07, 0x02, 0x00, 0x00,
|
||||||
0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x02, 0x07, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
|
0x16, 0x00, 0x00, 0x00, 0x01, 0x25, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32,
|
||||||
0x01, 0x25, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44,
|
0x44, 0x20, 0x43, 0x62, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x69, 0x66, 0x09, 0x30, 0x02,
|
||||||
0x20, 0x43, 0x62, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x69, 0x66, 0x09,
|
0x33, 0x02, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xba, 0x02, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x01,
|
||||||
0x30, 0x02, 0x33, 0x02, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xba, 0x02, 0x00, 0x00,
|
0x7a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x20, 0x59, 0x43, 0x62,
|
||||||
0x70, 0x00, 0x00, 0x00, 0x01, 0x7a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20,
|
0x43, 0x72, 0x32, 0x52, 0x47, 0x42, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x0d, 0x0a, 0x28,
|
||||||
0x6d, 0x61, 0x74, 0x33, 0x20, 0x59, 0x43, 0x62, 0x43, 0x72, 0x32, 0x52, 0x47, 0x42, 0x4d, 0x61, 0x74, 0x72, 0x69,
|
0x20, 0x31, 0x2e, 0x31, 0x36, 0x34, 0x2c, 0x20, 0x31, 0x2e, 0x31, 0x36, 0x34, 0x2c, 0x31, 0x2e, 0x31, 0x36, 0x34, 0x2c, 0x0d, 0x0a,
|
||||||
0x78, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x0d, 0x0a, 0x28, 0x20, 0x31, 0x2e, 0x31, 0x36, 0x34, 0x2c, 0x20,
|
0x20, 0x20, 0x20, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x30, 0x2e, 0x33, 0x39, 0x32, 0x2c, 0x32, 0x2e, 0x30, 0x31, 0x37, 0x2c, 0x0d,
|
||||||
0x31, 0x2e, 0x31, 0x36, 0x34, 0x2c, 0x31, 0x2e, 0x31, 0x36, 0x34, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x30,
|
0x0a, 0x20, 0x20, 0x31, 0x2e, 0x35, 0x39, 0x36, 0x2c, 0x2d, 0x30, 0x2e, 0x38, 0x31, 0x33, 0x2c, 0x20, 0x20, 0x30, 0x2e, 0x30, 0x0d,
|
||||||
0x2e, 0x30, 0x2c, 0x2d, 0x30, 0x2e, 0x33, 0x39, 0x32, 0x2c, 0x32, 0x2e, 0x30, 0x31, 0x37, 0x2c, 0x0d, 0x0a, 0x20,
|
0x0a, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x02, 0x28, 0x03, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00,
|
||||||
0x20, 0x31, 0x2e, 0x35, 0x39, 0x36, 0x2c, 0x2d, 0x30, 0x2e, 0x38, 0x31, 0x33, 0x2c, 0x20, 0x20, 0x30, 0x2e, 0x30,
|
0x01, 0x2e, 0x23, 0x69, 0x66, 0x09, 0x30, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x59, 0x43, 0x62, 0x43, 0x72, 0x41, 0x2d, 0x3d, 0x68, 0x61,
|
||||||
0x0d, 0x0a, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x02, 0x28, 0x03, 0x00, 0x00,
|
0x6c, 0x66, 0x34, 0x28, 0x31, 0x36, 0x2e, 0x30, 0x2f, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x35, 0x2c, 0x30, 0x2e, 0x35,
|
||||||
0xde, 0x00, 0x00, 0x00, 0x01, 0x2e, 0x23, 0x69, 0x66, 0x09, 0x30, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x59, 0x43, 0x62,
|
0x2c, 0x30, 0x29, 0x3b, 0x02, 0x2d, 0x04, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x01, 0x8c, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a,
|
||||||
0x43, 0x72, 0x41, 0x2d, 0x3d, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x28, 0x31, 0x36, 0x2e, 0x30, 0x2f, 0x32, 0x35, 0x35,
|
0x20, 0x20, 0x20, 0x59, 0x43, 0x62, 0x43, 0x72, 0x41, 0x2e, 0x72, 0x67, 0x62, 0x2d, 0x3d, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x31,
|
||||||
0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x35, 0x2c, 0x30, 0x2e, 0x35, 0x2c, 0x30, 0x29, 0x3b, 0x02, 0x2d, 0x04, 0x00, 0x00,
|
0x36, 0x2e, 0x30, 0x2f, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x35, 0x2c, 0x30, 0x2e, 0x35, 0x29, 0x3b, 0x0d, 0x0a, 0x20,
|
||||||
0x26, 0x00, 0x00, 0x00, 0x01, 0x8c, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x59, 0x43, 0x62,
|
0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x3d, 0x20, 0x59,
|
||||||
0x43, 0x72, 0x41, 0x2e, 0x72, 0x67, 0x62, 0x2d, 0x3d, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x31, 0x36, 0x2e, 0x30,
|
0x43, 0x62, 0x43, 0x72, 0x32, 0x52, 0x47, 0x42, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x20, 0x2a, 0x20, 0x59, 0x43, 0x62, 0x43, 0x72,
|
||||||
0x2f, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x35, 0x2c, 0x30, 0x2e, 0x35, 0x29, 0x3b, 0x0d, 0x0a, 0x20,
|
0x41, 0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f,
|
||||||
0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x20,
|
0x72, 0x2e, 0x61, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x7d, 0x0d,
|
||||||
0x3d, 0x20, 0x59, 0x43, 0x62, 0x43, 0x72, 0x32, 0x52, 0x47, 0x42, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x20, 0x2a,
|
0x0a};
|
||||||
0x20, 0x59, 0x43, 0x62, 0x43, 0x72, 0x41, 0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c,
|
|
||||||
0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b,
|
|
||||||
0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
ShaderFilesToPatch tooSpicyShaderPatches[] = {
|
ShaderFilesToPatch tooSpicyShaderPatches[] = {{toospicyFileName_0, toospicyPatchSize_0, toospicyPatchBuffer_0, 0, ""},
|
||||||
{toospicyFileName_0, toospicyPatchSize_0, toospicyPatchBuffer_0, 0, ""},
|
{toospicyFileName_1, toospicyPatchSize_1, toospicyPatchBuffer_1, 0, ""},
|
||||||
{toospicyFileName_1, toospicyPatchSize_1, toospicyPatchBuffer_1, 0, ""},
|
{toospicyFileName_2, toospicyPatchSize_2, toospicyPatchBuffer_2, 0, ""},
|
||||||
{toospicyFileName_2, toospicyPatchSize_2, toospicyPatchBuffer_2, 0, ""},
|
{toospicyFileName_3, toospicyPatchSize_3, toospicyPatchBuffer_3, 0, ""},
|
||||||
{toospicyFileName_3, toospicyPatchSize_3, toospicyPatchBuffer_3, 0, ""},
|
{toospicyFileName_4, toospicyPatchSize_4, toospicyPatchBuffer_4, 0, ""},
|
||||||
{toospicyFileName_4, toospicyPatchSize_4, toospicyPatchBuffer_4, 0, ""},
|
{toospicyFileName_5, toospicyPatchSize_5, toospicyPatchBuffer_5, 0, ""},
|
||||||
{toospicyFileName_5, toospicyPatchSize_5, toospicyPatchBuffer_5, 0, ""},
|
{toospicyFileName_6, toospicyPatchSize_6, toospicyPatchBuffer_6, 0, ""},
|
||||||
{toospicyFileName_6, toospicyPatchSize_6, toospicyPatchBuffer_6, 0, ""},
|
{toospicyFileName_7, toospicyPatchSize_7, toospicyPatchBuffer_7, 0, ""},
|
||||||
{toospicyFileName_7, toospicyPatchSize_7, toospicyPatchBuffer_7, 0, ""},
|
{toospicyFileName_8, toospicyPatchSize_8, toospicyPatchBuffer_8, 0, ""},
|
||||||
{toospicyFileName_8, toospicyPatchSize_8, toospicyPatchBuffer_8, 0, ""},
|
{toospicyFileName_9, toospicyPatchSize_9, toospicyPatchBuffer_9, 0, ""},
|
||||||
{toospicyFileName_9, toospicyPatchSize_9, toospicyPatchBuffer_9, 0, ""},
|
{toospicyFileName_10, toospicyPatchSize_10, toospicyPatchBuffer_10, 0, ""},
|
||||||
{toospicyFileName_10, toospicyPatchSize_10, toospicyPatchBuffer_10, 0, ""},
|
{toospicyFileName_11, toospicyPatchSize_11, toospicyPatchBuffer_11, 0, ""},
|
||||||
{toospicyFileName_11, toospicyPatchSize_11, toospicyPatchBuffer_11, 0, ""},
|
{toospicyFileName_12, toospicyPatchSize_12, toospicyPatchBuffer_12, 0, ""},
|
||||||
{toospicyFileName_12, toospicyPatchSize_12, toospicyPatchBuffer_12, 0, ""},
|
{toospicyFileName_13, toospicyPatchSize_13, toospicyPatchBuffer_13, 0, ""},
|
||||||
{toospicyFileName_13, toospicyPatchSize_13, toospicyPatchBuffer_13, 0, ""},
|
{toospicyFileName_14, toospicyPatchSize_14, toospicyPatchBuffer_14, 0, ""},
|
||||||
{toospicyFileName_14, toospicyPatchSize_14, toospicyPatchBuffer_14, 0, ""},
|
{toospicyFileName_15, toospicyPatchSize_15, toospicyPatchBuffer_15, 0, ""},
|
||||||
{toospicyFileName_15, toospicyPatchSize_15, toospicyPatchBuffer_15, 0, ""},
|
{toospicyFileName_16, toospicyPatchSize_16, toospicyPatchBuffer_16, 0, ""},
|
||||||
{toospicyFileName_16, toospicyPatchSize_16, toospicyPatchBuffer_16, 0, ""},
|
{toospicyFileName_17, toospicyPatchSize_17, toospicyPatchBuffer_17, 0, ""},
|
||||||
{toospicyFileName_17, toospicyPatchSize_17, toospicyPatchBuffer_17, 0, ""},
|
{toospicyFileName_18, toospicyPatchSize_18, toospicyPatchBuffer_18, 0, ""},
|
||||||
{toospicyFileName_18, toospicyPatchSize_18, toospicyPatchBuffer_18, 0, ""},
|
{toospicyFileName_19, toospicyPatchSize_19, toospicyPatchBuffer_19, 0, ""},
|
||||||
{toospicyFileName_19, toospicyPatchSize_19, toospicyPatchBuffer_19, 0, ""},
|
{toospicyFileName_20, toospicyPatchSize_20, toospicyPatchBuffer_20, 0, ""},
|
||||||
{toospicyFileName_20, toospicyPatchSize_20, toospicyPatchBuffer_20, 0, ""},
|
{toospicyFileName_21, toospicyPatchSize_21, toospicyPatchBuffer_21, 0, ""},
|
||||||
{toospicyFileName_21, toospicyPatchSize_21, toospicyPatchBuffer_21, 0, ""},
|
{toospicyFileName_22, toospicyPatchSize_22, toospicyPatchBuffer_22, 0, ""},
|
||||||
{toospicyFileName_22, toospicyPatchSize_22, toospicyPatchBuffer_22, 0, ""},
|
{toospicyFileName_23, toospicyPatchSize_23, toospicyPatchBuffer_23, 0, ""}};
|
||||||
{toospicyFileName_23, toospicyPatchSize_23, toospicyPatchBuffer_23, 0, ""}};
|
|
||||||
|
|
||||||
int tooSpicyShaderPatchesCount = sizeof(tooSpicyShaderPatches) / sizeof(ShaderFilesToPatch);
|
int tooSpicyShaderPatchesCount = sizeof(tooSpicyShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
#ifndef ABC_H
|
|
||||||
#define ABC_H
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// Fragment ABC
|
// Fragment ABC
|
||||||
@@ -63,5 +61,3 @@ SearchReplace abcVsMesa[] = {{"OPTION NV_vertex_program3;", "#OPTION NV_vertex_p
|
|||||||
{"skinning_end:", " "}};
|
{"skinning_end:", " "}};
|
||||||
|
|
||||||
int abcVsMesaCount = sizeof(abcVsMesa) / sizeof(SearchReplace);
|
int abcVsMesaCount = sizeof(abcVsMesa) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef GSEVO_H
|
|
||||||
#define GSEVO_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
ElfShaderOffsets gsevoElfShaderOffsets[] = {
|
ElfShaderOffsets gsevoElfShaderOffsets[] = {
|
||||||
@@ -1194,5 +1191,3 @@ ShaderFilesToPatch gsevoNvidiaShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int gsevoShaderPatchesCount = 4;
|
int gsevoShaderPatchesCount = 4;
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
#ifndef HARLEY_H
|
|
||||||
#define HARLEY_H
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// File: 16box.frag
|
// File: 16box.frag
|
||||||
@@ -1191,5 +1189,3 @@ ShaderFilesToPatch harleyShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int harleyShaderPatchesCount = sizeof(harleyShaderPatches) / sizeof(ShaderFilesToPatch);
|
int harleyShaderPatchesCount = sizeof(harleyShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
#ifndef HOD4_H
|
#pragma once
|
||||||
#define HOD4_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// File: DoF.dat1
|
// File: DoF.dat1
|
||||||
@@ -324,5 +322,3 @@ ShaderFilesToPatch hod4ShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int hod4ShaderPatchesCount = sizeof(hod4ShaderPatches) / sizeof(ShaderFilesToPatch);
|
int hod4ShaderPatchesCount = sizeof(hod4ShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef HOD4SP_H
|
|
||||||
#define HOD4SP_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "hod4.h"
|
#include "hod4.h"
|
||||||
|
|
||||||
@@ -163,5 +160,3 @@ ShaderFilesToPatch hod4spShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int hod4spShaderPatchesCount = sizeof(hod4spShaderPatches) / sizeof(ShaderFilesToPatch);
|
int hod4spShaderPatchesCount = sizeof(hod4spShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef HODEX_H
|
|
||||||
#define HODEX_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// File: average.frag
|
// File: average.frag
|
||||||
@@ -286,5 +283,3 @@ ShaderFilesToPatch hodexShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int hodexShaderPatchesCount = sizeof(hodexShaderPatches) / sizeof(ShaderFilesToPatch);
|
int hodexShaderPatchesCount = sizeof(hodexShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef HUMMER_H
|
|
||||||
#define HUMMER_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
int hummerExtremeShaderFileIndex;
|
int hummerExtremeShaderFileIndex;
|
||||||
@@ -43,5 +40,4 @@ SearchReplace hummerShaderReplaceFlicker[] = {
|
|||||||
{"#pragma optionNV(fastmath on)", "#pragma optionNV(fastmath off)"},
|
{"#pragma optionNV(fastmath on)", "#pragma optionNV(fastmath off)"},
|
||||||
{"#pragma optionNV(fastprecision on)", "#pragma optionNV(fastprecision off)"}};
|
{"#pragma optionNV(fastprecision on)", "#pragma optionNV(fastprecision off)"}};
|
||||||
|
|
||||||
int hummerShaderReplaceFlickerCount = sizeof(hummerShaderReplaceFlicker) / sizeof(SearchReplace);
|
int hummerShaderReplaceFlickerCount = sizeof(hummerShaderReplaceFlicker) / sizeof(SearchReplace);
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef ID_H
|
|
||||||
#define ID_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
ShaderFilesToMod idShaderFilesToMod[] = {{"/shader/Cg/inc/es_shd_base.cg", 0, ""},
|
ShaderFilesToMod idShaderFilesToMod[] = {{"/shader/Cg/inc/es_shd_base.cg", 0, ""},
|
||||||
@@ -63,5 +60,3 @@ SearchReplace id5ShaderReplaceSetForSmoke[] = {
|
|||||||
"0.5h);\nh4OutputColor.a = 0.2h;\n#else\nh4OutputColor.a = h4Color_ColorMap.a;\n#endif"}};
|
"0.5h);\nh4OutputColor.a = 0.2h;\n#else\nh4OutputColor.a = h4Color_ColorMap.a;\n#endif"}};
|
||||||
|
|
||||||
int id5ShaderReplaceSetForSmokeCount = sizeof(id5ShaderReplaceSetForSmoke) / sizeof(SearchReplace);
|
int id5ShaderReplaceSetForSmokeCount = sizeof(id5ShaderReplaceSetForSmoke) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef LGJ_H
|
|
||||||
#define LGJ_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
ShaderFilesToMod lgjShaderFilesToMod[] = {{"/shader/Cg/inc/es_shd_base.cg", 0, ""},
|
ShaderFilesToMod lgjShaderFilesToMod[] = {{"/shader/Cg/inc/es_shd_base.cg", 0, ""},
|
||||||
@@ -26,5 +23,3 @@ SearchReplace lgjCompiledShadersPatch[] = {
|
|||||||
{"TEX R0.x, R0, texture[0], SHADOW2D;", "TEX R0.x, R0, texture[0], 2D;"}};
|
{"TEX R0.x, R0, texture[0], SHADOW2D;", "TEX R0.x, R0, texture[0], 2D;"}};
|
||||||
|
|
||||||
int lgjCompiledShadersPatchCount = sizeof(lgjCompiledShadersPatch) / sizeof(SearchReplace);
|
int lgjCompiledShadersPatchCount = sizeof(lgjCompiledShadersPatch) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef MJ4_H
|
|
||||||
#define MJ$_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// Fragment
|
// Fragment
|
||||||
@@ -315,5 +312,3 @@ SearchReplace mj4VsMesa[] = {{"OPTION NV_vertex_program3;", "#OPTION NV_vertex_p
|
|||||||
{"SEQC", "#SEQC "}};
|
{"SEQC", "#SEQC "}};
|
||||||
|
|
||||||
int mj4VsMesaCount = sizeof(mj4VsMesa) / sizeof(SearchReplace);
|
int mj4VsMesaCount = sizeof(mj4VsMesa) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef OR2_H
|
|
||||||
#define OR2_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
SearchReplace orFsMesa[] = {
|
SearchReplace orFsMesa[] = {
|
||||||
@@ -123,5 +120,3 @@ SearchReplace orVsAti[] = {{"!!VP2.0\nBB1:\n",
|
|||||||
{"v10", "vertex.attrib[10]"}};
|
{"v10", "vertex.attrib[10]"}};
|
||||||
|
|
||||||
int orVsAtiCount = sizeof(orVsAti) / sizeof(SearchReplace);
|
int orVsAtiCount = sizeof(orVsAti) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef PRIMEVAL_H
|
|
||||||
#define PRIMEVAL_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// File: nnstdshader.frag
|
// File: nnstdshader.frag
|
||||||
@@ -90,5 +87,3 @@ ShaderFilesToPatch phShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int phShaderPatchesCount = sizeof(phShaderPatches) / sizeof(ShaderFilesToPatch);
|
int phShaderPatchesCount = sizeof(phShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef RAMBO_H
|
|
||||||
#define RAMBO_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// File: 16box.frag
|
// File: 16box.frag
|
||||||
@@ -1661,5 +1658,3 @@ ShaderFilesToPatch ramboNvidiaShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int ramboNvidiaShaderPatchesCount = sizeof(ramboNvidiaShaderPatches) / sizeof(ShaderFilesToPatch);
|
int ramboNvidiaShaderPatchesCount = sizeof(ramboNvidiaShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
#ifndef RTUNED_H
|
|
||||||
#define RTUNED_H
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// Fragment
|
// Fragment
|
||||||
@@ -155,5 +153,3 @@ SearchReplace rtunedVsMesa[] = {
|
|||||||
{"DP3_SAT diff.w, normal_w, tmp;", "DP3 diff.w, normal_w, tmp;MAX diff.w, diff.w, 0.0;MIN diff.w, diff.w, 1.0;"}};
|
{"DP3_SAT diff.w, normal_w, tmp;", "DP3 diff.w, normal_w, tmp;MAX diff.w, diff.w, 0.0;MIN diff.w, diff.w, 1.0;"}};
|
||||||
|
|
||||||
int rtunedVsMesaCount = sizeof(rtunedVsMesa) / sizeof(SearchReplace);
|
int rtunedVsMesaCount = sizeof(rtunedVsMesa) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "2spicy.h"
|
|
||||||
#include "abc.h"
|
|
||||||
#include "gsevo.h"
|
|
||||||
#include "harley.h"
|
|
||||||
#include "hod4.h"
|
|
||||||
#include "hod4sp.h"
|
|
||||||
#include "hodex.h"
|
|
||||||
#include "hummer.h"
|
|
||||||
#include "id.h"
|
|
||||||
#include "lgj.h"
|
|
||||||
#include "mj4.h"
|
|
||||||
#include "or2.h"
|
|
||||||
#include "primeval.h"
|
|
||||||
#include "rambo.h"
|
|
||||||
#include "rtuned.h"
|
|
||||||
#include "srtv.h"
|
|
||||||
#include "vf5.h"
|
|
||||||
#include "vt3.h"
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef SRTV_H
|
|
||||||
#define SRTV_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
ElfShaderOffsets srtvElfShaderOffsets[] = {
|
ElfShaderOffsets srtvElfShaderOffsets[] = {
|
||||||
@@ -168,5 +165,3 @@ dec_retio_list_1[4] = nngluUserUniform[KL_USER_UNIFORM_INDEX_DIRT1].z;\r\n\t\t\t
|
|||||||
dec_retio_list_1[5] = nngluUserUniform[KL_USER_UNIFORM_INDEX_DIRT1].w;\r\n"}};
|
dec_retio_list_1[5] = nngluUserUniform[KL_USER_UNIFORM_INDEX_DIRT1].w;\r\n"}};
|
||||||
|
|
||||||
int srtvVsMesaCount = sizeof(srtvVsMesa) / sizeof(SearchReplace);
|
int srtvVsMesaCount = sizeof(srtvVsMesa) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,7 +1,4 @@
|
|||||||
#ifndef VF5_H
|
|
||||||
#define VF5_H
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
// Fragment
|
// Fragment
|
||||||
SearchReplace vf5FsMesa[] = {
|
SearchReplace vf5FsMesa[] = {
|
||||||
@@ -400,5 +397,3 @@ Vf5StagesList vf5StageList[] = {{"are", "Arena", true},
|
|||||||
{"yuk", "Snow Mountain", false}};
|
{"yuk", "Snow Mountain", false}};
|
||||||
|
|
||||||
int vf5StageListCount = sizeof(vf5StageList) / sizeof(Vf5StagesList);
|
int vf5StageListCount = sizeof(vf5StageList) / sizeof(Vf5StagesList);
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef VT3_H
|
|
||||||
#define VT3_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
ShaderFilesToMod vt3ShaderFilesToMod[] = {{"/shader/baka.fx", 0, ""}, {"/shader/main_p.fx", 0, ""},
|
ShaderFilesToMod vt3ShaderFilesToMod[] = {{"/shader/baka.fx", 0, ""}, {"/shader/main_p.fx", 0, ""},
|
||||||
@@ -21,5 +18,3 @@ SearchReplace vt3ShaderReplaceSet2[] = {{"POSITION0", "ATTR0"}, {"COLOR", "ATT
|
|||||||
{"BLENDWEIGHT", "ATTR1"}, {"BLENDINDICES", "ATTR7"}};
|
{"BLENDWEIGHT", "ATTR1"}, {"BLENDINDICES", "ATTR7"}};
|
||||||
|
|
||||||
int vt3ShaderReplaceCount2 = sizeof(vt3ShaderReplaceSet2) / sizeof(SearchReplace);
|
int vt3ShaderReplaceCount2 = sizeof(vt3ShaderReplaceSet2) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,9 +1,6 @@
|
|||||||
#ifndef TOUCHSCREEN_H
|
#pragma once
|
||||||
#define TOUCHSCREEN_H
|
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
void phCoordinates(int x, int y, int w, int h, int button);
|
void phCoordinates(int x, int y, int w, int h, int button);
|
||||||
ssize_t phRead(int fd, void *buf, size_t count);
|
ssize_t phRead(int fd, void *buf, size_t count);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,8 +1,3 @@
|
|||||||
#ifndef VERSION_H
|
|
||||||
#define VERSION_H
|
|
||||||
|
|
||||||
// Common file to hold the version information
|
// Common file to hold the version information
|
||||||
#define MAJOR_VERSION 2
|
#define MAJOR_VERSION 2
|
||||||
#define MINOR_VERSION 0
|
#define MINOR_VERSION 0
|
||||||
|
|
||||||
#endif // VERSION_H
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
#ifndef X11_H
|
|
||||||
#define X11_H
|
|
||||||
|
|
||||||
#endif
|
|
||||||
Reference in New Issue
Block a user