mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 06:09:50 -06:00
VideoCommon: add logic to handle a GraphicsMod while Dolphin is running
This commit is contained in:
@ -0,0 +1,47 @@
|
||||
// Copyright 2022 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "VideoCommon/GraphicsModSystem/Runtime/Actions/MoveAction.h"
|
||||
|
||||
std::unique_ptr<MoveAction> MoveAction::Create(const picojson::value& json_data)
|
||||
{
|
||||
Common::Vec3 position_offset;
|
||||
const auto& x = json_data.get("X");
|
||||
if (x.is<double>())
|
||||
{
|
||||
position_offset.x = static_cast<float>(x.get<double>());
|
||||
}
|
||||
|
||||
const auto& y = json_data.get("Y");
|
||||
if (y.is<double>())
|
||||
{
|
||||
position_offset.y = static_cast<float>(y.get<double>());
|
||||
}
|
||||
|
||||
const auto& z = json_data.get("Z");
|
||||
if (z.is<double>())
|
||||
{
|
||||
position_offset.z = static_cast<float>(z.get<double>());
|
||||
}
|
||||
return std::make_unique<MoveAction>(position_offset);
|
||||
}
|
||||
|
||||
MoveAction::MoveAction(Common::Vec3 position_offset) : m_position_offset(position_offset)
|
||||
{
|
||||
}
|
||||
|
||||
void MoveAction::OnProjection(Common::Matrix44* matrix)
|
||||
{
|
||||
if (!matrix)
|
||||
return;
|
||||
|
||||
*matrix *= Common::Matrix44::Translate(m_position_offset);
|
||||
}
|
||||
|
||||
void MoveAction::OnProjectionAndTexture(Common::Matrix44* matrix)
|
||||
{
|
||||
if (!matrix)
|
||||
return;
|
||||
|
||||
*matrix *= Common::Matrix44::Translate(m_position_offset);
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
// Copyright 2022 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <picojson.h>
|
||||
|
||||
#include "VideoCommon/GraphicsModSystem/Runtime/GraphicsModAction.h"
|
||||
|
||||
class MoveAction final : public GraphicsModAction
|
||||
{
|
||||
public:
|
||||
static std::unique_ptr<MoveAction> Create(const picojson::value& json_data);
|
||||
explicit MoveAction(Common::Vec3 position_offset);
|
||||
void OnProjection(Common::Matrix44* matrix) override;
|
||||
void OnProjectionAndTexture(Common::Matrix44* matrix) override;
|
||||
|
||||
private:
|
||||
Common::Vec3 m_position_offset;
|
||||
};
|
@ -0,0 +1,36 @@
|
||||
// Copyright 2022 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "VideoCommon/GraphicsModSystem/Runtime/Actions/PrintAction.h"
|
||||
|
||||
#include "Common/Logging/Log.h"
|
||||
|
||||
void PrintAction::OnDrawStarted(bool*)
|
||||
{
|
||||
INFO_LOG_FMT(VIDEO, "OnDrawStarted Called");
|
||||
}
|
||||
|
||||
void PrintAction::OnEFB(bool*, u32 texture_width, u32 texture_height, u32* scaled_width,
|
||||
u32* scaled_height)
|
||||
{
|
||||
if (!scaled_width || !scaled_height)
|
||||
return;
|
||||
|
||||
INFO_LOG_FMT(VIDEO, "OnEFB Called. Original [{}, {}], Scaled [{}, {}]", texture_width,
|
||||
texture_height, *scaled_width, *scaled_height);
|
||||
}
|
||||
|
||||
void PrintAction::OnProjection(Common::Matrix44*)
|
||||
{
|
||||
INFO_LOG_FMT(VIDEO, "OnProjection Called");
|
||||
}
|
||||
|
||||
void PrintAction::OnProjectionAndTexture(Common::Matrix44*)
|
||||
{
|
||||
INFO_LOG_FMT(VIDEO, "OnProjectionAndTexture Called");
|
||||
}
|
||||
|
||||
void PrintAction::OnTextureLoad()
|
||||
{
|
||||
INFO_LOG_FMT(VIDEO, "OnTextureLoad Called");
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
// Copyright 2022 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "VideoCommon/GraphicsModSystem/Runtime/GraphicsModAction.h"
|
||||
|
||||
class PrintAction final : public GraphicsModAction
|
||||
{
|
||||
public:
|
||||
void OnDrawStarted(bool* skip) override;
|
||||
void OnEFB(bool* skip, u32 texture_width, u32 texture_height, u32* scaled_width,
|
||||
u32* scaled_height) override;
|
||||
void OnProjection(Common::Matrix44* matrix) override;
|
||||
void OnProjectionAndTexture(Common::Matrix44* matrix) override;
|
||||
void OnTextureLoad() override;
|
||||
};
|
@ -0,0 +1,59 @@
|
||||
// Copyright 2022 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "VideoCommon/GraphicsModSystem/Runtime/Actions/ScaleAction.h"
|
||||
|
||||
std::unique_ptr<ScaleAction> ScaleAction::Create(const picojson::value& json_data)
|
||||
{
|
||||
Common::Vec3 scale;
|
||||
const auto& x = json_data.get("X");
|
||||
if (x.is<double>())
|
||||
{
|
||||
scale.x = static_cast<float>(x.get<double>());
|
||||
}
|
||||
|
||||
const auto& y = json_data.get("Y");
|
||||
if (y.is<double>())
|
||||
{
|
||||
scale.y = static_cast<float>(y.get<double>());
|
||||
}
|
||||
|
||||
const auto& z = json_data.get("Z");
|
||||
if (z.is<double>())
|
||||
{
|
||||
scale.z = static_cast<float>(z.get<double>());
|
||||
}
|
||||
return std::make_unique<ScaleAction>(scale);
|
||||
}
|
||||
|
||||
ScaleAction::ScaleAction(Common::Vec3 scale) : m_scale(scale)
|
||||
{
|
||||
}
|
||||
|
||||
void ScaleAction::OnEFB(bool*, u32 texture_width, u32 texture_height, u32* scaled_width,
|
||||
u32* scaled_height)
|
||||
{
|
||||
if (scaled_width && m_scale.x > 0)
|
||||
*scaled_width = texture_width * m_scale.x;
|
||||
|
||||
if (scaled_height && m_scale.y > 0)
|
||||
*scaled_height = texture_height * m_scale.y;
|
||||
}
|
||||
|
||||
void ScaleAction::OnProjection(Common::Matrix44* matrix)
|
||||
{
|
||||
if (!matrix)
|
||||
return;
|
||||
auto& the_matrix = *matrix;
|
||||
the_matrix.data[0] = the_matrix.data[0] * m_scale.x;
|
||||
the_matrix.data[5] = the_matrix.data[5] * m_scale.y;
|
||||
}
|
||||
|
||||
void ScaleAction::OnProjectionAndTexture(Common::Matrix44* matrix)
|
||||
{
|
||||
if (!matrix)
|
||||
return;
|
||||
auto& the_matrix = *matrix;
|
||||
the_matrix.data[0] = the_matrix.data[0] * m_scale.x;
|
||||
the_matrix.data[5] = the_matrix.data[5] * m_scale.y;
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
// Copyright 2022 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <memory>
|
||||
|
||||
#include <picojson.h>
|
||||
|
||||
#include "VideoCommon/GraphicsModSystem/Runtime/GraphicsModAction.h"
|
||||
|
||||
class ScaleAction final : public GraphicsModAction
|
||||
{
|
||||
public:
|
||||
static std::unique_ptr<ScaleAction> Create(const picojson::value& json_data);
|
||||
explicit ScaleAction(Common::Vec3 scale);
|
||||
void OnEFB(bool* skip, u32 texture_width, u32 texture_height, u32* scaled_width,
|
||||
u32* scaled_height) override;
|
||||
void OnProjection(Common::Matrix44* matrix) override;
|
||||
void OnProjectionAndTexture(Common::Matrix44* matrix) override;
|
||||
|
||||
private:
|
||||
Common::Vec3 m_scale;
|
||||
};
|
@ -0,0 +1,20 @@
|
||||
// Copyright 2022 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#include "VideoCommon/GraphicsModSystem/Runtime/Actions/SkipAction.h"
|
||||
|
||||
void SkipAction::OnDrawStarted(bool* skip)
|
||||
{
|
||||
if (!skip)
|
||||
return;
|
||||
|
||||
*skip = true;
|
||||
}
|
||||
|
||||
void SkipAction::OnEFB(bool* skip, u32, u32, u32*, u32*)
|
||||
{
|
||||
if (!skip)
|
||||
return;
|
||||
|
||||
*skip = true;
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
// Copyright 2022 Dolphin Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "VideoCommon/GraphicsModSystem/Runtime/GraphicsModAction.h"
|
||||
|
||||
class SkipAction final : public GraphicsModAction
|
||||
{
|
||||
public:
|
||||
void OnDrawStarted(bool* skip) override;
|
||||
void OnEFB(bool* skip, u32 texture_width, u32 texture_height, u32* scaled_width,
|
||||
u32* scaled_height) override;
|
||||
};
|
Reference in New Issue
Block a user