107 lines
3.5 KiB
C++
107 lines
3.5 KiB
C++
#ifndef __OPENGL_COMPOSITE_H__
|
|
#define __OPENGL_COMPOSITE_H__
|
|
|
|
#include <windows.h>
|
|
#include <process.h>
|
|
#include <tchar.h>
|
|
#include <gl/gl.h>
|
|
#include <gl/glu.h>
|
|
|
|
#include <objbase.h>
|
|
#include <atlbase.h>
|
|
#include <comutil.h>
|
|
|
|
#include "GLExtensions.h"
|
|
#include "OpenGLRenderer.h"
|
|
#include "RuntimeHost.h"
|
|
|
|
#include <functional>
|
|
#include <atomic>
|
|
#include <filesystem>
|
|
#include <map>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
#include <deque>
|
|
|
|
class VideoIODevice;
|
|
class OpenGLVideoIOBridge;
|
|
class OpenGLRenderPass;
|
|
class OpenGLRenderPipeline;
|
|
class OpenGLShaderPrograms;
|
|
class RuntimeServices;
|
|
class ShaderBuildQueue;
|
|
|
|
|
|
class OpenGLComposite
|
|
{
|
|
public:
|
|
OpenGLComposite(HWND hWnd, HDC hDC, HGLRC hRC);
|
|
~OpenGLComposite();
|
|
|
|
bool InitDeckLink();
|
|
bool InitVideoIO();
|
|
bool Start();
|
|
bool Stop();
|
|
bool ReloadShader();
|
|
std::string GetRuntimeStateJson() const;
|
|
bool AddLayer(const std::string& shaderId, std::string& error);
|
|
bool RemoveLayer(const std::string& layerId, std::string& error);
|
|
bool MoveLayer(const std::string& layerId, int direction, std::string& error);
|
|
bool MoveLayerToIndex(const std::string& layerId, std::size_t targetIndex, std::string& error);
|
|
bool SetLayerBypass(const std::string& layerId, bool bypassed, std::string& error);
|
|
bool SetLayerShader(const std::string& layerId, const std::string& shaderId, std::string& error);
|
|
bool UpdateLayerParameterJson(const std::string& layerId, const std::string& parameterId, const std::string& valueJson, std::string& error);
|
|
bool UpdateLayerParameterByControlKeyJson(const std::string& layerKey, const std::string& parameterKey, const std::string& valueJson, std::string& error);
|
|
bool ResetLayerParameters(const std::string& layerId, std::string& error);
|
|
bool SaveStackPreset(const std::string& presetName, std::string& error);
|
|
bool LoadStackPreset(const std::string& presetName, std::string& error);
|
|
bool RequestScreenshot(std::string& error);
|
|
unsigned short GetControlServerPort() const;
|
|
unsigned short GetOscPort() const;
|
|
std::string GetControlUrl() const;
|
|
std::string GetDocsUrl() const;
|
|
std::string GetOscAddress() const;
|
|
|
|
void resizeGL(WORD width, WORD height);
|
|
void paintGL();
|
|
|
|
private:
|
|
void resizeWindow(int width, int height);
|
|
bool CheckOpenGLExtensions();
|
|
void PublishVideoIOStatus(const std::string& statusMessage);
|
|
using LayerProgram = OpenGLRenderer::LayerProgram;
|
|
|
|
HWND hGLWnd;
|
|
HDC hGLDC;
|
|
HGLRC hGLRC;
|
|
CRITICAL_SECTION pMutex;
|
|
|
|
std::unique_ptr<VideoIODevice> mVideoIO;
|
|
std::unique_ptr<OpenGLRenderer> mRenderer;
|
|
std::unique_ptr<RuntimeHost> mRuntimeHost;
|
|
std::unique_ptr<OpenGLVideoIOBridge> mVideoIOBridge;
|
|
std::unique_ptr<OpenGLRenderPass> mRenderPass;
|
|
std::unique_ptr<OpenGLRenderPipeline> mRenderPipeline;
|
|
std::unique_ptr<OpenGLShaderPrograms> mShaderPrograms;
|
|
std::unique_ptr<ShaderBuildQueue> mShaderBuildQueue;
|
|
std::unique_ptr<RuntimeServices> mRuntimeServices;
|
|
std::vector<RuntimeRenderState> mCachedLayerRenderStates;
|
|
uint64_t mCachedRenderStateVersion = 0;
|
|
unsigned mCachedRenderStateWidth = 0;
|
|
unsigned mCachedRenderStateHeight = 0;
|
|
std::atomic<bool> mUseCommittedLayerStates;
|
|
std::atomic<bool> mScreenshotRequested;
|
|
|
|
bool InitOpenGLState();
|
|
void renderEffect();
|
|
bool ProcessRuntimePollResults();
|
|
void RequestShaderBuild();
|
|
void ProcessScreenshotRequest();
|
|
std::filesystem::path BuildScreenshotPath() const;
|
|
void broadcastRuntimeState();
|
|
void resetTemporalHistoryState();
|
|
};
|
|
|
|
#endif // __OPENGL_COMPOSITE_H__
|