Kodi Development 22.0
for Binary and Script based Add-Ons
 
Loading...
Searching...
No Matches
ShaderPreset.h
1/*
2 * Copyright (C) 2017-2025 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
8
9#pragma once
10
11#include "../AddonBase.h"
12#include "../c-api/addon-instance/shaderpreset.h"
13
14#include <stdint.h>
15
16#ifdef __cplusplus
17
18namespace kodi
19{
20namespace addon
21{
22
23//==============================================================================
32class ATTR_DLL_LOCAL CInstanceShaderPreset : public IAddonInstance
33{
34public:
35 //============================================================================
41
42 //============================================================================
79 : IAddonInstance(IInstanceInfo(CPrivateBase::m_interface->firstKodiInstance))
80 {
81 if (CPrivateBase::m_interface->globalSingleInstance != nullptr)
82 throw std::logic_error("kodi::addon::CInstanceShaderPreset: Creation of "
83 "more than one in single instance is not allowed!");
84
85 SetAddonStruct(CPrivateBase::m_interface->firstKodiInstance);
86 CPrivateBase::m_interface->globalSingleInstance = this;
87 }
88
89 //----------------------------------------------------------------------------
90
91 //============================================================================
94 ~CInstanceShaderPreset() override = default;
95 //----------------------------------------------------------------------------
96
97 //============================================================================
104 std::string UserPath() const
105 {
106 if (m_instanceData->props->user_path != nullptr)
107 return m_instanceData->props->user_path;
108 return "";
109 }
110 //----------------------------------------------------------------------------
111
112 //============================================================================
119 std::string AddonPath() const
120 {
121 if (m_instanceData->props->addon_path != nullptr)
122 return m_instanceData->props->addon_path;
123 return "";
124 }
125 //----------------------------------------------------------------------------
126
127 //============================================================================
134 virtual preset_file PresetFileNew(const char* path) { return nullptr; }
135 //----------------------------------------------------------------------------
136
137 //============================================================================
140 virtual void PresetFileFree(preset_file file) {}
141 //----------------------------------------------------------------------------
142
143 //============================================================================
152 virtual bool ShaderPresetRead(preset_file file, video_shader& shader) { return false; }
153 //----------------------------------------------------------------------------
154
155 //============================================================================
164 virtual bool ShaderPresetWrite(preset_file file, const video_shader& shader) { return false; }
165 //----------------------------------------------------------------------------
166
167 //============================================================================
175 virtual bool ShaderPresetResolveParameters(preset_file file, video_shader& shader)
176 {
177 return false;
178 }
179 //----------------------------------------------------------------------------
180
181 //============================================================================
186 virtual void ShaderPresetFree(video_shader& shader) {}
187 //----------------------------------------------------------------------------
188
190
191private:
192 void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance)
193 {
194 instance->hdl = this;
195
196 instance->shaderpreset->toAddon->PresetFileNew = ADDON_preset_file_new;
197 instance->shaderpreset->toAddon->PresetFileFree = ADDON_preset_file_free;
198
199 instance->shaderpreset->toAddon->VideoShaderRead = ADDON_video_shader_read_file;
200 instance->shaderpreset->toAddon->VideoShaderWrite = ADDON_video_shader_write_file;
201 instance->shaderpreset->toAddon->VideoShaderResolveParameters =
202 ADDON_video_shader_resolve_parameters;
203 instance->shaderpreset->toAddon->VideoShaderFree = ADDON_video_shader_free;
204
205 m_instanceData = instance->shaderpreset;
206 m_instanceData->toAddon->addonInstance = this;
207 }
208
209 // --- Shader preset operations ----------------------------------------------
210
211 inline static preset_file ADDON_preset_file_new(const AddonInstance_ShaderPreset* addonInstance,
212 const char* path)
213 {
214 return static_cast<CInstanceShaderPreset*>(
215 static_cast<CInstanceShaderPreset*>(addonInstance->toAddon->addonInstance))
216 ->PresetFileNew(path);
217 }
218
219 inline static void ADDON_preset_file_free(const AddonInstance_ShaderPreset* addonInstance,
220 preset_file file)
221 {
222 return static_cast<CInstanceShaderPreset*>(addonInstance->toAddon->addonInstance)
223 ->PresetFileFree(file);
224 }
225
226 inline static bool ADDON_video_shader_read_file(const AddonInstance_ShaderPreset* addonInstance,
227 preset_file file,
228 video_shader* shader)
229 {
230 if (shader != nullptr)
231 return static_cast<CInstanceShaderPreset*>(addonInstance->toAddon->addonInstance)
232 ->ShaderPresetRead(file, *shader);
233
234 return false;
235 }
236
237 inline static bool ADDON_video_shader_write_file(const AddonInstance_ShaderPreset* addonInstance,
238 preset_file file,
239 const video_shader* shader)
240 {
241 if (shader != nullptr)
242 return static_cast<CInstanceShaderPreset*>(addonInstance->toAddon->addonInstance)
243 ->ShaderPresetWrite(file, *shader);
244
245 return false;
246 }
247
248 inline static bool ADDON_video_shader_resolve_parameters(
249 const AddonInstance_ShaderPreset* addonInstance, preset_file file, video_shader* shader)
250 {
251 if (shader != nullptr)
252 return static_cast<CInstanceShaderPreset*>(addonInstance->toAddon->addonInstance)
253 ->ShaderPresetResolveParameters(file, *shader);
254
255 return false;
256 }
257
258 inline static void ADDON_video_shader_free(const AddonInstance_ShaderPreset* addonInstance,
259 video_shader* shader)
260 {
261 if (shader != nullptr)
262 static_cast<CInstanceShaderPreset*>(addonInstance->toAddon->addonInstance)
263 ->ShaderPresetFree(*shader);
264 }
265
266 AddonInstance_ShaderPreset* m_instanceData;
267};
268
269} /* namespace addon */
270} /* namespace kodi */
271
272#endif /* __cplusplus */
Definition AddonBase.h:498
virtual bool ShaderPresetWrite(preset_file file, const video_shader &shader)
Save preset and all associated state (passes, textures, imports, etc) to disk.
Definition ShaderPreset.h:164
~CInstanceShaderPreset() override=default
Destructor.
virtual preset_file PresetFileNew(const char *path)
Loads a preset file
Definition ShaderPreset.h:134
std::string AddonPath() const
Used to get the full path where the add-on is installed.
Definition ShaderPreset.h:119
virtual void ShaderPresetFree(video_shader &shader)
Free all state related to shader preset.
Definition ShaderPreset.h:186
CInstanceShaderPreset()
Shader preset class constructor.
Definition ShaderPreset.h:78
std::string UserPath() const
Used to get the full path to the add-on's user profile.
Definition ShaderPreset.h:104
virtual bool ShaderPresetRead(preset_file file, video_shader &shader)
Loads preset file and all associated state (passes, textures, imports, etc)
Definition ShaderPreset.h:152
virtual bool ShaderPresetResolveParameters(preset_file file, video_shader &shader)
Resolve all shader parameters belonging to the shader preset.
Definition ShaderPreset.h:175
virtual void PresetFileFree(preset_file file)
Free a preset file
Definition ShaderPreset.h:140
ShaderPreset instance.
Definition shaderpreset.h:298
Definition addon_base.h:268
Internal used structure to have stored C API data above and available for everything below.
Definition AddonBase.h:73
Definition shaderpreset.h:219