forked from dolphin-emu/dolphin
		
	
		
			
				
	
	
		
			103 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			103 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// Copyright 2013 Dolphin Emulator Project
 | 
						|
// Licensed under GPLv2
 | 
						|
// Refer to the license.txt file included.
 | 
						|
 | 
						|
#pragma once
 | 
						|
 | 
						|
#include <map>
 | 
						|
#include <string>
 | 
						|
#include <vector>
 | 
						|
 | 
						|
#include "Common/StringUtil.h"
 | 
						|
#include "Common/Timer.h"
 | 
						|
 | 
						|
#include "VideoCommon/VideoCommon.h"
 | 
						|
 | 
						|
class PostProcessingShaderConfiguration
 | 
						|
{
 | 
						|
public:
 | 
						|
	struct ConfigurationOption
 | 
						|
	{
 | 
						|
		enum OptionType
 | 
						|
		{
 | 
						|
			OPTION_BOOL = 0,
 | 
						|
			OPTION_FLOAT,
 | 
						|
			OPTION_INTEGER,
 | 
						|
		};
 | 
						|
 | 
						|
		bool m_bool_value;
 | 
						|
 | 
						|
		std::vector<float> m_float_values;
 | 
						|
		std::vector<s32> m_integer_values;
 | 
						|
 | 
						|
		std::vector<float> m_float_min_values;
 | 
						|
		std::vector<s32> m_integer_min_values;
 | 
						|
 | 
						|
		std::vector<float> m_float_max_values;
 | 
						|
		std::vector<s32> m_integer_max_values;
 | 
						|
 | 
						|
		std::vector<float> m_float_step_values;
 | 
						|
		std::vector<s32> m_integer_step_values;
 | 
						|
 | 
						|
		OptionType m_type;
 | 
						|
 | 
						|
		std::string m_gui_name;
 | 
						|
		std::string m_option_name;
 | 
						|
		std::string m_dependent_option;
 | 
						|
		bool m_dirty;
 | 
						|
	};
 | 
						|
 | 
						|
	typedef std::map<std::string, ConfigurationOption> ConfigMap;
 | 
						|
 | 
						|
	PostProcessingShaderConfiguration() : m_current_shader("") {}
 | 
						|
	virtual ~PostProcessingShaderConfiguration() {}
 | 
						|
 | 
						|
	// Loads the configuration with a shader
 | 
						|
	// If the argument is "" the class will load the shader from the g_activeConfig option.
 | 
						|
	// Returns the loaded shader source from file
 | 
						|
	std::string LoadShader(std::string shader = "");
 | 
						|
	void SaveOptionsConfiguration();
 | 
						|
	void ReloadShader();
 | 
						|
	std::string GetShader() { return m_current_shader; }
 | 
						|
 | 
						|
	bool IsDirty() { return m_any_options_dirty; }
 | 
						|
	void SetDirty(bool dirty) { m_any_options_dirty = dirty; }
 | 
						|
 | 
						|
	bool HasOptions() { return m_options.size() > 0; }
 | 
						|
	ConfigMap& GetOptions() { return m_options; }
 | 
						|
	const ConfigurationOption& GetOption(const std::string& option) { return m_options[option]; }
 | 
						|
 | 
						|
	// For updating option's values
 | 
						|
	void SetOptionf(std::string option, int index, float value);
 | 
						|
	void SetOptioni(std::string option, int index, s32 value);
 | 
						|
	void SetOptionb(std::string option, bool value);
 | 
						|
 | 
						|
private:
 | 
						|
	bool m_any_options_dirty;
 | 
						|
	std::string m_current_shader;
 | 
						|
	ConfigMap m_options;
 | 
						|
 | 
						|
	void LoadOptions(const std::string& code);
 | 
						|
	void LoadOptionsConfiguration();
 | 
						|
};
 | 
						|
 | 
						|
class PostProcessingShaderImplementation
 | 
						|
{
 | 
						|
public:
 | 
						|
	PostProcessingShaderImplementation();
 | 
						|
	virtual ~PostProcessingShaderImplementation();
 | 
						|
 | 
						|
	PostProcessingShaderConfiguration* GetConfig() { return &m_config; }
 | 
						|
 | 
						|
	// Should be implemented by the backends for backend specific code
 | 
						|
	virtual void BlitFromTexture(TargetRectangle src, TargetRectangle dst,
 | 
						|
	                             int src_texture, int src_width, int src_height, int layer = 0) = 0;
 | 
						|
	virtual void ApplyShader() = 0;
 | 
						|
 | 
						|
protected:
 | 
						|
	// Timer for determining our time value
 | 
						|
	Common::Timer m_timer;
 | 
						|
 | 
						|
	PostProcessingShaderConfiguration m_config;
 | 
						|
};
 |