diff --git a/src/libprojectM/ProjectM.cpp b/src/libprojectM/ProjectM.cpp index e3bc48f3c..7d99a509a 100644 --- a/src/libprojectM/ProjectM.cpp +++ b/src/libprojectM/ProjectM.cpp @@ -184,6 +184,13 @@ void ProjectM::ReadSettings(const class Settings& settings) Initialize(); } + +void ProjectM::DumpDebugImageOnNextFrame() +{ + m_renderer->writeNextFrameToFile = true; +} + + #if USE_THREADS void ProjectM::ThreadWorker() diff --git a/src/libprojectM/ProjectM.hpp b/src/libprojectM/ProjectM.hpp index e138bf090..4e5527f72 100644 --- a/src/libprojectM/ProjectM.hpp +++ b/src/libprojectM/ProjectM.hpp @@ -270,6 +270,13 @@ public: void DefaultKeyHandler(projectMEvent event, projectMKeycode keycode); + /** + * @brief Dumps a debug image to the working dir when the next frame is rendered. + * + * The main texture is dumped after render pass 1, e.g. before shaders are applied. + */ + void DumpDebugImageOnNextFrame(); + private: void EvaluateSecondPreset(); diff --git a/src/libprojectM/ProjectMCWrapper.cpp b/src/libprojectM/ProjectMCWrapper.cpp index 1aaa7d55a..1f82ef36f 100644 --- a/src/libprojectM/ProjectMCWrapper.cpp +++ b/src/libprojectM/ProjectMCWrapper.cpp @@ -674,3 +674,10 @@ auto projectm_pcm_add_uint8(projectm_handle instance, const uint8_t* samples, un { PcmAdd(instance, samples, count, channels); } + +auto projectm_write_debug_image_on_next_frame(projectm_handle instance) -> void +{ + auto* projectMInstance = handle_to_instance(instance); + + projectMInstance->DumpDebugImageOnNextFrame(); +} \ No newline at end of file diff --git a/src/libprojectM/projectM.h b/src/libprojectM/projectM.h index 379d24714..764799a32 100644 --- a/src/libprojectM/projectM.h +++ b/src/libprojectM/projectM.h @@ -923,6 +923,15 @@ PROJECTM_EXPORT void projectm_pcm_add_int16(projectm_handle instance, const int1 PROJECTM_EXPORT void projectm_pcm_add_uint8(projectm_handle instance, const uint8_t* samples, unsigned int count, projectm_channels channels); +/** + * @brief Writes a .bmp framedump after rendering the next main texture, before shaders are applied. + * + * The image is written to the current working directory and is named "frame_texture_contents-[date].bmp". + * + * @param instance The projectM instance handle. + */ +PROJECTM_EXPORT void projectm_write_debug_image_on_next_frame(projectm_handle instance); + #ifdef __cplusplus } // extern "C" #endif