mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-08-04 08:22:32 +00:00
Merge branch 'shadps4-emu:main' into patch-2
This commit is contained in:
commit
57f57b3283
4
.github/linux-appimage-qt.sh
vendored
4
.github/linux-appimage-qt.sh
vendored
@ -27,7 +27,7 @@ chmod a+x linuxdeploy-plugin-checkrt-x86_64.sh
|
|||||||
|
|
||||||
cp -a "$GITHUB_WORKSPACE/build/translations" AppDir/usr/bin
|
cp -a "$GITHUB_WORKSPACE/build/translations" AppDir/usr/bin
|
||||||
|
|
||||||
./linuxdeploy-x86_64.AppImage --appdir AppDir -d "$GITHUB_WORKSPACE"/.github/shadps4.desktop -e "$GITHUB_WORKSPACE"/build/shadps4 -i "$GITHUB_WORKSPACE"/.github/shadps4.png --plugin qt
|
./linuxdeploy-x86_64.AppImage --appdir AppDir -d "$GITHUB_WORKSPACE"/.github/shadps4.desktop -e "$GITHUB_WORKSPACE"/build/shadps4 -i "$GITHUB_WORKSPACE"/src/images/net.shadps4.shadPS4.svg --plugin qt
|
||||||
rm AppDir/usr/plugins/multimedia/libgstreamermediaplugin.so
|
rm AppDir/usr/plugins/multimedia/libgstreamermediaplugin.so
|
||||||
./linuxdeploy-x86_64.AppImage --appdir AppDir --output appimage
|
./linuxdeploy-x86_64.AppImage --appdir AppDir --output appimage
|
||||||
mv Shadps4-x86_64.AppImage Shadps4-qt.AppImage
|
mv shadPS4-x86_64.AppImage Shadps4-qt.AppImage
|
||||||
|
4
.github/linux-appimage-sdl.sh
vendored
4
.github/linux-appimage-sdl.sh
vendored
@ -17,5 +17,5 @@ chmod a+x linuxdeploy-plugin-checkrt-x86_64.sh
|
|||||||
# Build AppImage
|
# Build AppImage
|
||||||
./linuxdeploy-x86_64.AppImage --appdir AppDir
|
./linuxdeploy-x86_64.AppImage --appdir AppDir
|
||||||
./linuxdeploy-plugin-checkrt-x86_64.sh --appdir AppDir
|
./linuxdeploy-plugin-checkrt-x86_64.sh --appdir AppDir
|
||||||
./linuxdeploy-x86_64.AppImage --appdir AppDir -d "$GITHUB_WORKSPACE"/.github/shadps4.desktop -e "$GITHUB_WORKSPACE"/build/shadps4 -i "$GITHUB_WORKSPACE"/.github/shadps4.png --output appimage
|
./linuxdeploy-x86_64.AppImage --appdir AppDir -d "$GITHUB_WORKSPACE"/.github/shadps4.desktop -e "$GITHUB_WORKSPACE"/build/shadps4 -i "$GITHUB_WORKSPACE"/src/images/net.shadps4.shadPS4.svg --output appimage
|
||||||
mv Shadps4-x86_64.AppImage Shadps4-sdl.AppImage
|
mv shadPS4-x86_64.AppImage Shadps4-sdl.AppImage
|
||||||
|
6
.github/shadps4.desktop
vendored
6
.github/shadps4.desktop
vendored
@ -1,9 +1,9 @@
|
|||||||
[Desktop Entry]
|
[Desktop Entry]
|
||||||
Name=Shadps4
|
Name=shadPS4
|
||||||
Exec=shadps4
|
Exec=shadps4
|
||||||
Terminal=false
|
Terminal=false
|
||||||
Type=Application
|
Type=Application
|
||||||
Icon=shadps4
|
Icon=net.shadps4.shadPS4
|
||||||
Comment=shadps4 emulator
|
Comment=shadPS4 Emulator
|
||||||
Categories=Game;
|
Categories=Game;
|
||||||
StartupWMClass=shadps4;
|
StartupWMClass=shadps4;
|
||||||
|
10
.github/workflows/build.yml
vendored
10
.github/workflows/build.yml
vendored
@ -143,7 +143,7 @@ jobs:
|
|||||||
arch: amd64
|
arch: amd64
|
||||||
|
|
||||||
- name: Configure CMake
|
- name: Configure CMake
|
||||||
run: cmake --fresh -G Ninja -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_QT_GUI=ON -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
run: cmake --fresh -G Ninja -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DENABLE_QT_GUI=ON -DENABLE_UPDATER=ON -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --parallel
|
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --parallel
|
||||||
@ -162,7 +162,7 @@ jobs:
|
|||||||
path: upload/
|
path: upload/
|
||||||
|
|
||||||
macos-sdl:
|
macos-sdl:
|
||||||
runs-on: macos-latest
|
runs-on: macos-15
|
||||||
needs: get-info
|
needs: get-info
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@ -218,7 +218,7 @@ jobs:
|
|||||||
path: shadps4-macos-sdl.tar.gz
|
path: shadps4-macos-sdl.tar.gz
|
||||||
|
|
||||||
macos-qt:
|
macos-qt:
|
||||||
runs-on: macos-latest
|
runs-on: macos-15
|
||||||
needs: get-info
|
needs: get-info
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
@ -265,7 +265,7 @@ jobs:
|
|||||||
variant: sccache
|
variant: sccache
|
||||||
|
|
||||||
- name: Configure CMake
|
- name: Configure CMake
|
||||||
run: cmake --fresh -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_OSX_ARCHITECTURES=x86_64 -DENABLE_QT_GUI=ON -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
|
run: cmake --fresh -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_OSX_ARCHITECTURES=x86_64 -DENABLE_QT_GUI=ON -DENABLE_UPDATER=ON -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --parallel $(sysctl -n hw.ncpu)
|
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --parallel $(sysctl -n hw.ncpu)
|
||||||
@ -368,7 +368,7 @@ jobs:
|
|||||||
key: ${{ env.cache-name }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
|
key: ${{ env.cache-name }}-${{ hashFiles('**/CMakeLists.txt', 'cmake/**') }}
|
||||||
|
|
||||||
- name: Configure CMake
|
- name: Configure CMake
|
||||||
run: cmake --fresh -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DENABLE_QT_GUI=ON -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
run: cmake --fresh -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -DENABLE_QT_GUI=ON -DENABLE_UPDATER=ON -DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
|
||||||
|
|
||||||
- name: Build
|
- name: Build
|
||||||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --parallel3
|
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} --parallel3
|
||||||
|
@ -31,6 +31,7 @@ endif()
|
|||||||
|
|
||||||
option(ENABLE_QT_GUI "Enable the Qt GUI. If not selected then the emulator uses a minimal SDL-based UI instead" OFF)
|
option(ENABLE_QT_GUI "Enable the Qt GUI. If not selected then the emulator uses a minimal SDL-based UI instead" OFF)
|
||||||
option(ENABLE_DISCORD_RPC "Enable the Discord RPC integration" ON)
|
option(ENABLE_DISCORD_RPC "Enable the Discord RPC integration" ON)
|
||||||
|
option(ENABLE_UPDATER "Enables the options to updater" ON)
|
||||||
|
|
||||||
# First, determine whether to use CMAKE_OSX_ARCHITECTURES or CMAKE_SYSTEM_PROCESSOR.
|
# First, determine whether to use CMAKE_OSX_ARCHITECTURES or CMAKE_SYSTEM_PROCESSOR.
|
||||||
if (APPLE AND CMAKE_OSX_ARCHITECTURES)
|
if (APPLE AND CMAKE_OSX_ARCHITECTURES)
|
||||||
@ -365,6 +366,10 @@ set(VDEC_LIB src/core/libraries/videodec/videodec2_impl.cpp
|
|||||||
src/core/libraries/videodec/videodec2.cpp
|
src/core/libraries/videodec/videodec2.cpp
|
||||||
src/core/libraries/videodec/videodec2.h
|
src/core/libraries/videodec/videodec2.h
|
||||||
src/core/libraries/videodec/videodec2_avc.h
|
src/core/libraries/videodec/videodec2_avc.h
|
||||||
|
src/core/libraries/videodec/videodec.cpp
|
||||||
|
src/core/libraries/videodec/videodec.h
|
||||||
|
src/core/libraries/videodec/videodec_impl.cpp
|
||||||
|
src/core/libraries/videodec/videodec_impl.h
|
||||||
)
|
)
|
||||||
|
|
||||||
set(NP_LIBS src/core/libraries/np_manager/np_manager.cpp
|
set(NP_LIBS src/core/libraries/np_manager/np_manager.cpp
|
||||||
@ -732,6 +737,12 @@ set(EMULATOR src/emulator.cpp
|
|||||||
if(ENABLE_QT_GUI)
|
if(ENABLE_QT_GUI)
|
||||||
qt_add_resources(RESOURCE_FILES src/shadps4.qrc)
|
qt_add_resources(RESOURCE_FILES src/shadps4.qrc)
|
||||||
|
|
||||||
|
if (ENABLE_UPDATER)
|
||||||
|
set(UPDATER src/qt_gui/check_update.cpp
|
||||||
|
src/qt_gui/check_update.h
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
set(QT_GUI src/qt_gui/about_dialog.cpp
|
set(QT_GUI src/qt_gui/about_dialog.cpp
|
||||||
src/qt_gui/about_dialog.h
|
src/qt_gui/about_dialog.h
|
||||||
src/qt_gui/about_dialog.ui
|
src/qt_gui/about_dialog.ui
|
||||||
@ -739,8 +750,6 @@ set(QT_GUI src/qt_gui/about_dialog.cpp
|
|||||||
src/qt_gui/background_music_player.h
|
src/qt_gui/background_music_player.h
|
||||||
src/qt_gui/cheats_patches.cpp
|
src/qt_gui/cheats_patches.cpp
|
||||||
src/qt_gui/cheats_patches.h
|
src/qt_gui/cheats_patches.h
|
||||||
src/qt_gui/check_update.cpp
|
|
||||||
src/qt_gui/check_update.h
|
|
||||||
src/qt_gui/main_window_ui.h
|
src/qt_gui/main_window_ui.h
|
||||||
src/qt_gui/main_window.cpp
|
src/qt_gui/main_window.cpp
|
||||||
src/qt_gui/main_window.h
|
src/qt_gui/main_window.h
|
||||||
@ -771,6 +780,7 @@ set(QT_GUI src/qt_gui/about_dialog.cpp
|
|||||||
${EMULATOR}
|
${EMULATOR}
|
||||||
${RESOURCE_FILES}
|
${RESOURCE_FILES}
|
||||||
${TRANSLATIONS}
|
${TRANSLATIONS}
|
||||||
|
${UPDATER}
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -843,8 +853,11 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_QT_GUI)
|
if (ENABLE_QT_GUI)
|
||||||
target_link_libraries(shadps4 PRIVATE Qt6::Widgets Qt6::Concurrent Qt6::Network Qt6::Multimedia)
|
target_link_libraries(shadps4 PRIVATE Qt6::Widgets Qt6::Concurrent Qt6::Network Qt6::Multimedia)
|
||||||
add_definitions(-DENABLE_QT_GUI)
|
add_definitions(-DENABLE_QT_GUI)
|
||||||
|
if (ENABLE_UPDATER)
|
||||||
|
add_definitions(-DENABLE_UPDATER)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
@ -932,4 +945,5 @@ install(TARGETS shadps4 BUNDLE DESTINATION .)
|
|||||||
if (ENABLE_QT_GUI AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
if (ENABLE_QT_GUI AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
install(FILES ".github/shadps4.desktop" DESTINATION "share/applications")
|
install(FILES ".github/shadps4.desktop" DESTINATION "share/applications")
|
||||||
install(FILES ".github/shadps4.png" DESTINATION "share/icons/hicolor/512x512/apps")
|
install(FILES ".github/shadps4.png" DESTINATION "share/icons/hicolor/512x512/apps")
|
||||||
|
install(FILES "src/images/net.shadps4.shadPS4.svg" DESTINATION "share/icons/hicolor/scalable/apps")
|
||||||
endif()
|
endif()
|
||||||
|
@ -35,6 +35,7 @@ path = [
|
|||||||
"src/images/stop_icon.png",
|
"src/images/stop_icon.png",
|
||||||
"src/images/shadPS4.icns",
|
"src/images/shadPS4.icns",
|
||||||
"src/images/shadps4.ico",
|
"src/images/shadps4.ico",
|
||||||
|
"src/images/net.shadps4.shadPS4.svg",
|
||||||
"src/images/themes_icon.png",
|
"src/images/themes_icon.png",
|
||||||
"src/images/update_icon.png",
|
"src/images/update_icon.png",
|
||||||
"src/shadps4.qrc",
|
"src/shadps4.qrc",
|
||||||
|
@ -120,6 +120,7 @@ bool ParseFilterRule(Filter& instance, Iterator begin, Iterator end) {
|
|||||||
SUB(Lib, SharePlay) \
|
SUB(Lib, SharePlay) \
|
||||||
SUB(Lib, Fiber) \
|
SUB(Lib, Fiber) \
|
||||||
SUB(Lib, Vdec2) \
|
SUB(Lib, Vdec2) \
|
||||||
|
SUB(Lib, Videodec) \
|
||||||
CLS(Frontend) \
|
CLS(Frontend) \
|
||||||
CLS(Render) \
|
CLS(Render) \
|
||||||
SUB(Render, Vulkan) \
|
SUB(Render, Vulkan) \
|
||||||
|
@ -87,6 +87,7 @@ enum class Class : u8 {
|
|||||||
Lib_SharePlay, ///< The LibSceSharePlay implemenation
|
Lib_SharePlay, ///< The LibSceSharePlay implemenation
|
||||||
Lib_Fiber, ///< The LibSceFiber implementation.
|
Lib_Fiber, ///< The LibSceFiber implementation.
|
||||||
Lib_Vdec2, ///< The LibSceVideodec2 implementation.
|
Lib_Vdec2, ///< The LibSceVideodec2 implementation.
|
||||||
|
Lib_Videodec, ///< The LibSceVideodec implementation.
|
||||||
Frontend, ///< Emulator UI
|
Frontend, ///< Emulator UI
|
||||||
Render, ///< Video Core
|
Render, ///< Video Core
|
||||||
Render_Vulkan, ///< Vulkan backend
|
Render_Vulkan, ///< Vulkan backend
|
||||||
|
@ -28,8 +28,6 @@ static constexpr std::array<std::array<s32, 15>, 2> BitrateTable = {{
|
|||||||
|
|
||||||
static constexpr std::array<s32, 2> UnkTable = {0x48, 0x90};
|
static constexpr std::array<s32, 2> UnkTable = {0x48, 0x90};
|
||||||
|
|
||||||
SwrContext* swr_context{};
|
|
||||||
|
|
||||||
static AVSampleFormat AjmToAVSampleFormat(AjmFormatEncoding format) {
|
static AVSampleFormat AjmToAVSampleFormat(AjmFormatEncoding format) {
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case AjmFormatEncoding::S16:
|
case AjmFormatEncoding::S16:
|
||||||
@ -49,26 +47,28 @@ AVFrame* AjmMp3Decoder::ConvertAudioFrame(AVFrame* frame) {
|
|||||||
return frame;
|
return frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto pcm16_frame = av_frame_clone(frame);
|
AVFrame* new_frame = av_frame_alloc();
|
||||||
pcm16_frame->format = format;
|
new_frame->pts = frame->pts;
|
||||||
|
new_frame->pkt_dts = frame->pkt_dts < 0 ? 0 : frame->pkt_dts;
|
||||||
|
new_frame->format = format;
|
||||||
|
new_frame->ch_layout = frame->ch_layout;
|
||||||
|
new_frame->sample_rate = frame->sample_rate;
|
||||||
|
|
||||||
if (swr_context) {
|
|
||||||
swr_free(&swr_context);
|
|
||||||
swr_context = nullptr;
|
|
||||||
}
|
|
||||||
AVChannelLayout in_ch_layout = frame->ch_layout;
|
AVChannelLayout in_ch_layout = frame->ch_layout;
|
||||||
AVChannelLayout out_ch_layout = pcm16_frame->ch_layout;
|
AVChannelLayout out_ch_layout = new_frame->ch_layout;
|
||||||
swr_alloc_set_opts2(&swr_context, &out_ch_layout, AVSampleFormat(pcm16_frame->format),
|
swr_alloc_set_opts2(&m_swr_context, &out_ch_layout, AVSampleFormat(new_frame->format),
|
||||||
frame->sample_rate, &in_ch_layout, AVSampleFormat(frame->format),
|
frame->sample_rate, &in_ch_layout, AVSampleFormat(frame->format),
|
||||||
frame->sample_rate, 0, nullptr);
|
frame->sample_rate, 0, nullptr);
|
||||||
swr_init(swr_context);
|
swr_init(m_swr_context);
|
||||||
const auto res = swr_convert_frame(swr_context, pcm16_frame, frame);
|
const auto res = swr_convert_frame(m_swr_context, new_frame, frame);
|
||||||
if (res < 0) {
|
if (res < 0) {
|
||||||
LOG_ERROR(Lib_AvPlayer, "Could not convert to S16: {}", av_err2str(res));
|
LOG_ERROR(Lib_AvPlayer, "Could not convert to S16: {}", av_err2str(res));
|
||||||
|
av_frame_free(&new_frame);
|
||||||
|
av_frame_free(&frame);
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
av_frame_free(&frame);
|
av_frame_free(&frame);
|
||||||
return pcm16_frame;
|
return new_frame;
|
||||||
}
|
}
|
||||||
|
|
||||||
AjmMp3Decoder::AjmMp3Decoder(AjmFormatEncoding format)
|
AjmMp3Decoder::AjmMp3Decoder(AjmFormatEncoding format)
|
||||||
@ -78,6 +78,7 @@ AjmMp3Decoder::AjmMp3Decoder(AjmFormatEncoding format)
|
|||||||
}
|
}
|
||||||
|
|
||||||
AjmMp3Decoder::~AjmMp3Decoder() {
|
AjmMp3Decoder::~AjmMp3Decoder() {
|
||||||
|
swr_free(&m_swr_context);
|
||||||
avcodec_free_context(&m_codec_context);
|
avcodec_free_context(&m_codec_context);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -108,6 +109,11 @@ std::tuple<u32, u32> AjmMp3Decoder::ProcessData(std::span<u8>& in_buf, SparseOut
|
|||||||
u32 frames_decoded = 0;
|
u32 frames_decoded = 0;
|
||||||
u32 samples_decoded = 0;
|
u32 samples_decoded = 0;
|
||||||
|
|
||||||
|
auto max_samples =
|
||||||
|
max_samples_per_channel.has_value()
|
||||||
|
? max_samples_per_channel.value() * m_codec_context->ch_layout.nb_channels
|
||||||
|
: std::numeric_limits<u32>::max();
|
||||||
|
|
||||||
if (pkt->size) {
|
if (pkt->size) {
|
||||||
// Send the packet with the compressed data to the decoder
|
// Send the packet with the compressed data to the decoder
|
||||||
pkt->pts = m_parser->pts;
|
pkt->pts = m_parser->pts;
|
||||||
@ -121,6 +127,7 @@ std::tuple<u32, u32> AjmMp3Decoder::ProcessData(std::span<u8>& in_buf, SparseOut
|
|||||||
AVFrame* frame = av_frame_alloc();
|
AVFrame* frame = av_frame_alloc();
|
||||||
ret = avcodec_receive_frame(m_codec_context, frame);
|
ret = avcodec_receive_frame(m_codec_context, frame);
|
||||||
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
|
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
|
||||||
|
av_frame_free(&frame);
|
||||||
break;
|
break;
|
||||||
} else if (ret < 0) {
|
} else if (ret < 0) {
|
||||||
UNREACHABLE_MSG("Error during decoding");
|
UNREACHABLE_MSG("Error during decoding");
|
||||||
@ -135,11 +142,6 @@ std::tuple<u32, u32> AjmMp3Decoder::ProcessData(std::span<u8>& in_buf, SparseOut
|
|||||||
gapless.skipped_samples += skipped_samples;
|
gapless.skipped_samples += skipped_samples;
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto max_samples =
|
|
||||||
max_samples_per_channel.has_value()
|
|
||||||
? max_samples_per_channel.value() * frame->ch_layout.nb_channels
|
|
||||||
: std::numeric_limits<u32>::max();
|
|
||||||
|
|
||||||
switch (m_format) {
|
switch (m_format) {
|
||||||
case AjmFormatEncoding::S16:
|
case AjmFormatEncoding::S16:
|
||||||
samples_decoded +=
|
samples_decoded +=
|
||||||
@ -157,6 +159,8 @@ std::tuple<u32, u32> AjmMp3Decoder::ProcessData(std::span<u8>& in_buf, SparseOut
|
|||||||
UNREACHABLE();
|
UNREACHABLE();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
max_samples -= samples_decoded;
|
||||||
|
|
||||||
av_frame_free(&frame);
|
av_frame_free(&frame);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#include <libavcodec/avcodec.h>
|
#include <libavcodec/avcodec.h>
|
||||||
|
struct SwrContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace Libraries::Ajm {
|
namespace Libraries::Ajm {
|
||||||
@ -82,6 +83,7 @@ private:
|
|||||||
const AVCodec* m_codec = nullptr;
|
const AVCodec* m_codec = nullptr;
|
||||||
AVCodecContext* m_codec_context = nullptr;
|
AVCodecContext* m_codec_context = nullptr;
|
||||||
AVCodecParserContext* m_parser = nullptr;
|
AVCodecParserContext* m_parser = nullptr;
|
||||||
|
SwrContext* m_swr_context = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Libraries::Ajm
|
} // namespace Libraries::Ajm
|
||||||
|
@ -591,3 +591,28 @@ constexpr int ORBIS_VIDEODEC2_ERROR_ACCESS_UNIT = 0x811D0301;
|
|||||||
constexpr int ORBIS_VIDEODEC2_ERROR_OVERSIZE_DECODE = 0x811D0302;
|
constexpr int ORBIS_VIDEODEC2_ERROR_OVERSIZE_DECODE = 0x811D0302;
|
||||||
constexpr int ORBIS_VIDEODEC2_ERROR_INVALID_SEQUENCE = 0x811D0303;
|
constexpr int ORBIS_VIDEODEC2_ERROR_INVALID_SEQUENCE = 0x811D0303;
|
||||||
constexpr int ORBIS_VIDEODEC2_ERROR_FATAL_STREAM = 0x811D0304;
|
constexpr int ORBIS_VIDEODEC2_ERROR_FATAL_STREAM = 0x811D0304;
|
||||||
|
|
||||||
|
// Videodec library
|
||||||
|
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_API_FAIL = 0x80C10000;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_CODEC_TYPE = 0x80C10001;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_STRUCT_SIZE = 0x80C10002;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_HANDLE = 0x80C10003;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_CPU_MEMORY_SIZE = 0x80C10004;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_CPU_MEMORY_POINTER = 0x80C10005;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_CPU_GPU_MEMORY_SIZE = 0x80C10006;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_CPU_GPU_MEMORY_POINTER = 0x80C10007;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_SHADER_CONTEXT_POINTER = 0x80C10008;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_AU_SIZE = 0x80C10009;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_AU_POINTER = 0x80C1000A;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_FRAME_BUFFER_SIZE = 0x80C1000B;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_FRAME_BUFFER_POINTER = 0x80C1000C;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_FRAME_BUFFER_ALIGNMENT = 0x80C1000D;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_CONFIG_INFO = 0x80C1000E;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_ARGUMENT_POINTER = 0x80C1000F;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_NEW_SEQUENCE = 0x80C10010;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_DECODE_AU = 0x80C10011;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_MISMATCH_SPEC = 0x80C10012;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_INVALID_SEQUENCE = 0x80C10013;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_FATAL_STREAM = 0x80C10014;
|
||||||
|
constexpr int ORBIS_VIDEODEC_ERROR_FATAL_STATE = 0x80C10015;
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#include "core/libraries/system/systemservice.h"
|
#include "core/libraries/system/systemservice.h"
|
||||||
#include "core/libraries/system/userservice.h"
|
#include "core/libraries/system/userservice.h"
|
||||||
#include "core/libraries/usbd/usbd.h"
|
#include "core/libraries/usbd/usbd.h"
|
||||||
|
#include "core/libraries/videodec/videodec.h"
|
||||||
#include "core/libraries/videodec/videodec2.h"
|
#include "core/libraries/videodec/videodec2.h"
|
||||||
#include "core/libraries/videoout/video_out.h"
|
#include "core/libraries/videoout/video_out.h"
|
||||||
|
|
||||||
@ -87,6 +88,7 @@ void InitHLELibs(Core::Loader::SymbolsResolver* sym) {
|
|||||||
Libraries::GameLiveStreaming::RegisterlibSceGameLiveStreaming(sym);
|
Libraries::GameLiveStreaming::RegisterlibSceGameLiveStreaming(sym);
|
||||||
Libraries::SharePlay::RegisterlibSceSharePlay(sym);
|
Libraries::SharePlay::RegisterlibSceSharePlay(sym);
|
||||||
Libraries::Remoteplay::RegisterlibSceRemoteplay(sym);
|
Libraries::Remoteplay::RegisterlibSceRemoteplay(sym);
|
||||||
|
Libraries::Videodec::RegisterlibSceVideodec(sym);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace Libraries
|
} // namespace Libraries
|
||||||
|
137
src/core/libraries/videodec/videodec.cpp
Normal file
137
src/core/libraries/videodec/videodec.cpp
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#include "videodec.h"
|
||||||
|
|
||||||
|
#include "common/logging/log.h"
|
||||||
|
#include "core/libraries/error_codes.h"
|
||||||
|
#include "core/libraries/libs.h"
|
||||||
|
#include "videodec_impl.h"
|
||||||
|
|
||||||
|
namespace Libraries::Videodec {
|
||||||
|
|
||||||
|
static constexpr u64 kMinimumMemorySize = 32_MB; ///> Fake minimum memory size for querying
|
||||||
|
|
||||||
|
int PS4_SYSV_ABI sceVideodecCreateDecoder(const OrbisVideodecConfigInfo* pCfgInfoIn,
|
||||||
|
const OrbisVideodecResourceInfo* pRsrcInfoIn,
|
||||||
|
OrbisVideodecCtrl* pCtrlOut) {
|
||||||
|
LOG_INFO(Lib_Videodec, "called");
|
||||||
|
|
||||||
|
if (!pCfgInfoIn || !pRsrcInfoIn || !pCtrlOut) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_ARGUMENT_POINTER;
|
||||||
|
}
|
||||||
|
if (pCfgInfoIn->thisSize != sizeof(OrbisVideodecConfigInfo) ||
|
||||||
|
pRsrcInfoIn->thisSize != sizeof(OrbisVideodecResourceInfo)) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_STRUCT_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
VdecDecoder* decoder = new VdecDecoder(*pCfgInfoIn, *pRsrcInfoIn);
|
||||||
|
pCtrlOut->thisSize = sizeof(OrbisVideodecCtrl);
|
||||||
|
pCtrlOut->handle = decoder;
|
||||||
|
pCtrlOut->version = 1; //???
|
||||||
|
return ORBIS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PS4_SYSV_ABI sceVideodecDecode(OrbisVideodecCtrl* pCtrlIn,
|
||||||
|
const OrbisVideodecInputData* pInputDataIn,
|
||||||
|
OrbisVideodecFrameBuffer* pFrameBufferInOut,
|
||||||
|
OrbisVideodecPictureInfo* pPictureInfoOut) {
|
||||||
|
LOG_INFO(Lib_Videodec, "called");
|
||||||
|
if (!pCtrlIn || !pInputDataIn || !pPictureInfoOut) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_ARGUMENT_POINTER;
|
||||||
|
}
|
||||||
|
if (pCtrlIn->thisSize != sizeof(OrbisVideodecCtrl) ||
|
||||||
|
pFrameBufferInOut->thisSize != sizeof(OrbisVideodecFrameBuffer)) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_STRUCT_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
VdecDecoder* decoder = (VdecDecoder*)pCtrlIn->handle;
|
||||||
|
if (!decoder) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_HANDLE;
|
||||||
|
}
|
||||||
|
return decoder->Decode(*pInputDataIn, *pFrameBufferInOut, *pPictureInfoOut);
|
||||||
|
}
|
||||||
|
|
||||||
|
int PS4_SYSV_ABI sceVideodecDeleteDecoder(OrbisVideodecCtrl* pCtrlIn) {
|
||||||
|
LOG_INFO(Lib_Videodec, "(STUBBED) called");
|
||||||
|
|
||||||
|
VdecDecoder* decoder = (VdecDecoder*)pCtrlIn->handle;
|
||||||
|
if (!decoder) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_HANDLE;
|
||||||
|
}
|
||||||
|
delete decoder;
|
||||||
|
return ORBIS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PS4_SYSV_ABI sceVideodecFlush(OrbisVideodecCtrl* pCtrlIn,
|
||||||
|
OrbisVideodecFrameBuffer* pFrameBufferInOut,
|
||||||
|
OrbisVideodecPictureInfo* pPictureInfoOut) {
|
||||||
|
LOG_INFO(Lib_Videodec, "called");
|
||||||
|
|
||||||
|
if (!pFrameBufferInOut || !pPictureInfoOut) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_ARGUMENT_POINTER;
|
||||||
|
}
|
||||||
|
if (pFrameBufferInOut->thisSize != sizeof(OrbisVideodecFrameBuffer) ||
|
||||||
|
pPictureInfoOut->thisSize != sizeof(OrbisVideodecPictureInfo)) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_STRUCT_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
VdecDecoder* decoder = (VdecDecoder*)pCtrlIn->handle;
|
||||||
|
if (!decoder) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_HANDLE;
|
||||||
|
}
|
||||||
|
return decoder->Flush(*pFrameBufferInOut, *pPictureInfoOut);
|
||||||
|
}
|
||||||
|
|
||||||
|
int PS4_SYSV_ABI sceVideodecMapMemory() {
|
||||||
|
LOG_ERROR(Lib_Videodec, "(STUBBED) called");
|
||||||
|
return ORBIS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PS4_SYSV_ABI sceVideodecQueryResourceInfo(const OrbisVideodecConfigInfo* pCfgInfoIn,
|
||||||
|
OrbisVideodecResourceInfo* pRsrcInfoOut) {
|
||||||
|
LOG_INFO(Lib_Videodec, "called");
|
||||||
|
|
||||||
|
if (!pCfgInfoIn || !pRsrcInfoOut) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_ARGUMENT_POINTER;
|
||||||
|
}
|
||||||
|
if (pCfgInfoIn->thisSize != sizeof(OrbisVideodecConfigInfo) ||
|
||||||
|
pRsrcInfoOut->thisSize != sizeof(OrbisVideodecResourceInfo)) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_STRUCT_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
pRsrcInfoOut->thisSize = sizeof(OrbisVideodecResourceInfo);
|
||||||
|
pRsrcInfoOut->pCpuMemory = nullptr;
|
||||||
|
pRsrcInfoOut->pCpuGpuMemory = nullptr;
|
||||||
|
|
||||||
|
pRsrcInfoOut->cpuGpuMemorySize = kMinimumMemorySize;
|
||||||
|
pRsrcInfoOut->cpuMemorySize = kMinimumMemorySize;
|
||||||
|
|
||||||
|
pRsrcInfoOut->maxFrameBufferSize = kMinimumMemorySize;
|
||||||
|
pRsrcInfoOut->frameBufferAlignment = 0x100;
|
||||||
|
|
||||||
|
return ORBIS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
int PS4_SYSV_ABI sceVideodecReset(OrbisVideodecCtrl* pCtrlIn) {
|
||||||
|
LOG_INFO(Lib_Videodec, "(STUBBED) called");
|
||||||
|
|
||||||
|
VdecDecoder* decoder = (VdecDecoder*)pCtrlIn->handle;
|
||||||
|
decoder->Reset();
|
||||||
|
return ORBIS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
void RegisterlibSceVideodec(Core::Loader::SymbolsResolver* sym) {
|
||||||
|
LIB_FUNCTION("qkgRiwHyheU", "libSceVideodec", 1, "libSceVideodec", 1, 1,
|
||||||
|
sceVideodecCreateDecoder);
|
||||||
|
LIB_FUNCTION("q0W5GJMovMs", "libSceVideodec", 1, "libSceVideodec", 1, 1, sceVideodecDecode);
|
||||||
|
LIB_FUNCTION("U0kpGF1cl90", "libSceVideodec", 1, "libSceVideodec", 1, 1,
|
||||||
|
sceVideodecDeleteDecoder);
|
||||||
|
LIB_FUNCTION("jeigLlKdp5I", "libSceVideodec", 1, "libSceVideodec", 1, 1, sceVideodecFlush);
|
||||||
|
LIB_FUNCTION("kg+lH0V61hM", "libSceVideodec", 1, "libSceVideodec", 1, 1, sceVideodecMapMemory);
|
||||||
|
LIB_FUNCTION("leCAscipfFY", "libSceVideodec", 1, "libSceVideodec", 1, 1,
|
||||||
|
sceVideodecQueryResourceInfo);
|
||||||
|
LIB_FUNCTION("f8AgDv-1X8A", "libSceVideodec", 1, "libSceVideodec", 1, 1, sceVideodecReset);
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Libraries::Videodec
|
108
src/core/libraries/videodec/videodec.h
Normal file
108
src/core/libraries/videodec/videodec.h
Normal file
@ -0,0 +1,108 @@
|
|||||||
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "common/types.h"
|
||||||
|
|
||||||
|
namespace Core::Loader {
|
||||||
|
class SymbolsResolver;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace Libraries::Videodec {
|
||||||
|
|
||||||
|
struct OrbisVideodecConfigInfo {
|
||||||
|
u64 thisSize;
|
||||||
|
u32 codecType;
|
||||||
|
u32 profile;
|
||||||
|
u32 maxLevel;
|
||||||
|
s32 maxFrameWidth;
|
||||||
|
s32 maxFrameHeight;
|
||||||
|
s32 maxDpbFrameCount;
|
||||||
|
u64 videodecFlags;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OrbisVideodecResourceInfo {
|
||||||
|
u64 thisSize;
|
||||||
|
u64 cpuMemorySize;
|
||||||
|
void* pCpuMemory;
|
||||||
|
u64 cpuGpuMemorySize;
|
||||||
|
void* pCpuGpuMemory;
|
||||||
|
u64 maxFrameBufferSize;
|
||||||
|
u32 frameBufferAlignment;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OrbisVideodecCtrl {
|
||||||
|
u64 thisSize;
|
||||||
|
void* handle;
|
||||||
|
u64 version;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OrbisVideodecFrameBuffer {
|
||||||
|
u64 thisSize;
|
||||||
|
void* pFrameBuffer;
|
||||||
|
u64 frameBufferSize;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OrbisVideodecAvcInfo {
|
||||||
|
u32 numUnitsInTick;
|
||||||
|
u32 timeScale;
|
||||||
|
u8 fixedFrameRateFlag;
|
||||||
|
u8 aspectRatioIdc;
|
||||||
|
u16 sarWidth;
|
||||||
|
u16 sarHeight;
|
||||||
|
u8 colourPrimaries;
|
||||||
|
u8 transferCharacteristics;
|
||||||
|
u8 matrixCoefficients;
|
||||||
|
u8 videoFullRangeFlag;
|
||||||
|
u32 frameCropLeftOffset;
|
||||||
|
u32 frameCropRightOffset;
|
||||||
|
u32 frameCropTopOffset;
|
||||||
|
u32 frameCropBottomOffset;
|
||||||
|
};
|
||||||
|
|
||||||
|
union OrbisVideodecCodecInfo {
|
||||||
|
u8 reserved[64];
|
||||||
|
OrbisVideodecAvcInfo avc;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OrbisVideodecPictureInfo {
|
||||||
|
u64 thisSize;
|
||||||
|
u32 isValid;
|
||||||
|
u32 codecType;
|
||||||
|
u32 frameWidth;
|
||||||
|
u32 framePitch;
|
||||||
|
u32 frameHeight;
|
||||||
|
u32 isErrorPic;
|
||||||
|
u64 ptsData;
|
||||||
|
u64 attachedData;
|
||||||
|
OrbisVideodecCodecInfo codec;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OrbisVideodecInputData {
|
||||||
|
u64 thisSize;
|
||||||
|
void* pAuData;
|
||||||
|
u64 auSize;
|
||||||
|
u64 ptsData;
|
||||||
|
u64 dtsData;
|
||||||
|
u64 attachedData;
|
||||||
|
};
|
||||||
|
|
||||||
|
int PS4_SYSV_ABI sceVideodecCreateDecoder(const OrbisVideodecConfigInfo* pCfgInfoIn,
|
||||||
|
const OrbisVideodecResourceInfo* pRsrcInfoIn,
|
||||||
|
OrbisVideodecCtrl* pCtrlOut);
|
||||||
|
int PS4_SYSV_ABI sceVideodecDecode(OrbisVideodecCtrl* pCtrlIn,
|
||||||
|
const OrbisVideodecInputData* pInputDataIn,
|
||||||
|
OrbisVideodecFrameBuffer* pFrameBufferInOut,
|
||||||
|
OrbisVideodecPictureInfo* pPictureInfoOut);
|
||||||
|
int PS4_SYSV_ABI sceVideodecDeleteDecoder(OrbisVideodecCtrl* pCtrlIn);
|
||||||
|
int PS4_SYSV_ABI sceVideodecFlush(OrbisVideodecCtrl* pCtrlIn,
|
||||||
|
OrbisVideodecFrameBuffer* pFrameBufferInOut,
|
||||||
|
OrbisVideodecPictureInfo* pPictureInfoOut);
|
||||||
|
int PS4_SYSV_ABI sceVideodecMapMemory();
|
||||||
|
int PS4_SYSV_ABI sceVideodecQueryResourceInfo(const OrbisVideodecConfigInfo* pCfgInfoIn,
|
||||||
|
OrbisVideodecResourceInfo* pRsrcInfoOut);
|
||||||
|
int PS4_SYSV_ABI sceVideodecReset(OrbisVideodecCtrl* pCtrlIn);
|
||||||
|
|
||||||
|
void RegisterlibSceVideodec(Core::Loader::SymbolsResolver* sym);
|
||||||
|
} // namespace Libraries::Videodec
|
222
src/core/libraries/videodec/videodec_impl.cpp
Normal file
222
src/core/libraries/videodec/videodec_impl.cpp
Normal file
@ -0,0 +1,222 @@
|
|||||||
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#include "videodec_impl.h"
|
||||||
|
|
||||||
|
#include "common/alignment.h"
|
||||||
|
#include "common/assert.h"
|
||||||
|
#include "common/logging/log.h"
|
||||||
|
#include "core/libraries/error_codes.h"
|
||||||
|
|
||||||
|
// The av_err2str macro in libavutil/error.h does not play nice with C++
|
||||||
|
#ifdef av_err2str
|
||||||
|
#undef av_err2str
|
||||||
|
#include <string>
|
||||||
|
av_always_inline std::string av_err2string(int errnum) {
|
||||||
|
char errbuf[AV_ERROR_MAX_STRING_SIZE];
|
||||||
|
return av_make_error_string(errbuf, AV_ERROR_MAX_STRING_SIZE, errnum);
|
||||||
|
}
|
||||||
|
#define av_err2str(err) av_err2string(err).c_str()
|
||||||
|
#endif // av_err2str
|
||||||
|
|
||||||
|
namespace Libraries::Videodec {
|
||||||
|
|
||||||
|
static inline void CopyNV12Data(u8* dst, const AVFrame& src) {
|
||||||
|
u32 width = Common::AlignUp((u32)src.width, 16);
|
||||||
|
u32 height = Common::AlignUp((u32)src.height, 16);
|
||||||
|
std::memcpy(dst, src.data[0], src.width * src.height);
|
||||||
|
std::memcpy(dst + src.width * height, src.data[1], (src.width * src.height) / 2);
|
||||||
|
}
|
||||||
|
|
||||||
|
VdecDecoder::VdecDecoder(const OrbisVideodecConfigInfo& pCfgInfoIn,
|
||||||
|
const OrbisVideodecResourceInfo& pRsrcInfoIn) {
|
||||||
|
|
||||||
|
const AVCodec* codec = avcodec_find_decoder(AV_CODEC_ID_H264);
|
||||||
|
ASSERT(codec);
|
||||||
|
|
||||||
|
mCodecContext = avcodec_alloc_context3(codec);
|
||||||
|
ASSERT(mCodecContext);
|
||||||
|
mCodecContext->width = pCfgInfoIn.maxFrameWidth;
|
||||||
|
mCodecContext->height = pCfgInfoIn.maxFrameHeight;
|
||||||
|
|
||||||
|
avcodec_open2(mCodecContext, codec, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
VdecDecoder::~VdecDecoder() {
|
||||||
|
avcodec_free_context(&mCodecContext);
|
||||||
|
sws_freeContext(mSwsContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 VdecDecoder::Decode(const OrbisVideodecInputData& pInputDataIn,
|
||||||
|
OrbisVideodecFrameBuffer& pFrameBufferInOut,
|
||||||
|
OrbisVideodecPictureInfo& pPictureInfoOut) {
|
||||||
|
pPictureInfoOut.thisSize = sizeof(OrbisVideodecPictureInfo);
|
||||||
|
pPictureInfoOut.isValid = false;
|
||||||
|
pPictureInfoOut.isErrorPic = true;
|
||||||
|
|
||||||
|
if (!pInputDataIn.pAuData) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_AU_POINTER;
|
||||||
|
}
|
||||||
|
if (pInputDataIn.auSize == 0) {
|
||||||
|
return ORBIS_VIDEODEC_ERROR_AU_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
AVPacket* packet = av_packet_alloc();
|
||||||
|
if (!packet) {
|
||||||
|
LOG_ERROR(Lib_Videodec, "Failed to allocate packet");
|
||||||
|
return ORBIS_VIDEODEC_ERROR_API_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
packet->data = (u8*)pInputDataIn.pAuData;
|
||||||
|
packet->size = pInputDataIn.auSize;
|
||||||
|
packet->pts = pInputDataIn.ptsData;
|
||||||
|
packet->dts = pInputDataIn.dtsData;
|
||||||
|
|
||||||
|
int ret = avcodec_send_packet(mCodecContext, packet);
|
||||||
|
if (ret < 0) {
|
||||||
|
LOG_ERROR(Lib_Videodec, "Error sending packet to decoder: {}", ret);
|
||||||
|
av_packet_free(&packet);
|
||||||
|
return ORBIS_VIDEODEC_ERROR_API_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
AVFrame* frame = av_frame_alloc();
|
||||||
|
if (frame == nullptr) {
|
||||||
|
LOG_ERROR(Lib_Videodec, "Failed to allocate frame");
|
||||||
|
av_packet_free(&packet);
|
||||||
|
return ORBIS_VIDEODEC_ERROR_API_FAIL;
|
||||||
|
}
|
||||||
|
int frameCount = 0;
|
||||||
|
while (true) {
|
||||||
|
ret = avcodec_receive_frame(mCodecContext, frame);
|
||||||
|
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
|
||||||
|
break;
|
||||||
|
} else if (ret < 0) {
|
||||||
|
LOG_ERROR(Lib_Videodec, "Error receiving frame from decoder: {}", ret);
|
||||||
|
av_packet_free(&packet);
|
||||||
|
av_frame_free(&frame);
|
||||||
|
return ORBIS_VIDEODEC_ERROR_API_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame->format != AV_PIX_FMT_NV12) {
|
||||||
|
AVFrame* nv12_frame = ConvertNV12Frame(*frame);
|
||||||
|
ASSERT(nv12_frame);
|
||||||
|
av_frame_free(&frame);
|
||||||
|
frame = nv12_frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
CopyNV12Data((u8*)pFrameBufferInOut.pFrameBuffer, *frame);
|
||||||
|
|
||||||
|
pPictureInfoOut.codecType = 0;
|
||||||
|
pPictureInfoOut.frameWidth = Common::AlignUp((u32)frame->width, 16);
|
||||||
|
pPictureInfoOut.frameHeight = Common::AlignUp((u32)frame->height, 16);
|
||||||
|
pPictureInfoOut.framePitch = frame->linesize[0];
|
||||||
|
|
||||||
|
pPictureInfoOut.isValid = true;
|
||||||
|
pPictureInfoOut.isErrorPic = false;
|
||||||
|
frameCount++;
|
||||||
|
if (frameCount > 1) {
|
||||||
|
LOG_WARNING(Lib_Videodec, "We have more than 1 frame");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
av_packet_free(&packet);
|
||||||
|
av_frame_free(&frame);
|
||||||
|
return ORBIS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 VdecDecoder::Flush(OrbisVideodecFrameBuffer& pFrameBufferInOut,
|
||||||
|
OrbisVideodecPictureInfo& pPictureInfoOut) {
|
||||||
|
pPictureInfoOut.thisSize = sizeof(pPictureInfoOut);
|
||||||
|
pPictureInfoOut.isValid = false;
|
||||||
|
pPictureInfoOut.isErrorPic = true;
|
||||||
|
|
||||||
|
AVFrame* frame = av_frame_alloc();
|
||||||
|
if (!frame) {
|
||||||
|
LOG_ERROR(Lib_Videodec, "Failed to allocate frame");
|
||||||
|
return ORBIS_VIDEODEC_ERROR_API_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int frameCount = 0;
|
||||||
|
while (true) {
|
||||||
|
int ret = avcodec_receive_frame(mCodecContext, frame);
|
||||||
|
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
|
||||||
|
break;
|
||||||
|
} else if (ret < 0) {
|
||||||
|
LOG_ERROR(Lib_Videodec, "Error receiving frame from decoder: {}", ret);
|
||||||
|
av_frame_free(&frame);
|
||||||
|
return ORBIS_VIDEODEC_ERROR_API_FAIL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (frame->format != AV_PIX_FMT_NV12) {
|
||||||
|
AVFrame* nv12_frame = ConvertNV12Frame(*frame);
|
||||||
|
ASSERT(nv12_frame);
|
||||||
|
av_frame_free(&frame);
|
||||||
|
frame = nv12_frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
CopyNV12Data((u8*)pFrameBufferInOut.pFrameBuffer, *frame);
|
||||||
|
|
||||||
|
pPictureInfoOut.codecType = 0;
|
||||||
|
pPictureInfoOut.frameWidth = Common::AlignUp((u32)frame->width, 16);
|
||||||
|
pPictureInfoOut.frameHeight = Common::AlignUp((u32)frame->height, 16);
|
||||||
|
pPictureInfoOut.framePitch = frame->linesize[0];
|
||||||
|
|
||||||
|
pPictureInfoOut.isValid = true;
|
||||||
|
pPictureInfoOut.isErrorPic = false;
|
||||||
|
|
||||||
|
u32 width = Common::AlignUp((u32)frame->width, 16);
|
||||||
|
u32 height = Common::AlignUp((u32)frame->height, 16);
|
||||||
|
pPictureInfoOut.codec.avc.frameCropLeftOffset = u32(frame->crop_left);
|
||||||
|
pPictureInfoOut.codec.avc.frameCropRightOffset =
|
||||||
|
u32(frame->crop_right + (width - frame->width));
|
||||||
|
pPictureInfoOut.codec.avc.frameCropTopOffset = u32(frame->crop_top);
|
||||||
|
pPictureInfoOut.codec.avc.frameCropBottomOffset =
|
||||||
|
u32(frame->crop_bottom + (height - frame->height));
|
||||||
|
// TODO maybe more avc?
|
||||||
|
|
||||||
|
if (frameCount > 1) {
|
||||||
|
LOG_WARNING(Lib_Videodec, "We have more than 1 frame");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
av_frame_free(&frame);
|
||||||
|
return ORBIS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
s32 VdecDecoder::Reset() {
|
||||||
|
avcodec_flush_buffers(mCodecContext);
|
||||||
|
return ORBIS_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
AVFrame* VdecDecoder::ConvertNV12Frame(AVFrame& frame) {
|
||||||
|
AVFrame* nv12_frame = av_frame_alloc();
|
||||||
|
nv12_frame->pts = frame.pts;
|
||||||
|
nv12_frame->pkt_dts = frame.pkt_dts < 0 ? 0 : frame.pkt_dts;
|
||||||
|
nv12_frame->format = AV_PIX_FMT_NV12;
|
||||||
|
nv12_frame->width = frame.width;
|
||||||
|
nv12_frame->height = frame.height;
|
||||||
|
nv12_frame->sample_aspect_ratio = frame.sample_aspect_ratio;
|
||||||
|
nv12_frame->crop_top = frame.crop_top;
|
||||||
|
nv12_frame->crop_bottom = frame.crop_bottom;
|
||||||
|
nv12_frame->crop_left = frame.crop_left;
|
||||||
|
nv12_frame->crop_right = frame.crop_right;
|
||||||
|
|
||||||
|
av_frame_get_buffer(nv12_frame, 0);
|
||||||
|
|
||||||
|
if (mSwsContext == nullptr) {
|
||||||
|
mSwsContext = sws_getContext(frame.width, frame.height, AVPixelFormat(frame.format),
|
||||||
|
nv12_frame->width, nv12_frame->height, AV_PIX_FMT_NV12,
|
||||||
|
SWS_FAST_BILINEAR, nullptr, nullptr, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
const auto res = sws_scale(mSwsContext, frame.data, frame.linesize, 0, frame.height,
|
||||||
|
nv12_frame->data, nv12_frame->linesize);
|
||||||
|
if (res < 0) {
|
||||||
|
LOG_ERROR(Lib_Videodec, "Could not convert to NV12: {}", av_err2str(res));
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
return nv12_frame;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Libraries::Videodec
|
38
src/core/libraries/videodec/videodec_impl.h
Normal file
38
src/core/libraries/videodec/videodec_impl.h
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include "videodec.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include <libavcodec/avcodec.h>
|
||||||
|
#include <libavutil/imgutils.h>
|
||||||
|
#include <libswscale/swscale.h>
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace Libraries::Videodec {
|
||||||
|
|
||||||
|
class VdecDecoder {
|
||||||
|
public:
|
||||||
|
VdecDecoder(const OrbisVideodecConfigInfo& pCfgInfoIn,
|
||||||
|
const OrbisVideodecResourceInfo& pRsrcInfoIn);
|
||||||
|
~VdecDecoder();
|
||||||
|
s32 Decode(const OrbisVideodecInputData& pInputDataIn,
|
||||||
|
OrbisVideodecFrameBuffer& pFrameBufferInOut,
|
||||||
|
OrbisVideodecPictureInfo& pPictureInfoOut);
|
||||||
|
s32 Flush(OrbisVideodecFrameBuffer& pFrameBufferInOut,
|
||||||
|
OrbisVideodecPictureInfo& pPictureInfoOut);
|
||||||
|
s32 Reset();
|
||||||
|
|
||||||
|
private:
|
||||||
|
AVFrame* ConvertNV12Frame(AVFrame& frame);
|
||||||
|
|
||||||
|
private:
|
||||||
|
AVCodecContext* mCodecContext = nullptr;
|
||||||
|
SwsContext* mSwsContext = nullptr;
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Libraries::Videodec
|
2
src/images/net.shadps4.shadPS4.svg
Normal file
2
src/images/net.shadps4.shadPS4.svg
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<svg version="1.1" viewBox="0 0 200 200" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><linearGradient id="linearGradient1"><stop stop-color="#0b034f" offset="0"/><stop stop-color="#4461f2" offset="1"/></linearGradient><linearGradient id="linearGradient2" x1="100" x2="100" y1="185.84" y2="14.157" gradientUnits="userSpaceOnUse" xlink:href="#linearGradient1"/><mask id="mask9" maskUnits="userSpaceOnUse"><path d="m-4.1597 120.43 65.304 22.774-20.899 59.926-65.304-22.774z" fill="none" stroke="#149ffb" stroke-linecap="square" stroke-width="11" style="paint-order:markers fill stroke"/></mask><mask id="mask10" maskUnits="userSpaceOnUse"><path d="m178.79 52.448-45.404 19.386 5.9135-49.014z" fill="none" stroke="#149ffb" stroke-linecap="square" stroke-width="6.75" style="paint-order:markers fill stroke"/></mask></defs><path d="m48.678 14.157h102.64c19.124 0 34.521 15.396 34.521 34.521v102.64c0 19.124-15.396 34.521-34.521 34.521h-102.64c-19.124 0-34.521-15.396-34.521-34.521v-102.64c0-19.124 15.396-34.521 34.521-34.521z" fill="url(#linearGradient2)" stroke="#fff" stroke-linecap="square" stroke-linejoin="round" stroke-width="5" style="paint-order:markers fill stroke"/><path d="m48.678 14.157h102.64c19.124 0 34.521 15.396 34.521 34.521v102.64c0 19.124-15.396 34.521-34.521 34.521h-102.64c-19.124 0-34.521-15.396-34.521-34.521v-102.64c0-19.124 15.396-34.521 34.521-34.521z" fill="url(#linearGradient2)" stroke="#fff" stroke-linecap="square" stroke-linejoin="round" stroke-width="5" style="paint-order:markers fill stroke"/><path d="m50.17 16.403h99.848c18.603 0 33.58 14.977 33.58 33.58v99.848c0 18.603-14.977 33.58-33.58 33.58h-99.848c-18.603 0-33.58-14.977-33.58-33.58v-99.848c0-18.603 14.977-33.58 33.58-33.58z" fill="#0ff" mask="url(#mask9)" style="paint-order:markers fill stroke"/><path d="m50.076 16.496h99.848c18.603 0 33.58 14.977 33.58 33.58v99.848c0 18.603-14.977 33.58-33.58 33.58h-99.848c-18.603 0-33.58-14.977-33.58-33.58v-99.848c0-18.603 14.977-33.58 33.58-33.58z" fill="#0ff" mask="url(#mask10)" style="paint-order:markers fill stroke"/><g fill="none"><path transform="matrix(.91041 .0063593 -.0063593 .91041 28.548 42.178)" d="m166.13 88.68-23.677 14.288 13.949 23.879-14.288-23.677-23.879 13.949 23.677-14.288-13.949-23.879 14.288 23.677z" stroke="#139ffb" stroke-linecap="square" stroke-width="12.43" style="paint-order:markers fill stroke"/><path d="m117.98 135.88v-88.282l-65.093 69.568h83.807" stroke="#fff" stroke-linecap="square" stroke-linejoin="round" stroke-width="10" style="font-variation-settings:normal;paint-order:markers fill stroke"/><path d="m69.923 56.468a20.994 21.009 0 01-20.911 21.009 20.994 21.009 0 01-21.076-20.843 20.994 21.009 0 0120.744-21.174 20.994 21.009 0 0121.24 20.675" stop-color="#000000" stroke="#139ffb" stroke-linecap="round" stroke-width="9.4488" style="paint-order:markers fill stroke"/></g></svg>
|
After Width: | Height: | Size: 2.9 KiB |
@ -11,6 +11,7 @@
|
|||||||
#include <SDL3/SDL.h>
|
#include <SDL3/SDL.h>
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
#include <TargetConditionals.h>
|
#include <TargetConditionals.h>
|
||||||
|
#include <dispatch/dispatch.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#ifndef WIN32_LEAN_AND_MEAN
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
@ -71,7 +72,14 @@ static void PlatformSetImeData(ImGuiContext*, ImGuiViewport* viewport, ImGuiPlat
|
|||||||
auto window_id = (SDL_WindowID)(intptr_t)viewport->PlatformHandle;
|
auto window_id = (SDL_WindowID)(intptr_t)viewport->PlatformHandle;
|
||||||
SDL_Window* window = SDL_GetWindowFromID(window_id);
|
SDL_Window* window = SDL_GetWindowFromID(window_id);
|
||||||
if ((!data->WantVisible || bd->ime_window != window) && bd->ime_window != nullptr) {
|
if ((!data->WantVisible || bd->ime_window != window) && bd->ime_window != nullptr) {
|
||||||
SDL_StopTextInput(bd->ime_window);
|
auto stop_input = [&bd] { SDL_StopTextInput(bd->ime_window); };
|
||||||
|
#ifdef __APPLE__
|
||||||
|
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||||
|
stop_input();
|
||||||
|
});
|
||||||
|
#else
|
||||||
|
stop_input();
|
||||||
|
#endif
|
||||||
bd->ime_window = nullptr;
|
bd->ime_window = nullptr;
|
||||||
}
|
}
|
||||||
if (data->WantVisible) {
|
if (data->WantVisible) {
|
||||||
@ -80,8 +88,17 @@ static void PlatformSetImeData(ImGuiContext*, ImGuiViewport* viewport, ImGuiPlat
|
|||||||
r.y = (int)data->InputPos.y;
|
r.y = (int)data->InputPos.y;
|
||||||
r.w = 1;
|
r.w = 1;
|
||||||
r.h = (int)data->InputLineHeight;
|
r.h = (int)data->InputLineHeight;
|
||||||
SDL_SetTextInputArea(window, &r, 0);
|
const auto start_input = [&window, &r] {
|
||||||
SDL_StartTextInput(window);
|
SDL_SetTextInputArea(window, &r, 0);
|
||||||
|
SDL_StartTextInput(window);
|
||||||
|
};
|
||||||
|
#ifdef __APPLE__
|
||||||
|
dispatch_sync(dispatch_get_main_queue(), ^{
|
||||||
|
start_input();
|
||||||
|
});
|
||||||
|
#else
|
||||||
|
start_input();
|
||||||
|
#endif
|
||||||
bd->ime_window = window;
|
bd->ime_window = window;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -44,20 +44,31 @@ public:
|
|||||||
|
|
||||||
// Setup menu.
|
// Setup menu.
|
||||||
QMenu menu(widget);
|
QMenu menu(widget);
|
||||||
|
|
||||||
|
// "Open Folder..." submenu
|
||||||
|
QMenu* openFolderMenu = new QMenu(tr("Open Folder..."), widget);
|
||||||
|
QAction* openGameFolder = new QAction(tr("Open Game Folder"), widget);
|
||||||
|
QAction* openSaveDataFolder = new QAction(tr("Open Save Data Folder"), widget);
|
||||||
|
QAction* openLogFolder = new QAction(tr("Open Log Folder"), widget);
|
||||||
|
|
||||||
|
openFolderMenu->addAction(openGameFolder);
|
||||||
|
openFolderMenu->addAction(openSaveDataFolder);
|
||||||
|
openFolderMenu->addAction(openLogFolder);
|
||||||
|
|
||||||
|
menu.addMenu(openFolderMenu);
|
||||||
|
|
||||||
QAction createShortcut(tr("Create Shortcut"), widget);
|
QAction createShortcut(tr("Create Shortcut"), widget);
|
||||||
QAction openFolder(tr("Open Game Folder"), widget);
|
|
||||||
QAction openCheats(tr("Cheats / Patches"), widget);
|
QAction openCheats(tr("Cheats / Patches"), widget);
|
||||||
QAction openSfoViewer(tr("SFO Viewer"), widget);
|
QAction openSfoViewer(tr("SFO Viewer"), widget);
|
||||||
QAction openTrophyViewer(tr("Trophy Viewer"), widget);
|
QAction openTrophyViewer(tr("Trophy Viewer"), widget);
|
||||||
|
|
||||||
menu.addAction(&openFolder);
|
|
||||||
menu.addAction(&createShortcut);
|
menu.addAction(&createShortcut);
|
||||||
menu.addAction(&openCheats);
|
menu.addAction(&openCheats);
|
||||||
menu.addAction(&openSfoViewer);
|
menu.addAction(&openSfoViewer);
|
||||||
menu.addAction(&openTrophyViewer);
|
menu.addAction(&openTrophyViewer);
|
||||||
|
|
||||||
// "Copy" submenu.
|
// "Copy" submenu.
|
||||||
QMenu* copyMenu = new QMenu(tr("Copy info"), widget);
|
QMenu* copyMenu = new QMenu(tr("Copy info..."), widget);
|
||||||
QAction* copyName = new QAction(tr("Copy Name"), widget);
|
QAction* copyName = new QAction(tr("Copy Name"), widget);
|
||||||
QAction* copySerial = new QAction(tr("Copy Serial"), widget);
|
QAction* copySerial = new QAction(tr("Copy Serial"), widget);
|
||||||
QAction* copyNameAll = new QAction(tr("Copy All"), widget);
|
QAction* copyNameAll = new QAction(tr("Copy All"), widget);
|
||||||
@ -86,12 +97,29 @@ public:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (selected == &openFolder) {
|
if (selected == openGameFolder) {
|
||||||
QString folderPath;
|
QString folderPath;
|
||||||
Common::FS::PathToQString(folderPath, m_games[itemID].path);
|
Common::FS::PathToQString(folderPath, m_games[itemID].path);
|
||||||
QDesktopServices::openUrl(QUrl::fromLocalFile(folderPath));
|
QDesktopServices::openUrl(QUrl::fromLocalFile(folderPath));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (selected == openSaveDataFolder) {
|
||||||
|
QString userPath;
|
||||||
|
Common::FS::PathToQString(userPath,
|
||||||
|
Common::FS::GetUserPath(Common::FS::PathType::UserDir));
|
||||||
|
QString saveDataPath =
|
||||||
|
userPath + "/savedata/1/" + QString::fromStdString(m_games[itemID].serial);
|
||||||
|
QDir(saveDataPath).mkpath(saveDataPath);
|
||||||
|
QDesktopServices::openUrl(QUrl::fromLocalFile(saveDataPath));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selected == openLogFolder) {
|
||||||
|
QString userPath;
|
||||||
|
Common::FS::PathToQString(userPath,
|
||||||
|
Common::FS::GetUserPath(Common::FS::PathType::UserDir));
|
||||||
|
QDesktopServices::openUrl(QUrl::fromLocalFile(userPath + "/log"));
|
||||||
|
}
|
||||||
|
|
||||||
if (selected == &openSfoViewer) {
|
if (selected == &openSfoViewer) {
|
||||||
PSF psf;
|
PSF psf;
|
||||||
QString game_update_path;
|
QString game_update_path;
|
||||||
|
@ -7,7 +7,9 @@
|
|||||||
|
|
||||||
#include "about_dialog.h"
|
#include "about_dialog.h"
|
||||||
#include "cheats_patches.h"
|
#include "cheats_patches.h"
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
#include "check_update.h"
|
#include "check_update.h"
|
||||||
|
#endif
|
||||||
#include "common/io_file.h"
|
#include "common/io_file.h"
|
||||||
#include "common/path_util.h"
|
#include "common/path_util.h"
|
||||||
#include "common/scm_rev.h"
|
#include "common/scm_rev.h"
|
||||||
@ -59,8 +61,10 @@ bool MainWindow::Init() {
|
|||||||
this->show();
|
this->show();
|
||||||
// load game list
|
// load game list
|
||||||
LoadGameLists();
|
LoadGameLists();
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
// Check for update
|
// Check for update
|
||||||
CheckUpdateMain(true);
|
CheckUpdateMain(true);
|
||||||
|
#endif
|
||||||
|
|
||||||
auto end = std::chrono::steady_clock::now();
|
auto end = std::chrono::steady_clock::now();
|
||||||
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
|
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(end - start);
|
||||||
@ -183,6 +187,7 @@ void MainWindow::LoadGameLists() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
void MainWindow::CheckUpdateMain(bool checkSave) {
|
void MainWindow::CheckUpdateMain(bool checkSave) {
|
||||||
if (checkSave) {
|
if (checkSave) {
|
||||||
if (!Config::autoUpdate()) {
|
if (!Config::autoUpdate()) {
|
||||||
@ -192,6 +197,7 @@ void MainWindow::CheckUpdateMain(bool checkSave) {
|
|||||||
auto checkUpdate = new CheckUpdate(false);
|
auto checkUpdate = new CheckUpdate(false);
|
||||||
checkUpdate->exec();
|
checkUpdate->exec();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void MainWindow::GetPhysicalDevices() {
|
void MainWindow::GetPhysicalDevices() {
|
||||||
Vulkan::Instance instance(false, false);
|
Vulkan::Instance instance(false, false);
|
||||||
@ -254,10 +260,12 @@ void MainWindow::CreateConnects() {
|
|||||||
settingsDialog->exec();
|
settingsDialog->exec();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
connect(ui->updaterAct, &QAction::triggered, this, [this]() {
|
connect(ui->updaterAct, &QAction::triggered, this, [this]() {
|
||||||
auto checkUpdate = new CheckUpdate(true);
|
auto checkUpdate = new CheckUpdate(true);
|
||||||
checkUpdate->exec();
|
checkUpdate->exec();
|
||||||
});
|
});
|
||||||
|
#endif
|
||||||
|
|
||||||
connect(ui->aboutAct, &QAction::triggered, this, [this]() {
|
connect(ui->aboutAct, &QAction::triggered, this, [this]() {
|
||||||
auto aboutDialog = new AboutDialog(this);
|
auto aboutDialog = new AboutDialog(this);
|
||||||
@ -933,7 +941,9 @@ void MainWindow::SetUiIcons(bool isWhite) {
|
|||||||
ui->bootInstallPkgAct->setIcon(RecolorIcon(ui->bootInstallPkgAct->icon(), isWhite));
|
ui->bootInstallPkgAct->setIcon(RecolorIcon(ui->bootInstallPkgAct->icon(), isWhite));
|
||||||
ui->bootGameAct->setIcon(RecolorIcon(ui->bootGameAct->icon(), isWhite));
|
ui->bootGameAct->setIcon(RecolorIcon(ui->bootGameAct->icon(), isWhite));
|
||||||
ui->exitAct->setIcon(RecolorIcon(ui->exitAct->icon(), isWhite));
|
ui->exitAct->setIcon(RecolorIcon(ui->exitAct->icon(), isWhite));
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
ui->updaterAct->setIcon(RecolorIcon(ui->updaterAct->icon(), isWhite));
|
ui->updaterAct->setIcon(RecolorIcon(ui->updaterAct->icon(), isWhite));
|
||||||
|
#endif
|
||||||
ui->downloadCheatsPatchesAct->setIcon(
|
ui->downloadCheatsPatchesAct->setIcon(
|
||||||
RecolorIcon(ui->downloadCheatsPatchesAct->icon(), isWhite));
|
RecolorIcon(ui->downloadCheatsPatchesAct->icon(), isWhite));
|
||||||
ui->dumpGameListAct->setIcon(RecolorIcon(ui->dumpGameListAct->icon(), isWhite));
|
ui->dumpGameListAct->setIcon(RecolorIcon(ui->dumpGameListAct->icon(), isWhite));
|
||||||
|
@ -56,7 +56,9 @@ private:
|
|||||||
void CreateDockWindows();
|
void CreateDockWindows();
|
||||||
void GetPhysicalDevices();
|
void GetPhysicalDevices();
|
||||||
void LoadGameLists();
|
void LoadGameLists();
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
void CheckUpdateMain(bool checkSave);
|
void CheckUpdateMain(bool checkSave);
|
||||||
|
#endif
|
||||||
void CreateConnects();
|
void CreateConnects();
|
||||||
void SetLastUsedTheme();
|
void SetLastUsedTheme();
|
||||||
void SetLastIconSizeBullet();
|
void SetLastIconSizeBullet();
|
||||||
|
@ -26,7 +26,9 @@ public:
|
|||||||
QAction* downloadCheatsPatchesAct;
|
QAction* downloadCheatsPatchesAct;
|
||||||
QAction* dumpGameListAct;
|
QAction* dumpGameListAct;
|
||||||
QAction* pkgViewerAct;
|
QAction* pkgViewerAct;
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
QAction* updaterAct;
|
QAction* updaterAct;
|
||||||
|
#endif
|
||||||
QAction* aboutAct;
|
QAction* aboutAct;
|
||||||
QAction* configureAct;
|
QAction* configureAct;
|
||||||
QAction* setThemeDark;
|
QAction* setThemeDark;
|
||||||
@ -130,9 +132,11 @@ public:
|
|||||||
pkgViewerAct = new QAction(MainWindow);
|
pkgViewerAct = new QAction(MainWindow);
|
||||||
pkgViewerAct->setObjectName("pkgViewer");
|
pkgViewerAct->setObjectName("pkgViewer");
|
||||||
pkgViewerAct->setIcon(QIcon(":images/file_icon.png"));
|
pkgViewerAct->setIcon(QIcon(":images/file_icon.png"));
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
updaterAct = new QAction(MainWindow);
|
updaterAct = new QAction(MainWindow);
|
||||||
updaterAct->setObjectName("updaterAct");
|
updaterAct->setObjectName("updaterAct");
|
||||||
updaterAct->setIcon(QIcon(":images/update_icon.png"));
|
updaterAct->setIcon(QIcon(":images/update_icon.png"));
|
||||||
|
#endif
|
||||||
aboutAct = new QAction(MainWindow);
|
aboutAct = new QAction(MainWindow);
|
||||||
aboutAct->setObjectName("aboutAct");
|
aboutAct->setObjectName("aboutAct");
|
||||||
aboutAct->setIcon(QIcon(":images/about_icon.png"));
|
aboutAct->setIcon(QIcon(":images/about_icon.png"));
|
||||||
@ -291,7 +295,9 @@ public:
|
|||||||
menuUtils->addAction(downloadCheatsPatchesAct);
|
menuUtils->addAction(downloadCheatsPatchesAct);
|
||||||
menuUtils->addAction(dumpGameListAct);
|
menuUtils->addAction(dumpGameListAct);
|
||||||
menuUtils->addAction(pkgViewerAct);
|
menuUtils->addAction(pkgViewerAct);
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
menuHelp->addAction(updaterAct);
|
menuHelp->addAction(updaterAct);
|
||||||
|
#endif
|
||||||
menuHelp->addAction(aboutAct);
|
menuHelp->addAction(aboutAct);
|
||||||
|
|
||||||
retranslateUi(MainWindow);
|
retranslateUi(MainWindow);
|
||||||
@ -306,8 +312,10 @@ public:
|
|||||||
bootInstallPkgAct->setText(
|
bootInstallPkgAct->setText(
|
||||||
QCoreApplication::translate("MainWindow", "Install Packages (PKG)", nullptr));
|
QCoreApplication::translate("MainWindow", "Install Packages (PKG)", nullptr));
|
||||||
bootGameAct->setText(QCoreApplication::translate("MainWindow", "Boot Game", nullptr));
|
bootGameAct->setText(QCoreApplication::translate("MainWindow", "Boot Game", nullptr));
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
updaterAct->setText(
|
updaterAct->setText(
|
||||||
QCoreApplication::translate("MainWindow", "Check for Updates", nullptr));
|
QCoreApplication::translate("MainWindow", "Check for Updates", nullptr));
|
||||||
|
#endif
|
||||||
aboutAct->setText(QCoreApplication::translate("MainWindow", "About shadPS4", nullptr));
|
aboutAct->setText(QCoreApplication::translate("MainWindow", "About shadPS4", nullptr));
|
||||||
configureAct->setText(QCoreApplication::translate("MainWindow", "Configure...", nullptr));
|
configureAct->setText(QCoreApplication::translate("MainWindow", "Configure...", nullptr));
|
||||||
#if QT_CONFIG(tooltip)
|
#if QT_CONFIG(tooltip)
|
||||||
|
@ -6,7 +6,9 @@
|
|||||||
#include <QHoverEvent>
|
#include <QHoverEvent>
|
||||||
|
|
||||||
#include <common/version.h>
|
#include <common/version.h>
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
#include "check_update.h"
|
#include "check_update.h"
|
||||||
|
#endif
|
||||||
#include "common/logging/backend.h"
|
#include "common/logging/backend.h"
|
||||||
#include "common/logging/filter.h"
|
#include "common/logging/filter.h"
|
||||||
#include "main_window.h"
|
#include "main_window.h"
|
||||||
@ -143,6 +145,7 @@ SettingsDialog::SettingsDialog(std::span<const QString> physical_devices, QWidge
|
|||||||
connect(ui->logFilterLineEdit, &QLineEdit::textChanged, this,
|
connect(ui->logFilterLineEdit, &QLineEdit::textChanged, this,
|
||||||
[](const QString& text) { Config::setLogFilter(text.toStdString()); });
|
[](const QString& text) { Config::setLogFilter(text.toStdString()); });
|
||||||
|
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
connect(ui->updateCheckBox, &QCheckBox::stateChanged, this,
|
connect(ui->updateCheckBox, &QCheckBox::stateChanged, this,
|
||||||
[](int state) { Config::setAutoUpdate(state == Qt::Checked); });
|
[](int state) { Config::setAutoUpdate(state == Qt::Checked); });
|
||||||
|
|
||||||
@ -153,6 +156,10 @@ SettingsDialog::SettingsDialog(std::span<const QString> physical_devices, QWidge
|
|||||||
auto checkUpdate = new CheckUpdate(true);
|
auto checkUpdate = new CheckUpdate(true);
|
||||||
checkUpdate->exec();
|
checkUpdate->exec();
|
||||||
});
|
});
|
||||||
|
#else
|
||||||
|
ui->updaterGroupBox->setVisible(false);
|
||||||
|
ui->GUIgroupBox->setMaximumSize(265, 16777215);
|
||||||
|
#endif
|
||||||
|
|
||||||
connect(ui->playBGMCheckBox, &QCheckBox::stateChanged, this, [](int val) {
|
connect(ui->playBGMCheckBox, &QCheckBox::stateChanged, this, [](int val) {
|
||||||
Config::setPlayBGM(val);
|
Config::setPlayBGM(val);
|
||||||
@ -278,7 +285,9 @@ SettingsDialog::SettingsDialog(std::span<const QString> physical_devices, QWidge
|
|||||||
ui->userName->installEventFilter(this);
|
ui->userName->installEventFilter(this);
|
||||||
ui->logTypeGroupBox->installEventFilter(this);
|
ui->logTypeGroupBox->installEventFilter(this);
|
||||||
ui->logFilter->installEventFilter(this);
|
ui->logFilter->installEventFilter(this);
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
ui->updaterGroupBox->installEventFilter(this);
|
ui->updaterGroupBox->installEventFilter(this);
|
||||||
|
#endif
|
||||||
ui->GUIgroupBox->installEventFilter(this);
|
ui->GUIgroupBox->installEventFilter(this);
|
||||||
|
|
||||||
// Input
|
// Input
|
||||||
@ -340,6 +349,7 @@ void SettingsDialog::LoadValuesFromConfig() {
|
|||||||
ui->vkSyncValidationCheckBox->setChecked(Config::vkValidationSyncEnabled());
|
ui->vkSyncValidationCheckBox->setChecked(Config::vkValidationSyncEnabled());
|
||||||
ui->rdocCheckBox->setChecked(Config::isRdocEnabled());
|
ui->rdocCheckBox->setChecked(Config::isRdocEnabled());
|
||||||
|
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
ui->updateCheckBox->setChecked(Config::autoUpdate());
|
ui->updateCheckBox->setChecked(Config::autoUpdate());
|
||||||
std::string updateChannel = Config::getUpdateChannel();
|
std::string updateChannel = Config::getUpdateChannel();
|
||||||
if (updateChannel != "Release" && updateChannel != "Nightly") {
|
if (updateChannel != "Release" && updateChannel != "Nightly") {
|
||||||
@ -350,6 +360,7 @@ void SettingsDialog::LoadValuesFromConfig() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
ui->updateComboBox->setCurrentText(QString::fromStdString(updateChannel));
|
ui->updateComboBox->setCurrentText(QString::fromStdString(updateChannel));
|
||||||
|
#endif
|
||||||
|
|
||||||
for (const auto& dir : Config::getGameInstallDirs()) {
|
for (const auto& dir : Config::getGameInstallDirs()) {
|
||||||
QString path_string;
|
QString path_string;
|
||||||
@ -451,8 +462,10 @@ void SettingsDialog::updateNoteTextEdit(const QString& elementName) {
|
|||||||
text = tr("logTypeGroupBox");
|
text = tr("logTypeGroupBox");
|
||||||
} else if (elementName == "logFilter") {
|
} else if (elementName == "logFilter") {
|
||||||
text = tr("logFilter");
|
text = tr("logFilter");
|
||||||
|
#ifdef ENABLE_UPDATER
|
||||||
} else if (elementName == "updaterGroupBox") {
|
} else if (elementName == "updaterGroupBox") {
|
||||||
text = tr("updaterGroupBox");
|
text = tr("updaterGroupBox");
|
||||||
|
#endif
|
||||||
} else if (elementName == "GUIgroupBox") {
|
} else if (elementName == "GUIgroupBox") {
|
||||||
text = tr("GUIgroupBox");
|
text = tr("GUIgroupBox");
|
||||||
}
|
}
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>إنشاء اختصار</translation>
|
<translation>إنشاء اختصار</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>فتح مجلد اللعبة</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>عارض الجوائز</translation>
|
<translation>عارض الجوائز</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>فتح المجلد...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>فتح مجلد اللعبة</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>فتح مجلد بيانات الحفظ</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>فتح مجلد السجل</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>نسخ المعلومات</translation>
|
<translation>...نسخ المعلومات</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Create Shortcut</translation>
|
<translation>Create Shortcut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Open Game Folder</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Åbn Mappe...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Åbn Spilmappe</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Åbn Gem Data Mappe</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Åbn Log Mappe</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copy info</translation>
|
<translation>Copy info...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Verknüpfung erstellen</translation>
|
<translation>Verknüpfung erstellen</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Spieleordner öffnen</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophäen anzeigen</translation>
|
<translation>Trophäen anzeigen</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Ordner öffnen...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Spielordner öffnen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Speicherordner öffnen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Protokollordner öffnen</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Infos kopieren</translation>
|
<translation>Infos kopieren...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Create Shortcut</translation>
|
<translation>Create Shortcut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Open Game Folder</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Άνοιγμα Φακέλου...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Άνοιγμα Φακέλου Παιχνιδιού</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Άνοιγμα Φακέλου Αποθηκευμένων Δεδομένων</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Άνοιγμα Φακέλου Καταγραφής</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copy info</translation>
|
<translation>Copy info...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Create Shortcut</translation>
|
<translation>Create Shortcut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Open Game Folder</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Open Folder...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Open Game Folder</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Open Save Data Folder</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Open Log Folder</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copy info</translation>
|
<translation>Copy info...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Crear acceso directo</translation>
|
<translation>Crear acceso directo</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Abrir carpeta del juego</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Ver trofeos</translation>
|
<translation>Ver trofeos</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Abrir Carpeta...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Abrir Carpeta del Juego</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Abrir Carpeta de Datos Guardados</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Abrir Carpeta de Registros</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copiar información</translation>
|
<translation>Copiar información...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>ساخت شورتکات</translation>
|
<translation>ساخت شورتکات</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="40"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>بازکردن محل نصب بازی</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>مشاهده تروفی ها</translation>
|
<translation>مشاهده تروفی ها</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>باز کردن پوشه...</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="50"/>
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
<source>Copy info</source>
|
<source>Open Game Folder</source>
|
||||||
<translation>کپی کردن اطلاعات</translation>
|
<translation>باز کردن پوشه بازی</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>پوشه ذخیره داده را باز کنید</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>باز کردن پوشه لاگ</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Copy info...</source>
|
||||||
|
<translation>...کپی کردن اطلاعات</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="51"/>
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Create Shortcut</translation>
|
<translation>Create Shortcut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Open Game Folder</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Avaa Kansio...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Avaa Pelikansio</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Avaa Tallennustiedostokansio</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Avaa Lokikansio</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copy info</translation>
|
<translation>Copy info...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Créer un raccourci</translation>
|
<translation>Créer un raccourci</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Ouvrir le dossier du jeu</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Visionneuse de trophées</translation>
|
<translation>Visionneuse de trophées</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Ouvrir le Dossier...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Ouvrir le Dossier du Jeu</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Ouvrir le Dossier des Données de Sauvegarde</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Ouvrir le Dossier des Logs</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copier infos</translation>
|
<translation>Copier infos...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -62,7 +62,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../install_dir_select.cpp" line="37"/>
|
<location filename="../install_dir_select.cpp" line="37"/>
|
||||||
<source>Select which directory you want to install to.</source>
|
<source>Select which directory you want to install to.</source>
|
||||||
<translation>Select which directory you want to install to.</translation>
|
<translation>Válassza ki a mappát a játékok telepítésére.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -90,7 +90,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../game_install_dialog.cpp" line="75"/>
|
<location filename="../game_install_dialog.cpp" line="75"/>
|
||||||
<source>The value for location to install games is not valid.</source>
|
<source>The value for location to install games is not valid.</source>
|
||||||
<translation>A játékok telepítéséhez megadott érték nem érvényes.</translation>
|
<translation>A játékok telepítéséhez megadott útvonal nem érvényes.</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Parancsikon Létrehozása</translation>
|
<translation>Parancsikon Létrehozása</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="40"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Játék Mappa Megnyitása</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -113,17 +108,37 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="41"/>
|
<location filename="../gui_context_menus.h" line="41"/>
|
||||||
<source>SFO Viewer</source>
|
<source>SFO Viewer</source>
|
||||||
<translation>SFO Néző</translation>
|
<translation>SFO Nézegető</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="42"/>
|
<location filename="../gui_context_menus.h" line="42"/>
|
||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trófeák Megtekintése</translation>
|
<translation>Trófeák Megtekintése</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Mappa megnyitása...</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="50"/>
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
<source>Copy info</source>
|
<source>Open Game Folder</source>
|
||||||
<translation>Információ Másolása</translation>
|
<translation>Játék Mappa Megnyitása</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Mentési adatok mappa megnyitása</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Napló mappa megnyitása</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Copy info...</source>
|
||||||
|
<translation>Információ Másolása...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="51"/>
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
@ -143,22 +158,22 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="72"/>
|
<location filename="../gui_context_menus.h" line="72"/>
|
||||||
<source>Delete...</source>
|
<source>Delete...</source>
|
||||||
<translation>Delete...</translation>
|
<translation>Törlés...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="73"/>
|
<location filename="../gui_context_menus.h" line="73"/>
|
||||||
<source>Delete Game</source>
|
<source>Delete Game</source>
|
||||||
<translation>Delete Game</translation>
|
<translation>Játék törlése</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="74"/>
|
<location filename="../gui_context_menus.h" line="74"/>
|
||||||
<source>Delete Update</source>
|
<source>Delete Update</source>
|
||||||
<translation>Delete Update</translation>
|
<translation>Frissítések törlése</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="75"/>
|
<location filename="../gui_context_menus.h" line="75"/>
|
||||||
<source>Delete DLC</source>
|
<source>Delete DLC</source>
|
||||||
<translation>Delete DLC</translation>
|
<translation>DLC-k törlése</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="173"/>
|
<location filename="../gui_context_menus.h" line="173"/>
|
||||||
@ -188,27 +203,27 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="299"/>
|
<location filename="../gui_context_menus.h" line="299"/>
|
||||||
<source>Game</source>
|
<source>Game</source>
|
||||||
<translation>Game</translation>
|
<translation>Játék</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="305"/>
|
<location filename="../gui_context_menus.h" line="305"/>
|
||||||
<source>requiresEnableSeparateUpdateFolder_MSG</source>
|
<source>requiresEnableSeparateUpdateFolder_MSG</source>
|
||||||
<translation>This feature requires the 'Enable Separate Update Folder' config option to work. If you want to use this feature, please enable it.</translation>
|
<translation>Ehhez a funkcióhoz szükséges a 'Külön Frissítési Mappa Engedélyezése' opció, hogy működjön. Ha használni akarja, először engedélyezze azt.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="312"/>
|
<location filename="../gui_context_menus.h" line="312"/>
|
||||||
<source>This game has no update to delete!</source>
|
<source>This game has no update to delete!</source>
|
||||||
<translation>This game has no update to delete!</translation>
|
<translation>Ehhez a játékhoz nem tartozik törlendő frissítés!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="316"/>
|
<location filename="../gui_context_menus.h" line="316"/>
|
||||||
<source>Update</source>
|
<source>Update</source>
|
||||||
<translation>Update</translation>
|
<translation>Frissítés</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="321"/>
|
<location filename="../gui_context_menus.h" line="321"/>
|
||||||
<source>This game has no DLC to delete!</source>
|
<source>This game has no DLC to delete!</source>
|
||||||
<translation>This game has no DLC to delete!</translation>
|
<translation>Ehhez a játékhoz nem tartozik törlendő DLC!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="325"/>
|
<location filename="../gui_context_menus.h" line="325"/>
|
||||||
@ -223,7 +238,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="333"/>
|
<location filename="../gui_context_menus.h" line="333"/>
|
||||||
<source>Are you sure you want to delete %1's %2 directory?</source>
|
<source>Are you sure you want to delete %1's %2 directory?</source>
|
||||||
<translation>Are you sure you want to delete %1's %2 directory?</translation>
|
<translation>Biztosan törölni akarja a %1's %2 mappát?</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@ -231,7 +246,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="310"/>
|
<location filename="../main_window_ui.h" line="310"/>
|
||||||
<source>Open/Add Elf Folder</source>
|
<source>Open/Add Elf Folder</source>
|
||||||
<translation>Efl Mappa Megnyitása/Hozzáadása</translation>
|
<translation>ELF Mappa Megnyitása/Hozzáadása</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="312"/>
|
<location filename="../main_window_ui.h" line="312"/>
|
||||||
@ -241,7 +256,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="313"/>
|
<location filename="../main_window_ui.h" line="313"/>
|
||||||
<source>Boot Game</source>
|
<source>Boot Game</source>
|
||||||
<translation>Játék Bootolása</translation>
|
<translation>Játék Indítása</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="308"/>
|
<location filename="../main_window_ui.h" line="308"/>
|
||||||
@ -276,12 +291,12 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="323"/>
|
<location filename="../main_window_ui.h" line="323"/>
|
||||||
<source>Exit shadPS4</source>
|
<source>Exit shadPS4</source>
|
||||||
<translation>Kilépés a shadPS4</translation>
|
<translation>Kilépés a shadPS4-ből</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="327"/>
|
<location filename="../main_window_ui.h" line="327"/>
|
||||||
<source>Exit the application.</source>
|
<source>Exit the application.</source>
|
||||||
<translation>Lépjen ki az programból.</translation>
|
<translation>Lépjen ki a programból.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="330"/>
|
<location filename="../main_window_ui.h" line="330"/>
|
||||||
@ -326,7 +341,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="341"/>
|
<location filename="../main_window_ui.h" line="341"/>
|
||||||
<source>Elf Viewer</source>
|
<source>Elf Viewer</source>
|
||||||
<translation>Elf Néző</translation>
|
<translation>Elf Nézegető</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="343"/>
|
<location filename="../main_window_ui.h" line="343"/>
|
||||||
@ -341,12 +356,12 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="345"/>
|
<location filename="../main_window_ui.h" line="345"/>
|
||||||
<source>Dump Game List</source>
|
<source>Dump Game List</source>
|
||||||
<translation>Játék Lista Dumpolása</translation>
|
<translation>Játéklista Dumpolása</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="346"/>
|
<location filename="../main_window_ui.h" line="346"/>
|
||||||
<source>PKG Viewer</source>
|
<source>PKG Viewer</source>
|
||||||
<translation>PKG Néző</translation>
|
<translation>PKG Nézegető</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="348"/>
|
<location filename="../main_window_ui.h" line="348"/>
|
||||||
@ -361,17 +376,17 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="350"/>
|
<location filename="../main_window_ui.h" line="350"/>
|
||||||
<source>View</source>
|
<source>View</source>
|
||||||
<translation>Megnézés</translation>
|
<translation>Nézet</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="352"/>
|
<location filename="../main_window_ui.h" line="352"/>
|
||||||
<source>Game List Icons</source>
|
<source>Game List Icons</source>
|
||||||
<translation>Játék Könyvtár Ikonok</translation>
|
<translation>Játékkönyvtár Ikonok</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="354"/>
|
<location filename="../main_window_ui.h" line="354"/>
|
||||||
<source>Game List Mode</source>
|
<source>Game List Mode</source>
|
||||||
<translation>Játék Könyvtár Mód</translation>
|
<translation>Játékkönyvtár Nézet</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window_ui.h" line="355"/>
|
<location filename="../main_window_ui.h" line="355"/>
|
||||||
@ -475,12 +490,12 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="122"/>
|
<location filename="../settings_dialog.ui" line="122"/>
|
||||||
<source>Enable Fullscreen</source>
|
<source>Enable Fullscreen</source>
|
||||||
<translation>Teljesképernyő Engedélyezése</translation>
|
<translation>Teljes Képernyő Engedélyezése</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="140"/>
|
<location filename="../settings_dialog.ui" line="140"/>
|
||||||
<source>Enable Separate Update Folder</source>
|
<source>Enable Separate Update Folder</source>
|
||||||
<translation>Enable Separate Update Folder</translation>
|
<translation>Külön Frissítési Mappa Engedélyezése</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="129"/>
|
<location filename="../settings_dialog.ui" line="129"/>
|
||||||
@ -490,12 +505,12 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="136"/>
|
<location filename="../settings_dialog.ui" line="136"/>
|
||||||
<source>Is PS4 Pro</source>
|
<source>Is PS4 Pro</source>
|
||||||
<translation>PS4 Pro</translation>
|
<translation>PS4 Pro mód</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="154"/>
|
<location filename="../settings_dialog.ui" line="154"/>
|
||||||
<source>Enable Discord Rich Presence</source>
|
<source>Enable Discord Rich Presence</source>
|
||||||
<translation>Engedélyezze a Discord Rich Presence-t</translation>
|
<translation>A Discord Rich Presence engedélyezése</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="155"/>
|
<location filename="../settings_dialog.ui" line="155"/>
|
||||||
@ -545,7 +560,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="797"/>
|
<location filename="../settings_dialog.ui" line="797"/>
|
||||||
<source>Back Button Behavior</source>
|
<source>Back Button Behavior</source>
|
||||||
<translation>Vissza gomb viselkedése</translation>
|
<translation>Vissza gomb Viselkedése</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.ui" line="272"/>
|
<location filename="../settings_dialog.ui" line="272"/>
|
||||||
@ -678,17 +693,17 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="168"/>
|
<location filename="../main_window.cpp" line="168"/>
|
||||||
<source> * Unsupported Vulkan Version</source>
|
<source> * Unsupported Vulkan Version</source>
|
||||||
<translation> * Támogatott Vulkan verzió hiányzik</translation>
|
<translation> * Nem támogatott Vulkan verzió</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="326"/>
|
<location filename="../main_window.cpp" line="326"/>
|
||||||
<source>Download Cheats For All Installed Games</source>
|
<source>Download Cheats For All Installed Games</source>
|
||||||
<translation>Letöltés csalások minden telepített játékhoz</translation>
|
<translation>Csalások letöltése minden telepített játékhoz</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="328"/>
|
<location filename="../main_window.cpp" line="328"/>
|
||||||
<source>Download Patches For All Games</source>
|
<source>Download Patches For All Games</source>
|
||||||
<translation>Frissítések letöltése minden játékhoz</translation>
|
<translation>Javítások letöltése minden játékhoz</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="363"/>
|
<location filename="../main_window.cpp" line="363"/>
|
||||||
@ -698,17 +713,17 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="364"/>
|
<location filename="../main_window.cpp" line="364"/>
|
||||||
<source>You have downloaded cheats for all the games you have installed.</source>
|
<source>You have downloaded cheats for all the games you have installed.</source>
|
||||||
<translation>Csalásokat töltöttél le az összes telepített játékhoz.</translation>
|
<translation>Minden elérhető csalás letöltődött az összes telepített játékhoz.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="391"/>
|
<location filename="../main_window.cpp" line="391"/>
|
||||||
<source>Patches Downloaded Successfully!</source>
|
<source>Patches Downloaded Successfully!</source>
|
||||||
<translation>Frissítések sikeresen letöltve!</translation>
|
<translation>Javítások sikeresen letöltve!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="392"/>
|
<location filename="../main_window.cpp" line="392"/>
|
||||||
<source>All Patches available for all games have been downloaded.</source>
|
<source>All Patches available for all games have been downloaded.</source>
|
||||||
<translation>Az összes játékhoz elérhető frissítés letöltésre került.</translation>
|
<translation>Az összes játékhoz elérhető javítás letöltésre került.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="549"/>
|
<location filename="../main_window.cpp" line="549"/>
|
||||||
@ -758,7 +773,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="639"/>
|
<location filename="../main_window.cpp" line="639"/>
|
||||||
<source>PKG Version %1 is older than installed version: </source>
|
<source>PKG Version %1 is older than installed version: </source>
|
||||||
<translation>A %1-es PKG verzió régebbi, mint a telepített verzió: </translation>
|
<translation>A(z) %1-es PKG verzió régebbi, mint a telepített verzió: </translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="660"/>
|
<location filename="../main_window.cpp" line="660"/>
|
||||||
@ -778,7 +793,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="674"/>
|
<location filename="../main_window.cpp" line="674"/>
|
||||||
<source>Would you like to install DLC: %1?</source>
|
<source>Would you like to install DLC: %1?</source>
|
||||||
<translation>Szeretné telepíteni a DLC-t: %1?</translation>
|
<translation>Szeretné telepíteni a %1 DLC-t?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../main_window.cpp" line="688"/>
|
<location filename="../main_window.cpp" line="688"/>
|
||||||
@ -831,7 +846,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="50"/>
|
<location filename="../cheats_patches.cpp" line="50"/>
|
||||||
<source>defaultTextEdit_MSG</source>
|
<source>defaultTextEdit_MSG</source>
|
||||||
<translation>A csalások/patchek kísérleti jellegűek.\nHasználja őket óvatosan.\n\nTöltse le a csalásokat egyesével a repository kiválasztásával és a letöltés gombra kattintással.\nA Patches fül alatt egyszerre letöltheti az összes patchet, választhat, melyeket szeretné használni, és elmentheti a választását.\n\nMivel nem fejlesztjük a csalásokat/patch-eket,\nkérjük, jelentse a problémákat a csalás szerzőjének.\n\nKészített egy új csalást? Látogasson el ide:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
|
<translation>A csalások/javítások kísérleti jellegűek.\nHasználja őket óvatosan.\n\nTöltse le a csalásokat egyesével a tároló kiválasztásával és a letöltés gombra kattintással.\nA Javítások fül alatt egyszerre letöltheti az összes javítást, majd választhat, melyeket szeretné használni, és elmentheti a választását.\n\nMivel nem mi fejlesztjük a csalásokat/patch-eket,\nkérjük, jelentse a problémákat a csalás szerzőjének.\n\nKészített egy új csalást? Látogasson el ide:\nhttps://github.com/shadps4-emu/ps4_cheats</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="69"/>
|
<location filename="../cheats_patches.cpp" line="69"/>
|
||||||
@ -996,7 +1011,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="556"/>
|
<location filename="../cheats_patches.cpp" line="556"/>
|
||||||
<source>CheatsNotFound_MSG</source>
|
<source>CheatsNotFound_MSG</source>
|
||||||
<translation>Nincs található csalás ezen a játékverzión ebben a kiválasztott tárolóban,próbálj meg egy másik tárolót vagy a játék egy másik verzióját.</translation>
|
<translation>Nincs található csalás ezen a játékverzión ebben a kiválasztott tárolóban, próbálj meg egy másik tárolót vagy a játék egy másik verzióját.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="593"/>
|
<location filename="../cheats_patches.cpp" line="593"/>
|
||||||
@ -1026,7 +1041,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="763"/>
|
<location filename="../cheats_patches.cpp" line="763"/>
|
||||||
<source>DownloadComplete_MSG</source>
|
<source>DownloadComplete_MSG</source>
|
||||||
<translation>Frissítések sikeresen letöltve! Minden elérhető frissítés letöltésre került, nem szükséges egyesével letölteni őket minden játékhoz, mint a csalások esetében. Ha a javítás nem jelenik meg, lehet, hogy nem létezik a játék adott sorozatszámához és verziójához.</translation>
|
<translation>Frissítések sikeresen letöltve! Minden elérhető frissítés letöltésre került, nem szükséges egyesével letölteni őket minden játékhoz, mint a csalások esetében. Ha a javítások nem jelennek meg, lehet, hogy nem léteznek a játék adott sorozatszámához és verziójához.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="773"/>
|
<location filename="../cheats_patches.cpp" line="773"/>
|
||||||
@ -1046,7 +1061,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="851"/>
|
<location filename="../cheats_patches.cpp" line="851"/>
|
||||||
<source>The downloaded patch only works on version: %1</source>
|
<source>The downloaded patch only works on version: %1</source>
|
||||||
<translation>A letöltött javítás csak a(z) %1 verzión működik</translation>
|
<translation>A letöltött javításhoz a(z) %1 verzió működik</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="856"/>
|
<location filename="../cheats_patches.cpp" line="856"/>
|
||||||
@ -1081,7 +1096,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="997"/>
|
<location filename="../cheats_patches.cpp" line="997"/>
|
||||||
<source>Directory does not exist:</source>
|
<source>Directory does not exist:</source>
|
||||||
<translation>A könyvtár nem létezik:</translation>
|
<translation>A mappa nem létezik:</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../cheats_patches.cpp" line="1006"/>
|
<location filename="../cheats_patches.cpp" line="1006"/>
|
||||||
@ -1144,22 +1159,22 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="293"/>
|
<location filename="../settings_dialog.cpp" line="293"/>
|
||||||
<source>separateUpdatesCheckBox</source>
|
<source>separateUpdatesCheckBox</source>
|
||||||
<translation>Enable Separate Update Folder:\nEnables installing game updates into a separate folder for easy management.</translation>
|
<translation>Külön Frissítéi Mappa Engedélyezése:\nEngedélyezi a frissítések külön mappába helyezését, a könnyű kezelésük érdekében.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="295"/>
|
<location filename="../settings_dialog.cpp" line="295"/>
|
||||||
<source>showSplashCheckBox</source>
|
<source>showSplashCheckBox</source>
|
||||||
<translation>Indító képernyő megjelenítése:\nMegjeleníti a játék indító képernyőjét (különleges képet) a játék elindításakor.</translation>
|
<translation>Indítóképernyő megjelenítése:\nMegjeleníti a játék indítóképernyőjét (különleges képet) a játék elindításakor.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="297"/>
|
<location filename="../settings_dialog.cpp" line="297"/>
|
||||||
<source>ps4proCheckBox</source>
|
<source>ps4proCheckBox</source>
|
||||||
<translation>PS4 Pro:\nAz emulátort PS4 PRO-ként kezeli, ami engedélyezheti a speciális funkciókat olyan játékokban, amelyek támogatják.</translation>
|
<translation>PS4 Pro:\nAz emulátort PS4 PRO-ként kezeli, ami engedélyezhet speciális funkciókat olyan játékokban, amelyek támogatják azt.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="438"/>
|
<location filename="../settings_dialog.cpp" line="438"/>
|
||||||
<source>discordRPCCheckbox</source>
|
<source>discordRPCCheckbox</source>
|
||||||
<translation>Engedélyezze a Discord Rich Presence-t:\nMegjeleníti az emulator ikonját és a kapcsolódó információkat a Discord profilján.</translation>
|
<translation>A Discord Rich Presence engedélyezése:\nMegjeleníti az emulator ikonját és a kapcsolódó információkat a Discord profilján.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="299"/>
|
<location filename="../settings_dialog.cpp" line="299"/>
|
||||||
@ -1184,17 +1199,17 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="306"/>
|
<location filename="../settings_dialog.cpp" line="306"/>
|
||||||
<source>GUIgroupBox</source>
|
<source>GUIgroupBox</source>
|
||||||
<translation>Játék címzene lejátszása:\nHa a játék támogatja, engedélyezze a speciális zene lejátszását, amikor a játékot kiválasztja a GUI-ban.</translation>
|
<translation>Játék címzene lejátszása:\nHa a játék támogatja, engedélyezze egy speciális zene lejátszását, amikor a játékot kiválasztja a GUI-ban.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="450"/>
|
<location filename="../settings_dialog.cpp" line="450"/>
|
||||||
<source>hideCursorGroupBox</source>
|
<source>hideCursorGroupBox</source>
|
||||||
<translation>Akurátor elrejtése:\nVálassza ki, mikor tűnjön el az egérkurzor:\nSoha: Az egér mindig látható.\nInaktív: Állítson be egy időt, amikor inaktív állapotban eltűnik.\nMindig: soha nem látja az egeret.</translation>
|
<translation>Kurzor elrejtése:\nVálassza ki, mikor tűnjön el az egérmutató:\nSoha: Az egér mindig látható.\nInaktív: Állítson be egy időt, amennyi idő mozdulatlanság után eltűnik.\nMindig: az egér mindig el lesz rejtve.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="452"/>
|
<location filename="../settings_dialog.cpp" line="452"/>
|
||||||
<source>idleTimeoutGroupBox</source>
|
<source>idleTimeoutGroupBox</source>
|
||||||
<translation>Állítson be egy időt, ameddig az egér inaktív állapot után eltűnik.</translation>
|
<translation>Állítson be egy időt, ami után egér inaktív állapotban eltűnik.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="454"/>
|
<location filename="../settings_dialog.cpp" line="454"/>
|
||||||
@ -1219,17 +1234,17 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="101"/>
|
<location filename="../settings_dialog.cpp" line="101"/>
|
||||||
<source>Touchpad Left</source>
|
<source>Touchpad Left</source>
|
||||||
<translation>Érintőpad Balra</translation>
|
<translation>Érintőpad Bal</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="102"/>
|
<location filename="../settings_dialog.cpp" line="102"/>
|
||||||
<source>Touchpad Right</source>
|
<source>Touchpad Right</source>
|
||||||
<translation>Érintőpad Jobbra</translation>
|
<translation>Érintőpad Jobb</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="103"/>
|
<location filename="../settings_dialog.cpp" line="103"/>
|
||||||
<source>Touchpad Center</source>
|
<source>Touchpad Center</source>
|
||||||
<translation>Érintőpad Középen</translation>
|
<translation>Érintőpad Közép</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="104"/>
|
<location filename="../settings_dialog.cpp" line="104"/>
|
||||||
@ -1239,7 +1254,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="312"/>
|
<location filename="../settings_dialog.cpp" line="312"/>
|
||||||
<source>graphicsAdapterGroupBox</source>
|
<source>graphicsAdapterGroupBox</source>
|
||||||
<translation>Grafikus eszköz:\nTöbb GPU-s rendszereken válassza ki a GPU-t, amelyet az emulátor használ a legördülő listából,\nvagy válassza az "Auto Select" lehetőséget, hogy automatikusan meghatározza azt.</translation>
|
<translation>Grafikus eszköz:\nTöbb GPU-s rendszereken válassza ki, melyik GPU-t használja az emulátor a legördülő listából,\nvagy válassza az "Auto Select" lehetőséget, hogy automatikusan kiválassza azt.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="314"/>
|
<location filename="../settings_dialog.cpp" line="314"/>
|
||||||
@ -1249,7 +1264,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="318"/>
|
<location filename="../settings_dialog.cpp" line="318"/>
|
||||||
<source>heightDivider</source>
|
<source>heightDivider</source>
|
||||||
<translation>Vblank osztó:\nAz emulátor frissítési sebessége e számot megszorozva működik. Ennek megváltoztatása kedvezőtlen hatásokat okozhat, például növelheti a játék sebességét, vagy megszakíthat kritikus játékfunkciókat, amelyek nem számítanak arra, hogy ez megváltozik!</translation>
|
<translation>Vblank elosztó:\nAz emulátor frissítési sebessége e számot megszorozva működik. Ennek megváltoztatása kedvezőtlen hatásokat okozhat, például növelheti a játék sebességét, vagy megszakíthat kritikus játékfunkciókat, amelyek nem számítanak arra, hogy ez megváltozik!</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="320"/>
|
<location filename="../settings_dialog.cpp" line="320"/>
|
||||||
@ -1264,7 +1279,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="465"/>
|
<location filename="../settings_dialog.cpp" line="465"/>
|
||||||
<source>gameFoldersBox</source>
|
<source>gameFoldersBox</source>
|
||||||
<translation>Játék mappák:\nA mappák listája az telepített játékok ellenőrzésére.</translation>
|
<translation>Játék mappák:\nA mappák listája, ahol telepített játékok vannak.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../settings_dialog.cpp" line="465"/>
|
<location filename="../settings_dialog.cpp" line="465"/>
|
||||||
@ -1405,7 +1420,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../check_update.cpp" line="178"/>
|
<location filename="../check_update.cpp" line="178"/>
|
||||||
<source>Latest Version</source>
|
<source>Latest Version</source>
|
||||||
<translation>Legújabb verzió</translation>
|
<translation>Új verzió</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../check_update.cpp" line="179"/>
|
<location filename="../check_update.cpp" line="179"/>
|
||||||
@ -1415,7 +1430,7 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../check_update.cpp" line="193"/>
|
<location filename="../check_update.cpp" line="193"/>
|
||||||
<source>Show Changelog</source>
|
<source>Show Changelog</source>
|
||||||
<translation>Módosítások megjelenítése</translation>
|
<translation>Változások megjelenítése</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../check_update.cpp" line="198"/>
|
<location filename="../check_update.cpp" line="198"/>
|
||||||
@ -1430,17 +1445,17 @@
|
|||||||
<message>
|
<message>
|
||||||
<location filename="../check_update.cpp" line="200"/>
|
<location filename="../check_update.cpp" line="200"/>
|
||||||
<source>No</source>
|
<source>No</source>
|
||||||
<translation>Nem</translation>
|
<translation>Mégse</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../check_update.cpp" line="223"/>
|
<location filename="../check_update.cpp" line="223"/>
|
||||||
<source>Hide Changelog</source>
|
<source>Hide Changelog</source>
|
||||||
<translation>Módosítások elrejtése</translation>
|
<translation>Változások elrejtése</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../check_update.cpp" line="296"/>
|
<location filename="../check_update.cpp" line="296"/>
|
||||||
<source>Changes</source>
|
<source>Changes</source>
|
||||||
<translation>Módosítások</translation>
|
<translation>Változások</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../check_update.cpp" line="310"/>
|
<location filename="../check_update.cpp" line="310"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Create Shortcut</translation>
|
<translation>Create Shortcut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Open Game Folder</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Buka Folder...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Buka Folder Game</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Buka Folder Data Simpanan</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Buka Folder Log</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copy info</translation>
|
<translation>Copy info...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Crea scorciatoia</translation>
|
<translation>Crea scorciatoia</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Apri cartella del gioco</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Visualizzatore Trofei</translation>
|
<translation>Visualizzatore Trofei</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Apri Cartella...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Apri Cartella del Gioco</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Apri Cartella dei Dati di Salvataggio</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Apri Cartella dei Log</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copia informazioni</translation>
|
<translation>Copia informazioni...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>ショートカットを作成</translation>
|
<translation>ショートカットを作成</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>ゲームフォルダを開く</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>トロフィービューワー</translation>
|
<translation>トロフィービューワー</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>フォルダを開く...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>ゲームフォルダを開く</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>セーブデータフォルダを開く</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>ログフォルダを開く</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>情報をコピー</translation>
|
<translation>情報をコピー...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Create Shortcut</translation>
|
<translation>Create Shortcut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Open Game Folder</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Open Folder...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Open Game Folder</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Open Save Data Folder</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Open Log Folder</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copy info</translation>
|
<translation>Copy info...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Create Shortcut</translation>
|
<translation>Create Shortcut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Open Game Folder</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Apgaulės / Pleistrai</source>
|
<source>Apgaulės / Pleistrai</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Atidaryti Katalogą...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Atidaryti Žaidimo Katalogą</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Atidaryti Išsaugotų Duomenų Katalogą</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Atidaryti Žurnalų Katalogą</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copy info</translation>
|
<translation>Copy info...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Create Shortcut</translation>
|
<translation>Create Shortcut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Open Game Folder</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Åpne Mappen...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Åpne Spillmappe</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Åpne Lagrede Data-mappen</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Åpne Loggmappen</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copy info</translation>
|
<translation>Copy info...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Create Shortcut</translation>
|
<translation>Create Shortcut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Open Game Folder</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Map openen...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Open Spelmap</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Open Map voor Opslagdata</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Open Logmap</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copy info</translation>
|
<translation>Copy info...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Utwórz skrót</translation>
|
<translation>Utwórz skrót</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Otwórz katalog gry</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Menedżer trofeów</translation>
|
<translation>Menedżer trofeów</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Otwórz Folder...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Otwórz Katalog Gry</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Otwórz Folder Danych Zapisów</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Otwórz Folder Dziennika</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Kopiuj informacje</translation>
|
<translation>Kopiuj informacje...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Criar Atalho</translation>
|
<translation>Criar Atalho</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Abrir Pasta do Jogo</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Visualizador de Troféu</translation>
|
<translation>Visualizador de Troféu</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Abrir Pasta...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Abrir Pasta do Jogo</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Abrir Pasta de Save</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Abrir Pasta de Log</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copiar informação</translation>
|
<translation>Copiar informação...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Create Shortcut</translation>
|
<translation>Create Shortcut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Open Game Folder</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Trapaças / Patches</source>
|
<source>Trapaças / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Deschide Folder...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Deschide Folder Joc</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Deschide Folder Date Salvate</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Deschide Folder Jurnal</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copy info</translation>
|
<translation>Copy info...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Создать ярлык</translation>
|
<translation>Создать ярлык</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Открыть папку с игрой</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Просмотр трофеев</translation>
|
<translation>Просмотр трофеев</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Открыть Папку...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Открыть папку с игрой</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Открыть Папку Сохранений</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Открыть Папку Логов</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Копировать информацию</translation>
|
<translation>Копировать информацию...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Krijo Shkurtore</translation>
|
<translation>Krijo Shkurtore</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Hap Dosjen e Lojës</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Shikuesi i Trofeve</translation>
|
<translation>Shikuesi i Trofeve</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Hapni Dosjen...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Hapni Dosjen e Lojës</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Hapni Dosjen e të Dhënave të Ruajtura</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Hapni Dosjen e Regjistrimeve</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Kopjo informacionin</translation>
|
<translation>Kopjo informacionin...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Kısayol Oluştur</translation>
|
<translation>Kısayol Oluştur</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Oyun Klasörünü Aç</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Kupa Görüntüleyici</translation>
|
<translation>Kupa Görüntüleyici</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Klasörü Aç...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Oyun Klasörünü Aç</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Kaydetme Verileri Klasörünü Aç</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Log Klasörünü Aç</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Bilgiyi Kopyala</translation>
|
<translation>Bilgiyi Kopyala...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Створити Ярлик</translation>
|
<translation>Створити Ярлик</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Відкрити папку з грою</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Перегляд трофеїв</translation>
|
<translation>Перегляд трофеїв</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Відкрити Папку...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Відкрити папку з грою</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Відкрити Папку Збережених Даних</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Відкрити Папку Логів</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Копіювати інформацію</translation>
|
<translation>Копіювати інформацію...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Create Shortcut</translation>
|
<translation>Create Shortcut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Open Game Folder</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>Mở Thư Mục...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>Mở Thư Mục Trò Chơi</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>Mở Thư Mục Dữ Liệu Lưu</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>Mở Thư Mục Nhật Ký</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copy info</translation>
|
<translation>Copy info...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>创建快捷方式</translation>
|
<translation>创建快捷方式</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>打开游戏文件夹</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy 查看器</translation>
|
<translation>Trophy 查看器</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>打开文件夹...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>打开游戏文件夹</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>打开保存数据文件夹</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>打开日志文件夹</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>复制信息</translation>
|
<translation>复制信息...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -100,11 +100,6 @@
|
|||||||
<source>Create Shortcut</source>
|
<source>Create Shortcut</source>
|
||||||
<translation>Create Shortcut</translation>
|
<translation>Create Shortcut</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<location filename="../gui_context_menus.h" line="47"/>
|
|
||||||
<source>Open Game Folder</source>
|
|
||||||
<translation>Open Game Folder</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="48"/>
|
<location filename="../gui_context_menus.h" line="48"/>
|
||||||
<source>Cheats / Patches</source>
|
<source>Cheats / Patches</source>
|
||||||
@ -120,10 +115,30 @@
|
|||||||
<source>Trophy Viewer</source>
|
<source>Trophy Viewer</source>
|
||||||
<translation>Trophy Viewer</translation>
|
<translation>Trophy Viewer</translation>
|
||||||
</message>
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="49"/>
|
||||||
|
<source>Open Folder...</source>
|
||||||
|
<translation>打開資料夾...</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="50"/>
|
||||||
|
<source>Open Game Folder</source>
|
||||||
|
<translation>打開遊戲資料夾</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="51"/>
|
||||||
|
<source>Open Save Data Folder</source>
|
||||||
|
<translation>打開存檔資料夾</translation>
|
||||||
|
</message>
|
||||||
|
<message>
|
||||||
|
<location filename="../gui_context_menus.h" line="52"/>
|
||||||
|
<source>Open Log Folder</source>
|
||||||
|
<translation>打開日誌資料夾</translation>
|
||||||
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="59"/>
|
<location filename="../gui_context_menus.h" line="59"/>
|
||||||
<source>Copy info</source>
|
<source>Copy info...</source>
|
||||||
<translation>Copy info</translation>
|
<translation>Copy info...</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<location filename="../gui_context_menus.h" line="60"/>
|
<location filename="../gui_context_menus.h" line="60"/>
|
||||||
|
@ -690,9 +690,9 @@ void PatchImageInstruction(IR::Block& block, IR::Inst& inst, Info& info, Descrip
|
|||||||
IR::Inst* body = inst.Arg(1).InstRecursive();
|
IR::Inst* body = inst.Arg(1).InstRecursive();
|
||||||
const auto [coords, arg] = [&] -> std::pair<IR::Value, IR::Value> {
|
const auto [coords, arg] = [&] -> std::pair<IR::Value, IR::Value> {
|
||||||
switch (image.GetType()) {
|
switch (image.GetType()) {
|
||||||
case AmdGpu::ImageType::Color1D: // x
|
case AmdGpu::ImageType::Color1D: // x, [lod]
|
||||||
return {body->Arg(0), body->Arg(1)};
|
return {body->Arg(0), body->Arg(1)};
|
||||||
case AmdGpu::ImageType::Color1DArray: // x, slice
|
case AmdGpu::ImageType::Color1DArray: // x, slice, [lod]
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
case AmdGpu::ImageType::Color2D: // x, y, [lod]
|
case AmdGpu::ImageType::Color2D: // x, y, [lod]
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
@ -703,9 +703,9 @@ void PatchImageInstruction(IR::Block& block, IR::Inst& inst, Info& info, Descrip
|
|||||||
case AmdGpu::ImageType::Color2DMsaaArray: // x, y, slice. (sample is passed on different
|
case AmdGpu::ImageType::Color2DMsaaArray: // x, y, slice. (sample is passed on different
|
||||||
// argument)
|
// argument)
|
||||||
[[fallthrough]];
|
[[fallthrough]];
|
||||||
case AmdGpu::ImageType::Color3D: // x, y, z
|
case AmdGpu::ImageType::Color3D: // x, y, z, [lod]
|
||||||
return {ir.CompositeConstruct(body->Arg(0), body->Arg(1), body->Arg(2)), body->Arg(3)};
|
return {ir.CompositeConstruct(body->Arg(0), body->Arg(1), body->Arg(2)), body->Arg(3)};
|
||||||
case AmdGpu::ImageType::Cube: // x, y, face
|
case AmdGpu::ImageType::Cube: // x, y, face, [lod]
|
||||||
return {PatchCubeCoord(ir, body->Arg(0), body->Arg(1), body->Arg(2), is_storage,
|
return {PatchCubeCoord(ir, body->Arg(0), body->Arg(1), body->Arg(2), is_storage,
|
||||||
inst_info.is_array),
|
inst_info.is_array),
|
||||||
body->Arg(3)};
|
body->Arg(3)};
|
||||||
@ -717,8 +717,8 @@ void PatchImageInstruction(IR::Block& block, IR::Inst& inst, Info& info, Descrip
|
|||||||
|
|
||||||
if (inst_info.has_lod) {
|
if (inst_info.has_lod) {
|
||||||
ASSERT(inst.GetOpcode() == IR::Opcode::ImageFetch);
|
ASSERT(inst.GetOpcode() == IR::Opcode::ImageFetch);
|
||||||
ASSERT(image.GetType() == AmdGpu::ImageType::Color2D ||
|
ASSERT(image.GetType() != AmdGpu::ImageType::Color2DMsaa &&
|
||||||
image.GetType() == AmdGpu::ImageType::Color2DArray);
|
image.GetType() != AmdGpu::ImageType::Color2DMsaaArray);
|
||||||
inst.SetArg(3, arg);
|
inst.SetArg(3, arg);
|
||||||
} else if (image.GetType() == AmdGpu::ImageType::Color2DMsaa ||
|
} else if (image.GetType() == AmdGpu::ImageType::Color2DMsaa ||
|
||||||
image.GetType() == AmdGpu::ImageType::Color2DMsaaArray) {
|
image.GetType() == AmdGpu::ImageType::Color2DMsaaArray) {
|
||||||
|
@ -322,7 +322,7 @@ bool PipelineCache::RefreshGraphicsKey() {
|
|||||||
switch (regs.stage_enable.raw) {
|
switch (regs.stage_enable.raw) {
|
||||||
case Liverpool::ShaderStageEnable::VgtStages::EsGs: {
|
case Liverpool::ShaderStageEnable::VgtStages::EsGs: {
|
||||||
if (!instance.IsGeometryStageSupported() || !IsGsFeaturesSupported()) {
|
if (!instance.IsGeometryStageSupported() || !IsGsFeaturesSupported()) {
|
||||||
break;
|
return false;
|
||||||
}
|
}
|
||||||
if (!TryBindStageRemap(Shader::Stage::Export, Shader::Stage::Vertex)) {
|
if (!TryBindStageRemap(Shader::Stage::Export, Shader::Stage::Vertex)) {
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user