From 9a47a870df619656e9092f2f77622e84e640307a Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Thu, 18 Feb 2016 15:57:34 +0100 Subject: First take on render API reorg, nw --- scripts/src/osd/modules.lua | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'scripts/src/osd/modules.lua') diff --git a/scripts/src/osd/modules.lua b/scripts/src/osd/modules.lua index ea70ca132de..3e18ee72050 100644 --- a/scripts/src/osd/modules.lua +++ b/scripts/src/osd/modules.lua @@ -103,6 +103,23 @@ function osdmodulesbuild() files { MAME_DIR .. "src/osd/modules/render/drawbgfx.cpp", MAME_DIR .. "src/osd/modules/render/binpacker.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/blendreader.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/cullreader.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/depthreader.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/effect.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/effectmanager.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/effectreader.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/pass.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/passreader.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/shadermanager.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/statereader.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/target.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/targetmanager.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/texture.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/texturemanager.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/uniform.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/uniformreader.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/writereader.cpp", } includedirs { MAME_DIR .. "3rdparty/bgfx/include", -- cgit v1.2.3-70-g09d2 From 09f03905fd7400f90b79e346f2f2d94d7c4ce789 Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Thu, 18 Feb 2016 18:11:42 +0100 Subject: More reshuffling, nw --- bgfx/chains/test.json | 98 ++++++++++++++++ scripts/src/osd/modules.lua | 5 +- src/osd/modules/osdwindow.h | 2 + src/osd/modules/render/bgfx/chainentry.cpp | 33 ++++++ src/osd/modules/render/bgfx/chainentry.h | 34 ++++++ src/osd/modules/render/bgfx/chainentryreader.cpp | 48 ++++++++ src/osd/modules/render/bgfx/chainentryreader.h | 22 ++++ src/osd/modules/render/bgfx/inputpair.cpp | 15 +++ src/osd/modules/render/bgfx/inputpair.h | 26 +++++ src/osd/modules/render/bgfx/pass.cpp | 33 ------ src/osd/modules/render/bgfx/pass.h | 32 ------ src/osd/modules/render/bgfx/passreader.cpp | 49 -------- src/osd/modules/render/bgfx/passreader.h | 22 ---- src/osd/modules/render/bgfx/slider.h | 40 +++++++ src/osd/modules/render/bgfx/sliderreader.h | 20 ++++ src/osd/modules/render/d3d/d3dhlsl.cpp | 2 +- src/osd/modules/render/drawbgfx.cpp | 14 +++ src/osd/modules/render/drawbgfx.h | 1 + src/osd/modules/render/drawd3d.h | 1 + src/osd/windows/video.cpp | 38 +++++- src/osd/windows/winmain.cpp | 140 ++++++++++++----------- src/osd/windows/winmain.h | 1 + 22 files changed, 465 insertions(+), 211 deletions(-) create mode 100644 bgfx/chains/test.json create mode 100644 src/osd/modules/render/bgfx/chainentry.cpp create mode 100644 src/osd/modules/render/bgfx/chainentry.h create mode 100644 src/osd/modules/render/bgfx/chainentryreader.cpp create mode 100644 src/osd/modules/render/bgfx/chainentryreader.h create mode 100644 src/osd/modules/render/bgfx/inputpair.cpp create mode 100644 src/osd/modules/render/bgfx/inputpair.h delete mode 100644 src/osd/modules/render/bgfx/pass.cpp delete mode 100644 src/osd/modules/render/bgfx/pass.h delete mode 100644 src/osd/modules/render/bgfx/passreader.cpp delete mode 100644 src/osd/modules/render/bgfx/passreader.h create mode 100644 src/osd/modules/render/bgfx/slider.h create mode 100644 src/osd/modules/render/bgfx/sliderreader.h (limited to 'scripts/src/osd/modules.lua') diff --git a/bgfx/chains/test.json b/bgfx/chains/test.json new file mode 100644 index 00000000000..0026802d2aa --- /dev/null +++ b/bgfx/chains/test.json @@ -0,0 +1,98 @@ +{ "name": "Test Shader Chain" + "author": "Ryan Holtz" + "sliders": [ + { "type": "bool", "name": "adjustments", "text": "Enable Adjustments", "default": false }, + { "type": "float", "name": "ratio_amount", "text": "Ratio Amount", "default": 0, "max": 1 }, + + { "type": "color", "name": "red_ratios", "text": "Red Amount", "default": [ 1, 0, 0 ]}, + { "type": "color", "name": "grn_ratios", "text": "Green Amount", "default": [ 0, 1, 0 ], "max": 1, "min": 0 }, + { "type": "color", "name": "blu_ratios", "text": "Blue Amount", "default": [ 0, 0, 1 ], "max": 1, "min": 0 }, + { "type": "color", "name": "tint": "text": "Tint", "default": [ 1, 1, 1 ], "max": 1, "min": 0 } + { "type": "color", "name": "phosphor", "text": "Phosphor Amount", "default": [ 0, 0, 0 ], "max": 1, "min": 0 }, + { "type": "vec2", "name": "shift", "text": "Frame Shift", "default": [ 0, 0 ], "max": 25, "min": -25 }, + ] + "parameters": [ + { "name": "alternating", "type": "frame_mask", "period": 2 } + ] + "targets": [ + { "name": "native", + "screen": true, + }, + { "name": "previous", + "screen": true, + "prescale": true + } + ] + "passes": [ + { "effect": "ratios", + "name": "Matrix Pass" + "disable_conditions": [ + { "type": "slider", "name": "adjustments", "value": false }, + { "type": "slider", "name": "ratio_amount", "value": 0 } + ], + "uniforms": [ + { "name": "u_ratio_amount", "slider": "ratio_amount" }, + { "name": "u_red_ratios", "slider": "red_ratios" }, + { "name": "u_grn_ratios", "slider": "grn_ratios" }, + { "name": "u_blu_ratios", "slider": "blu_ratios" } + ], + "input": [ + { "sampler": "s_tex", "texture": "screen" } + ], + "output": "native" + }, + { "effect": "tint", + "name": "Tint Pass" + "disable_conditions": [ + { "type": "slider", "name": "adjustments", "value": false } + ], + "uniforms": [ + { "name": "u_tint", "slider": "tint" }, + { "name": "u_shift", "slider": "shift" } + ], + "input": [ + { "sampler": "s_tex", "texture": "native" } + ], + "output": "native" + }, + { "effect": "phosphor" + "name": "Phosphor Decay", + "disable_conditions": [ + { "type": "slider", "name": "adjustments", "value": false }, + { "type": "slider", "name": "phosphor", "value": [ 0, 0, 0 ] } + ], + "uniforms": [ + { "name": "u_passthrough", "value": [ 0.0f ] }, + { "name": "u_phosphor", "slider": "phosphor" } + ], + "input": [ + { "sampler": "s_tex", "texture": "native" }, + { "sampler": "s_prev", "texture": "previous" } + ], + "output": "native" + }, + { "effect": "phosphor" + "name": "Phosphor Store", + "disable_conditions": [ + { "type": "slider", "name": "adjustments", "value": false }, + { "type": "slider", "name": "phosphor", "value": [ 0, 0, 0 ] } + ], + "uniforms": [ + { "name": "u_passthrough", "value": [ 1.0f ] }, + { "name": "u_phosphor", "slider": "phosphor" } + ], + "input": [ + { "sampler": "s_tex", "texture": "native" }, + { "sampler": "s_prev", "texture": "native" } + ], + "output": "previous" + }, + { "effect": "blit" + "name": "Final Blit", + "input": [ + { "sampler": "s_tex", "texture": "native" } + ], + "output": "backbuffer" + } + ] +} \ No newline at end of file diff --git a/scripts/src/osd/modules.lua b/scripts/src/osd/modules.lua index 3e18ee72050..bba8678ef9c 100644 --- a/scripts/src/osd/modules.lua +++ b/scripts/src/osd/modules.lua @@ -109,8 +109,9 @@ function osdmodulesbuild() MAME_DIR .. "src/osd/modules/render/bgfx/effect.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/effectmanager.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/effectreader.cpp", - MAME_DIR .. "src/osd/modules/render/bgfx/pass.cpp", - MAME_DIR .. "src/osd/modules/render/bgfx/passreader.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/chainentry.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/chainentryreader.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/inputpair.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/shadermanager.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/statereader.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/target.cpp", diff --git a/src/osd/modules/osdwindow.h b/src/osd/modules/osdwindow.h index 69f3675d4d0..10cbec5674f 100644 --- a/src/osd/modules/osdwindow.h +++ b/src/osd/modules/osdwindow.h @@ -10,6 +10,7 @@ #define __OSDWINDOW__ #include "emu.h" +#include "ui/ui.h" //============================================================ // TYPE DEFINITIONS @@ -221,6 +222,7 @@ public: virtual int init(running_machine &machine) = 0; virtual render_primitive_list *get_primitives() = 0; + virtual slider_state* get_slider_list() { return nullptr; } virtual int draw(const int update) = 0; virtual int xy_to_render_target(const int x, const int y, int *xt, int *yt) { return 0; }; virtual void save() { }; diff --git a/src/osd/modules/render/bgfx/chainentry.cpp b/src/osd/modules/render/bgfx/chainentry.cpp new file mode 100644 index 00000000000..7121d88cbe6 --- /dev/null +++ b/src/osd/modules/render/bgfx/chainentry.cpp @@ -0,0 +1,33 @@ +#include "emu.h" + +#include + +#include "effect.h" +#include "texture.h" +#include "target.h" +#include "chainentry.h" + +bgfx_chain_entry::bgfx_chain_entry(std::string name, bgfx_effect* effect, std::vector& inputs, bgfx_target* output) + : m_name(name) + , m_effect(effect) + , m_output(output) +{ + for (bgfx_input_pair input : inputs) + { + m_inputs.push_back(input); + } +} + +bgfx_chain_entry::~bgfx_chain_entry() +{ +} + +void bgfx_chain_entry::submit(render_primitive* prim, int view) +{ + for (bgfx_input_pair input : m_inputs) + { + input.bind(m_effect); + } + bgfx::setViewFrameBuffer(view, m_output->target()); + m_effect->submit(view); +} diff --git a/src/osd/modules/render/bgfx/chainentry.h b/src/osd/modules/render/bgfx/chainentry.h new file mode 100644 index 00000000000..1428ab8a6b2 --- /dev/null +++ b/src/osd/modules/render/bgfx/chainentry.h @@ -0,0 +1,34 @@ +#pragma once + +#ifndef __DRAWBGFX_CHAIN_ENTRY__ +#define __DRAWBGFX_CHAIN_ENTRY__ + +#include +#include + +#include "inputpair.h" + +class render_primitive; +class bgfx_effect; +class bgfx_texture; +class bgfx_target; + +class bgfx_chain_entry +{ +public: + bgfx_chain_entry(std::string name, bgfx_effect* effect, std::vector& inputs, bgfx_target* output); + ~bgfx_chain_entry(); + + void submit(render_primitive* prim, int view); + + // Getters + std::string name() const { return m_name; } + +private: + std::string m_name; + bgfx_effect* m_effect; + std::vector m_inputs; + bgfx_target* m_output; +}; + +#endif // __DRAWBGFX_CHAIN_ENTRY__ \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/chainentryreader.cpp b/src/osd/modules/render/bgfx/chainentryreader.cpp new file mode 100644 index 00000000000..a778e6bdbee --- /dev/null +++ b/src/osd/modules/render/bgfx/chainentryreader.cpp @@ -0,0 +1,48 @@ +#include + +#include "emu.h" + +#include "chainentryreader.h" + +#include "texturemanager.h" +#include "targetmanager.h" +#include "effectmanager.h" +#include "chainentry.h" +#include "inputpair.h" + +bgfx_chain_entry* chain_entry_reader::read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects) +{ + validate_parameters(value); + + bgfx_effect* effect = effects.effect(value["effect"].GetString()); + + std::vector inputs; + if (value.HasMember("input")) + { + const Value& input_array = value["input"]; + for (UINT32 i = 0; i < input_array.Size(); i++) + { + std::string sampler = input_array[i]["sampler"].GetString(); + std::string texture = input_array[i]["texture"].GetString(); + inputs.push_back(bgfx_input_pair(i, sampler, textures.texture(texture))); + } + } + + bgfx_target* output = targets.target(value["output"].GetString()); + + return new bgfx_chain_entry(value["name"].GetString(), effect, inputs, output); +} + +void chain_entry_reader::validate_parameters(const Value& value) +{ + assert(value.HasMember("effect")); + assert(value["effect"].IsString()); + if (value.HasMember("name")) + { + assert(value["name"].IsString()); + } + assert(value.HasMember("shader")); + assert(value["shader"].IsString()); + assert(value.HasMember("output")); + assert(value["output"].IsString()); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/chainentryreader.h b/src/osd/modules/render/bgfx/chainentryreader.h new file mode 100644 index 00000000000..52517365004 --- /dev/null +++ b/src/osd/modules/render/bgfx/chainentryreader.h @@ -0,0 +1,22 @@ +#pragma once + +#ifndef __DRAWBGFX_CHAIN_ENTRY_READER__ +#define __DRAWBGFX_CHAIN_ENTRY_READER__ + +#include "statereader.h" + +class bgfx_chain_entry; +class texture_manager; +class target_manager; +class effect_manager; + +class chain_entry_reader : public state_reader +{ +public: + static bgfx_chain_entry* read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects); + +private: + static void validate_parameters(const Value& value); +}; + +#endif // __DRAWBGFX_CHAIN_ENTRY_READER__ \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/inputpair.cpp b/src/osd/modules/render/bgfx/inputpair.cpp new file mode 100644 index 00000000000..0077180c0de --- /dev/null +++ b/src/osd/modules/render/bgfx/inputpair.cpp @@ -0,0 +1,15 @@ +#include "inputpair.h" +#include "texture.h" +#include "effect.h" + +bgfx_input_pair::bgfx_input_pair(int index, std::string sampler, bgfx_texture* texture) + : m_index(index) + , m_sampler(sampler) + , m_texture(texture) +{ +} + +void bgfx_input_pair::bind(bgfx_effect *effect) +{ + bgfx::setTexture(m_index, effect->uniform(m_sampler)->handle(), m_texture->handle()); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/inputpair.h b/src/osd/modules/render/bgfx/inputpair.h new file mode 100644 index 00000000000..74aedc11d0d --- /dev/null +++ b/src/osd/modules/render/bgfx/inputpair.h @@ -0,0 +1,26 @@ +#pragma once + +#ifndef __DRAWBGFX_INPUT_PAIR__ +#define __DRAWBGFX_INPUT_PAIR__ + +#include + +#include + +class bgfx_effect; +class bgfx_texture; + +class bgfx_input_pair +{ +public: + bgfx_input_pair(int index, std::string sampler, bgfx_texture* texture); + + void bind(bgfx_effect *effect); + +private: + int m_index; + std::string m_sampler; + bgfx_texture* m_texture; +}; + +#endif // __DRAWBGFX_INPUT_PAIR__ \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/pass.cpp b/src/osd/modules/render/bgfx/pass.cpp deleted file mode 100644 index 246399eeebd..00000000000 --- a/src/osd/modules/render/bgfx/pass.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "emu.h" - -#include - -#include "effect.h" -#include "texture.h" -#include "target.h" -#include "pass.h" - -bgfx_pass::bgfx_pass(std::string name, bgfx_effect* effect, std::vector& inputs, bgfx_target* output) - : m_name(name) - , m_effect(effect) - , m_output(output) -{ - for (bgfx_texture* input : inputs) - { - m_inputs.push_back(input); - } -} - -bgfx_pass::~bgfx_pass() -{ -} - -void bgfx_pass::submit(render_primitive* prim, int view) -{ - for (int index = 0; index < m_inputs.size(); index++) - { - bgfx::setTexture(index, m_effect->uniform(m_inputs[index]->name())->handle(), m_inputs[index]->handle()); - } - bgfx::setViewFrameBuffer(view, m_output->target()); - m_effect->submit(view); -} diff --git a/src/osd/modules/render/bgfx/pass.h b/src/osd/modules/render/bgfx/pass.h deleted file mode 100644 index 30c0b88a991..00000000000 --- a/src/osd/modules/render/bgfx/pass.h +++ /dev/null @@ -1,32 +0,0 @@ -#pragma once - -#ifndef __DRAWBGFX_PASS__ -#define __DRAWBGFX_PASS__ - -#include -#include - -class render_primitive; -class bgfx_effect; -class bgfx_texture; -class bgfx_target; - -class bgfx_pass -{ -public: - bgfx_pass(std::string name, bgfx_effect* effect, std::vector& inputs, bgfx_target* output); - ~bgfx_pass(); - - void submit(render_primitive* prim, int view); - - // Getters - std::string name() const { return m_name; } - -private: - std::string m_name; - bgfx_effect* m_effect; - std::vector m_inputs; - bgfx_target* m_output; -}; - -#endif // __DRAWBGFX_PASS__ \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/passreader.cpp b/src/osd/modules/render/bgfx/passreader.cpp deleted file mode 100644 index 723a3f1f3f3..00000000000 --- a/src/osd/modules/render/bgfx/passreader.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include - -#include "emu.h" - -#include "passreader.h" - -#include "texturemanager.h" -#include "targetmanager.h" -#include "effectmanager.h" -#include "pass.h" - -bgfx_pass* pass_reader::read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects) -{ - validate_parameters(value); - - bgfx_effect* effect = effects.effect(value["effect"].GetString()); - - std::vector inputs; - if (value.HasMember("input")) - { - const Value& input_array = value["input"]; - for (UINT32 i = 0; i < input_array.Size(); i++) - { - inputs.push_back(textures.texture(input_array[i].GetString())); - } - } - - bgfx_target* output = targets.target(value["output"].GetString()); - - return new bgfx_pass(value["name"].GetString(), effect, inputs, output); -} - -void pass_reader::validate_parameters(const Value& value) -{ - assert(value.HasMember("name")); - assert(value["name"].IsString()); - assert(value.HasMember("output")); - assert(value["output"].IsString()); - assert(value.HasMember("effect")); - assert(value["effect"].IsString()); - if (value.HasMember("input")) - { - const Value& input_array = value["input"]; - for (int i = 0; i < input_array.Size(); i++) - { - assert(uniform_array[i].IsString()); - } - } -} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/passreader.h b/src/osd/modules/render/bgfx/passreader.h deleted file mode 100644 index dfda1323eac..00000000000 --- a/src/osd/modules/render/bgfx/passreader.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#ifndef __DRAWBGFX_PASS_READER__ -#define __DRAWBGFX_PASS_READER__ - -#include "statereader.h" - -class bgfx_pass; -class texture_manager; -class target_manager; -class effect_manager; - -class pass_reader : public state_reader -{ -public: - static bgfx_pass* read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects); - -private: - static void validate_parameters(const Value& value); -}; - -#endif // __DRAWBGFX_PASS_READER__ \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/slider.h b/src/osd/modules/render/bgfx/slider.h new file mode 100644 index 00000000000..d0bcc97aaf0 --- /dev/null +++ b/src/osd/modules/render/bgfx/slider.h @@ -0,0 +1,40 @@ +#pragma once + +#ifndef __DRAWBGFX_SLIDER__ +#define __DRAWBGFX_SLIDER__ + +#include + +#include +#include +#include + +#include "uniform.h" + +class bgfx_slider +{ +public: + bgfx_slider(slider_type type, std::string name, std::string description, void *defaults, void *min, void *max); + ~bgfx_slider(); + + enum slider_type + { + SLIDER_BOOL, + SLIDER_FLOAT, + SLIDER_INT, + SLIDER_COLOR, + SLIDER_VEC2 + }; + + // Getters + bgfx_uniform* uniform(std::string name); + bgfx::ProgramHandle get_program() const { return m_program_handle; } + +protected: + std::string m_name; + void * m_data; + void * m_min; + void * m_max; +}; + +#endif // __DRAWBGFX_SLIDER__ \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/sliderreader.h b/src/osd/modules/render/bgfx/sliderreader.h new file mode 100644 index 00000000000..c7e8c315dfe --- /dev/null +++ b/src/osd/modules/render/bgfx/sliderreader.h @@ -0,0 +1,20 @@ +#pragma once + +#ifndef __DRAWBGFX_SLIDER_READER__ +#define __DRAWBGFX_SLIDER_READER__ + +#include "statereader.h" + +class bgfx_slider; +class shader_manager; + +class slider_reader : public state_reader +{ +public: + static bgfx_slider* read_from_value(const Value& value); + +private: + static void validate_parameters(const Value& value); +}; + +#endif // __DRAWBGFX_SLIDER_READER__ \ No newline at end of file diff --git a/src/osd/modules/render/d3d/d3dhlsl.cpp b/src/osd/modules/render/d3d/d3dhlsl.cpp index 621db1a46ff..d7db252180c 100644 --- a/src/osd/modules/render/d3d/d3dhlsl.cpp +++ b/src/osd/modules/render/d3d/d3dhlsl.cpp @@ -3525,7 +3525,7 @@ ULONG effect::release() // get_slider_list //============================================================ -slider_state *windows_osd_interface::get_slider_list() +slider_state *renderer_d3d9::get_slider_list() { return g_slider_list; } diff --git a/src/osd/modules/render/drawbgfx.cpp b/src/osd/modules/render/drawbgfx.cpp index 73c4b336434..8ae5f7933c6 100644 --- a/src/osd/modules/render/drawbgfx.cpp +++ b/src/osd/modules/render/drawbgfx.cpp @@ -124,15 +124,24 @@ int renderer_bgfx::create() m_effects = new effect_manager(*m_shaders); // Create program from shaders. + printf("1\n"); fflush(stdout); m_gui_effect[0] = m_effects->effect("gui_opaque"); + printf("2\n"); fflush(stdout); m_gui_effect[1] = m_effects->effect("gui_blend"); + printf("3\n"); fflush(stdout); m_gui_effect[2] = m_effects->effect("gui_multiply"); + printf("4\n"); fflush(stdout); m_gui_effect[3] = m_effects->effect("gui_add"); + printf("5\n"); fflush(stdout); m_screen_effect[0] = m_effects->effect("screen_opaque"); + printf("6\n"); fflush(stdout); m_screen_effect[1] = m_effects->effect("screen_blend"); + printf("7\n"); fflush(stdout); m_screen_effect[2] = m_effects->effect("screen_multiply"); + printf("8\n"); fflush(stdout); m_screen_effect[3] = m_effects->effect("screen_add"); + printf("9\n"); fflush(stdout); uint32_t flags = BGFX_TEXTURE_U_CLAMP | BGFX_TEXTURE_V_CLAMP | BGFX_TEXTURE_MIN_POINT | BGFX_TEXTURE_MAG_POINT | BGFX_TEXTURE_MIP_POINT; m_texture_cache = m_textures->create_texture("#cache", bgfx::TextureFormat::RGBA8, CACHE_SIZE, CACHE_SIZE, nullptr, flags); @@ -1078,3 +1087,8 @@ void renderer_bgfx::allocate_buffer(render_primitive *prim, UINT32 blend, bgfx:: bgfx::allocTransientVertexBuffer(buffer, vertices, ScreenVertex::ms_decl); } } + +slider_state* renderer_bgfx::get_slider_list() +{ + return nullptr; +} \ No newline at end of file diff --git a/src/osd/modules/render/drawbgfx.h b/src/osd/modules/render/drawbgfx.h index 67064b686f8..524d7ab41ae 100644 --- a/src/osd/modules/render/drawbgfx.h +++ b/src/osd/modules/render/drawbgfx.h @@ -28,6 +28,7 @@ public: virtual ~renderer_bgfx(); virtual int create() override; + virtual slider_state* get_slider_list() override; virtual int init(running_machine &machine) override { return 0; } virtual int draw(const int update) override; #ifdef OSD_SDL diff --git a/src/osd/modules/render/drawd3d.h b/src/osd/modules/render/drawd3d.h index ac7195db8d7..8ddb8acef54 100644 --- a/src/osd/modules/render/drawd3d.h +++ b/src/osd/modules/render/drawd3d.h @@ -42,6 +42,7 @@ public: virtual ~renderer_d3d9(); virtual int create() override; + virtual slider_state* get_slider_list() override; virtual int init(running_machine &machine) override; virtual render_primitive_list *get_primitives() override; virtual int draw(const int update) override; diff --git a/src/osd/windows/video.cpp b/src/osd/windows/video.cpp index c814310fb29..44106621816 100644 --- a/src/osd/windows/video.cpp +++ b/src/osd/windows/video.cpp @@ -12,6 +12,7 @@ // MAME headers #include "emu.h" +#include "ui/ui.h" #include "emuopts.h" #include "render.h" #include "uiinput.h" @@ -66,8 +67,6 @@ static osd_window_config windows[MAX_WINDOWS]; // configuration data pe bool windows_osd_interface::video_init() { - int index; - // extract data from the options extract_video_config(); @@ -79,14 +78,47 @@ bool windows_osd_interface::video_init() // create the windows windows_options &options = downcast(machine().options()); - for (index = 0; index < video_config.numscreens; index++) + for (int index = 0; index < video_config.numscreens; index++) + { win_window_info::create(machine(), index, osd_monitor_info::pick_monitor(options, index), &windows[index]); + } + + m_sliders = nullptr; + slider_state *curr = m_sliders; + for (win_window_info *info = win_window_list; info != nullptr; info = info->m_next) + { + slider_state *window_sliders = info->m_renderer->get_slider_list(); + if (window_sliders != nullptr) + { + if (m_sliders == nullptr) + { + m_sliders = curr = window_sliders; + } + else + { + while (curr->next != nullptr) + { + curr = curr->next; + } + curr->next = window_sliders; + } + } + } + if (video_config.mode != VIDEO_MODE_NONE) SetForegroundWindow(win_window_list->m_hwnd); return true; } +//============================================================ +// get_slider_list +//============================================================ + +slider_state *windows_osd_interface::get_slider_list() +{ + return m_sliders; +} //============================================================ // video_exit diff --git a/src/osd/windows/winmain.cpp b/src/osd/windows/winmain.cpp index cfa0a4fb0b7..5a00fe13706 100644 --- a/src/osd/windows/winmain.cpp +++ b/src/osd/windows/winmain.cpp @@ -58,15 +58,15 @@ class dynamic_bind public: // constructor which looks up the function dynamic_bind(const TCHAR *dll, const char *symbol) - : m_function(NULL) + : m_function(nullptr) { HMODULE module = LoadLibrary(dll); - if (module != NULL) + if (module != nullptr) m_function = reinterpret_cast<_FunctionPtr>(GetProcAddress(module, symbol)); } - // bool to test if the function is NULL or not - operator bool() const { return (m_function != NULL); } + // bool to test if the function is nullptr or not + operator bool() const { return (m_function != nullptr); } // dereference to get the underlying pointer _FunctionPtr operator *() const { return m_function; } @@ -132,14 +132,14 @@ private: bool parse_sym_line(const char *line, FPTR &address, std::string &symbol); bool parse_map_line(const char *line, FPTR &address, std::string &symbol); void scan_cache_for_address(FPTR address); - void format_symbol(const char *name, UINT32 displacement, const char *filename = NULL, int linenumber = 0); + void format_symbol(const char *name, UINT32 displacement, const char *filename = nullptr, int linenumber = 0); static FPTR get_text_section_base(); struct cache_entry { cache_entry(FPTR address, const char *symbol) : - m_next(NULL), m_address(address), m_name(symbol) { } + m_next(nullptr), m_address(address), m_name(symbol) { } cache_entry *next() const { return m_next; } cache_entry * m_next; @@ -206,11 +206,11 @@ public: char buffer[1024]; // if we are in fullscreen mode, go to windowed mode - if ((video_config.windowed == 0) && (win_window_list != NULL)) + if ((video_config.windowed == 0) && (win_window_list != nullptr)) winwindow_toggle_full_screen(); vsnprintf(buffer, ARRAY_LENGTH(buffer), msg, args); - win_message_box_utf8(win_window_list ? win_window_list->m_hwnd : NULL, buffer, emulator_info::get_appname(), MB_OK); + win_message_box_utf8(win_window_list ? win_window_list->m_hwnd : nullptr, buffer, emulator_info::get_appname(), MB_OK); } else chain_output(channel, msg, args); @@ -242,8 +242,8 @@ static running_machine *g_current_machine; static int timeresult = !TIMERR_NOERROR; static TIMECAPS timecaps; -static sampling_profiler *profiler = NULL; -static symbol_manager *symbols = NULL; +static sampling_profiler *profiler = nullptr; +static symbol_manager *symbols = nullptr; bool stack_walker::s_initialized = false; @@ -267,25 +267,25 @@ static LONG WINAPI exception_filter(struct _EXCEPTION_POINTERS *info); const options_entry windows_options::s_option_entries[] = { // performance options - { NULL, NULL, OPTION_HEADER, "WINDOWS PERFORMANCE OPTIONS" }, + { nullptr, nullptr, OPTION_HEADER, "WINDOWS PERFORMANCE OPTIONS" }, { WINOPTION_PRIORITY "(-15-1)", "0", OPTION_INTEGER, "thread priority for the main game thread; range from -15 to 1" }, { WINOPTION_PROFILE, "0", OPTION_INTEGER, "enables profiling, specifying the stack depth to track" }, // video options - { NULL, NULL, OPTION_HEADER, "WINDOWS VIDEO OPTIONS" }, + { nullptr, nullptr, OPTION_HEADER, "WINDOWS VIDEO OPTIONS" }, { WINOPTION_MENU, "0", OPTION_BOOLEAN, "enables menu bar if available by UI implementation" }, // DirectDraw-specific options - { NULL, NULL, OPTION_HEADER, "DIRECTDRAW-SPECIFIC OPTIONS" }, + { nullptr, nullptr, OPTION_HEADER, "DIRECTDRAW-SPECIFIC OPTIONS" }, { WINOPTION_HWSTRETCH ";hws", "1", OPTION_BOOLEAN, "enables hardware stretching" }, // post-processing options - { NULL, NULL, OPTION_HEADER, "DIRECT3D POST-PROCESSING OPTIONS" }, - { WINOPTION_HLSL_ENABLE";hlsl", "0", OPTION_BOOLEAN, "enables HLSL post-processing (PS3.0 required)" }, - { WINOPTION_HLSLPATH, "hlsl", OPTION_STRING, "path to hlsl files" }, - { WINOPTION_HLSL_PRESCALE_X, "0", OPTION_INTEGER, "HLSL pre-scale override factor for X (0 for auto)" }, - { WINOPTION_HLSL_PRESCALE_Y, "0", OPTION_INTEGER, "HLSL pre-scale override factor for Y (0 for auto)" }, - { WINOPTION_HLSL_WRITE, NULL, OPTION_STRING, "enables HLSL AVI writing (huge disk bandwidth suggested)" }, + { nullptr, nullptr, OPTION_HEADER, "DIRECT3D POST-PROCESSING OPTIONS" }, + { WINOPTION_HLSL_ENABLE";hlsl", "0", OPTION_BOOLEAN, "enables HLSL post-processing (PS3.0 required)" }, + { WINOPTION_HLSLPATH, "hlsl", OPTION_STRING, "path to hlsl files" }, + { WINOPTION_HLSL_PRESCALE_X, "0", OPTION_INTEGER, "HLSL pre-scale override factor for X (0 for auto)" }, + { WINOPTION_HLSL_PRESCALE_Y, "0", OPTION_INTEGER, "HLSL pre-scale override factor for Y (0 for auto)" }, + { WINOPTION_HLSL_WRITE, nullptr, OPTION_STRING, "enables HLSL AVI writing (huge disk bandwidth suggested)" }, { WINOPTION_HLSL_SNAP_WIDTH, "2048", OPTION_STRING, "HLSL upscaled-snapshot width" }, { WINOPTION_HLSL_SNAP_HEIGHT, "1536", OPTION_STRING, "HLSL upscaled-snapshot height" }, { WINOPTION_SHADOW_MASK_TILE_MODE, "0", OPTION_INTEGER, "shadow mask tile mode (0 for screen based, 1 for source based)" }, @@ -326,7 +326,7 @@ const options_entry windows_options::s_option_entries[] = { WINOPTION_FLOOR";fs_floor", "0.05,0.05,0.05", OPTION_STRING, "signal floor level" }, { WINOPTION_PHOSPHOR";fs_phosphor", "0.4,0.4,0.4", OPTION_STRING, "phosphorescence decay rate (0.0 is instant, 1.0 is forever)" }, /* NTSC simulation below this line */ - { NULL, NULL, OPTION_HEADER, "NTSC POST-PROCESSING OPTIONS" }, + { nullptr, nullptr, OPTION_HEADER, "NTSC POST-PROCESSING OPTIONS" }, { WINOPTION_YIQ_ENABLE";yiq", "0", OPTION_BOOLEAN, "enables YIQ-space HLSL post-processing" }, { WINOPTION_YIQ_JITTER";yiqj", "0.0", OPTION_FLOAT, "Jitter for the NTSC signal processing" }, { WINOPTION_YIQ_CCVALUE";yiqcc", "3.57954545", OPTION_FLOAT, "Color Carrier frequency for NTSC signal processing" }, @@ -341,11 +341,11 @@ const options_entry windows_options::s_option_entries[] = { WINOPTION_YIQ_SCAN_TIME";yiqsc", "52.6", OPTION_FLOAT, "Horizontal scanline duration for NTSC signal processing (in usec)" }, { WINOPTION_YIQ_PHASE_COUNT";yiqp", "2", OPTION_INTEGER, "Phase Count value for NTSC signal processing" }, /* Vector simulation below this line */ - { NULL, NULL, OPTION_HEADER, "VECTOR POST-PROCESSING OPTIONS" }, + { nullptr, nullptr, OPTION_HEADER, "VECTOR POST-PROCESSING OPTIONS" }, { WINOPTION_VECTOR_LENGTH_SCALE";veclength", "0.5", OPTION_FLOAT, "How much length affects vector fade" }, { WINOPTION_VECTOR_LENGTH_RATIO";vecsize", "500.0", OPTION_FLOAT, "Vector fade length (4.0 - vectors fade the most at and above 4 pixels, etc.)" }, /* Bloom below this line */ - { NULL, NULL, OPTION_HEADER, "BLOOM POST-PROCESSING OPTIONS" }, + { nullptr, nullptr, OPTION_HEADER, "BLOOM POST-PROCESSING OPTIONS" }, { WINOPTION_BLOOM_BLEND_MODE, "0", OPTION_INTEGER, "bloom blend mode (0 for addition, 1 for darken)" }, { WINOPTION_BLOOM_SCALE, "0.25", OPTION_FLOAT, "Intensity factor for bloom" }, { WINOPTION_BLOOM_OVERDRIVE, "1.0,1.0,1.0", OPTION_STRING, "Overdrive factor for bloom" }, @@ -362,18 +362,18 @@ const options_entry windows_options::s_option_entries[] = { WINOPTION_BLOOM_LEVEL10_WEIGHT, "0.01", OPTION_FLOAT, "Bloom level 10 (1x1 target) weight" }, // full screen options - { NULL, NULL, OPTION_HEADER, "FULL SCREEN OPTIONS" }, + { nullptr, nullptr, OPTION_HEADER, "FULL SCREEN OPTIONS" }, { WINOPTION_TRIPLEBUFFER ";tb", "0", OPTION_BOOLEAN, "enables triple buffering" }, { WINOPTION_FULLSCREENBRIGHTNESS ";fsb(0.1-2.0)", "1.0", OPTION_FLOAT, "brightness value in full screen mode" }, { WINOPTION_FULLSCREENCONTRAST ";fsc(0.1-2.0)", "1.0", OPTION_FLOAT, "contrast value in full screen mode" }, { WINOPTION_FULLSCREENGAMMA ";fsg(0.1-3.0)", "1.0", OPTION_FLOAT, "gamma value in full screen mode" }, // input options - { NULL, NULL, OPTION_HEADER, "INPUT DEVICE OPTIONS" }, + { nullptr, nullptr, OPTION_HEADER, "INPUT DEVICE OPTIONS" }, { WINOPTION_GLOBAL_INPUTS ";global_inputs", "0", OPTION_BOOLEAN, "enables global inputs" }, { WINOPTION_DUAL_LIGHTGUN ";dual", "0", OPTION_BOOLEAN, "enables dual lightgun input" }, - { NULL } + { nullptr } }; //************************************************************************** @@ -389,9 +389,9 @@ int main(int argc, char *argv[]) { // use small output buffers on non-TTYs (i.e. pipes) if (!isatty(fileno(stdout))) - setvbuf(stdout, (char *) NULL, _IOFBF, 64); + setvbuf(stdout, (char *) nullptr, _IOFBF, 64); if (!isatty(fileno(stderr))) - setvbuf(stderr, (char *) NULL, _IOFBF, 64); + setvbuf(stderr, (char *) nullptr, _IOFBF, 64); // initialize common controls InitCommonControls(); @@ -434,7 +434,7 @@ int main(int argc, char *argv[]) osd_output::pop(&winerror); } // free symbols - symbols = NULL; + symbols = nullptr; return result; } @@ -469,7 +469,7 @@ static BOOL WINAPI control_handler(DWORD type) // if we don't have a machine yet, or if we are handling ctrl+c/ctrl+break, // just terminate hard, without throwing or handling any atexit stuff - if (g_current_machine == NULL || type == CTRL_C_EVENT || type == CTRL_BREAK_EVENT) + if (g_current_machine == nullptr || type == CTRL_C_EVENT || type == CTRL_BREAK_EVENT) { fprintf(stderr, ", exiting\n"); TerminateProcess(GetCurrentProcess(), MAMERR_FATALERROR); @@ -505,7 +505,9 @@ static void output_oslog(const running_machine &machine, const char *buffer) //============================================================ windows_osd_interface::windows_osd_interface(windows_options &options) -: osd_common_t(options), m_options(options) + : osd_common_t(options) + , m_options(options) + , m_sliders(nullptr) { } @@ -525,10 +527,10 @@ windows_osd_interface::~windows_osd_interface() void windows_osd_interface::video_register() { - video_options_add("gdi", NULL); - video_options_add("d3d", NULL); - video_options_add("bgfx", NULL); - //video_options_add("auto", NULL); // making d3d video default one + video_options_add("gdi", nullptr); + video_options_add("d3d", nullptr); + video_options_add("bgfx", nullptr); + //video_options_add("auto", nullptr); // making d3d video default one } //============================================================ @@ -589,7 +591,7 @@ void windows_osd_interface::init(running_machine &machine) // notify listeners of screen configuration std::string tempstring; - for (win_window_info *info = win_window_list; info != NULL; info = info->m_next) + for (win_window_info *info = win_window_list; info != nullptr; info = info->m_next) { strprintf(tempstring, "Orientation(%s)", info->m_monitor->devicename()); machine.output().set_value(tempstring.c_str(), info->m_targetorient); @@ -609,12 +611,12 @@ void windows_osd_interface::init(running_machine &machine) int watchdog = options.watchdog(); if (watchdog != 0) { - watchdog_reset_event = CreateEvent(NULL, FALSE, FALSE, NULL); - assert_always(watchdog_reset_event != NULL, "Failed to create watchdog reset event"); - watchdog_exit_event = CreateEvent(NULL, TRUE, FALSE, NULL); - assert_always(watchdog_exit_event != NULL, "Failed to create watchdog exit event"); - watchdog_thread = CreateThread(NULL, 0, watchdog_thread_entry, (LPVOID)(FPTR)watchdog, 0, NULL); - assert_always(watchdog_thread != NULL, "Failed to create watchdog thread"); + watchdog_reset_event = CreateEvent(nullptr, FALSE, FALSE, nullptr); + assert_always(watchdog_reset_event != nullptr, "Failed to create watchdog reset event"); + watchdog_exit_event = CreateEvent(nullptr, TRUE, FALSE, nullptr); + assert_always(watchdog_exit_event != nullptr, "Failed to create watchdog exit event"); + watchdog_thread = CreateThread(nullptr, 0, watchdog_thread_entry, (LPVOID)(FPTR)watchdog, 0, nullptr); + assert_always(watchdog_thread != nullptr, "Failed to create watchdog thread"); } // create and start the profiler @@ -639,7 +641,7 @@ void windows_osd_interface::init(running_machine &machine) void windows_osd_interface::osd_exit() { // no longer have a machine - g_current_machine = NULL; + g_current_machine = nullptr; // cleanup sockets win_cleanup_sockets(); @@ -647,20 +649,20 @@ void windows_osd_interface::osd_exit() osd_common_t::osd_exit(); // take down the watchdog thread if it exists - if (watchdog_thread != NULL) + if (watchdog_thread != nullptr) { SetEvent(watchdog_exit_event); WaitForSingleObject(watchdog_thread, INFINITE); CloseHandle(watchdog_reset_event); CloseHandle(watchdog_exit_event); CloseHandle(watchdog_thread); - watchdog_reset_event = NULL; - watchdog_exit_event = NULL; - watchdog_thread = NULL; + watchdog_reset_event = nullptr; + watchdog_exit_event = nullptr; + watchdog_thread = nullptr; } // stop the profiler - if (profiler != NULL) + if (profiler != nullptr) { profiler->stop(); profiler->print_results(*symbols); @@ -688,7 +690,7 @@ void winmain_dump_stack() // walk the stack while (walker.unwind()) - fprintf(stderr, " %p: %p%s\n", (void *)walker.frame(), (void *)walker.ip(), (symbols == NULL) ? "" : symbols->symbol_for_address(walker.ip())); + fprintf(stderr, " %p: %p%s\n", (void *)walker.frame(), (void *)walker.ip(), (symbols == nullptr) ? "" : symbols->symbol_for_address(walker.ip())); } @@ -753,7 +755,7 @@ static DWORD WINAPI watchdog_thread_entry(LPVOID lpParameter) void winmain_watchdog_ping(void) { // if we have a watchdog, reset it - if (watchdog_reset_event != NULL) + if (watchdog_reset_event != nullptr) SetEvent(watchdog_reset_event); } @@ -866,7 +868,7 @@ static LONG WINAPI exception_filter(struct _EXCEPTION_POINTERS *info) // walk the stack while (walker.unwind()) - fprintf(stderr, " %p: %p%s\n", (void *)walker.frame(), (void *)walker.ip(), (symbols == NULL) ? "" : symbols->symbol_for_address(walker.ip())); + fprintf(stderr, " %p: %p%s\n", (void *)walker.frame(), (void *)walker.ip(), (symbols == nullptr) ? "" : symbols->symbol_for_address(walker.ip())); // flush stderr, so the data is actually written when output is being redirected fflush(stderr); @@ -901,7 +903,7 @@ stack_walker::stack_walker() // initialize the symbols if (!s_initialized && m_sym_initialize && m_stack_walk_64 && m_sym_function_table_access_64 && m_sym_get_module_base_64) { - (*m_sym_initialize)(m_process, NULL, TRUE); + (*m_sym_initialize)(m_process, nullptr, TRUE); s_initialized = true; } } @@ -975,9 +977,9 @@ bool stack_walker::unwind() if (s_initialized) { #ifdef PTR64 - return (*m_stack_walk_64)(IMAGE_FILE_MACHINE_AMD64, m_process, m_thread, &m_stackframe, &m_context, NULL, *m_sym_function_table_access_64, *m_sym_get_module_base_64, NULL); + return (*m_stack_walk_64)(IMAGE_FILE_MACHINE_AMD64, m_process, m_thread, &m_stackframe, &m_context, nullptr, *m_sym_function_table_access_64, *m_sym_get_module_base_64, nullptr); #else - return (*m_stack_walk_64)(IMAGE_FILE_MACHINE_I386, m_process, m_thread, &m_stackframe, &m_context, NULL, *m_sym_function_table_access_64, *m_sym_get_module_base_64, NULL); + return (*m_stack_walk_64)(IMAGE_FILE_MACHINE_I386, m_process, m_thread, &m_stackframe, &m_context, nullptr, *m_sym_function_table_access_64, *m_sym_get_module_base_64, nullptr); #endif } @@ -1056,7 +1058,7 @@ const char *symbol_manager::symbol_for_address(FPTR address) if (!query_system_for_address(address)) { // if that fails, scan the cache if we have one - if (m_cache.first() != NULL) + if (m_cache.first() != nullptr) scan_cache_for_address(address); // or else try to open a sym/map file and find it there @@ -1113,20 +1115,20 @@ bool symbol_manager::query_system_for_address(FPTR address) void symbol_manager::scan_file_for_address(FPTR address, bool create_cache) { bool is_symfile = false; - FILE *srcfile = NULL; + FILE *srcfile = nullptr; #ifdef __GNUC__ // see if we have a symbol file (gcc only) srcfile = fopen(m_symfile.c_str(), "r"); - is_symfile = (srcfile != NULL); + is_symfile = (srcfile != nullptr); #endif // if not, see if we have a map file - if (srcfile == NULL) + if (srcfile == nullptr) srcfile = fopen(m_mapfile.c_str(), "r"); // if not, fail - if (srcfile == NULL) + if (srcfile == nullptr) return; // reset the best info @@ -1179,7 +1181,7 @@ void symbol_manager::scan_cache_for_address(FPTR address) FPTR best_addr = 0; // walk the cache, looking for valid entries - for (cache_entry *entry = m_cache.first(); entry != NULL; entry = entry->next()) + for (cache_entry *entry = m_cache.first(); entry != nullptr; entry = entry->next()) // if this is the best one so far, remember it if (entry->m_address <= address && entry->m_address > best_addr) @@ -1212,7 +1214,7 @@ bool symbol_manager::parse_sym_line(const char *line, FPTR &address, std::string // first look for a (ty) entry const char *type = strstr(line, "(ty 20)"); - if (type == NULL) + if (type == nullptr) return false; // scan forward in the line to find the address @@ -1299,7 +1301,7 @@ void symbol_manager::format_symbol(const char *name, UINT32 displacement, const strcatprintf(m_buffer, "+0x%04x", (UINT32)displacement); // append file/line if present - if (filename != NULL) + if (filename != nullptr) strcatprintf(m_buffer, ", %s:%d", filename, linenumber); // close up the string @@ -1319,18 +1321,18 @@ FPTR symbol_manager::get_text_section_base() // start with the image base PVOID base = reinterpret_cast(GetModuleHandleUni()); - assert(base != NULL); + assert(base != nullptr); // make sure we have the functions we need if (image_nt_header && image_rva_to_section) { // get the NT header PIMAGE_NT_HEADERS headers = (*image_nt_header)(base); - assert(headers != NULL); + assert(headers != nullptr); // look ourself up (assuming we are in the .text section) PIMAGE_SECTION_HEADER section = (*image_rva_to_section)(headers, base, reinterpret_cast(get_text_section_base) - reinterpret_cast(base)); - if (section != NULL) + if (section != nullptr) return reinterpret_cast(base) + section->VirtualAddress; } @@ -1349,8 +1351,8 @@ FPTR symbol_manager::get_text_section_base() //------------------------------------------------- sampling_profiler::sampling_profiler(UINT32 max_seconds, UINT8 stack_depth = 0) - : m_target_thread(NULL), - m_thread(NULL), + : m_target_thread(nullptr), + m_thread(nullptr), m_thread_id(0), m_thread_exit(false), m_stack_depth(stack_depth), @@ -1386,8 +1388,8 @@ void sampling_profiler::start() m_thread_exit = false; // start the thread - m_thread = CreateThread(NULL, 0, thread_entry, (LPVOID)this, 0, &m_thread_id); - assert_always(m_thread != NULL, "Failed to create profiler thread\n"); + m_thread = CreateThread(nullptr, 0, thread_entry, (LPVOID)this, 0, &m_thread_id); + assert_always(m_thread != nullptr, "Failed to create profiler thread\n"); // max out the priority SetThreadPriority(m_thread, THREAD_PRIORITY_TIME_CRITICAL); @@ -1555,7 +1557,7 @@ void sampling_profiler::thread_run() *count += 1; } - // fill in any missing parts with NULLs + // fill in any missing parts with nulls for (; frame <= m_stack_depth; frame++) *m_buffer_ptr++ = 0; diff --git a/src/osd/windows/winmain.h b/src/osd/windows/winmain.h index 59088235d65..239690d2945 100644 --- a/src/osd/windows/winmain.h +++ b/src/osd/windows/winmain.h @@ -276,6 +276,7 @@ public: private: virtual void osd_exit() override; windows_options &m_options; + slider_state *m_sliders; static const int DEFAULT_FONT_HEIGHT = 200; }; -- cgit v1.2.3-70-g09d2 From c68d4538a772854c31a539aa071a378e3bc6d7d7 Mon Sep 17 00:00:00 2001 From: "therealmogminer@gmail.com" Date: Thu, 18 Feb 2016 19:12:29 +0100 Subject: More JSON reader plumbing, nw --- bgfx/chains/test.json | 14 +++--- scripts/src/osd/modules.lua | 6 +++ src/osd/modules/render/bgfx/chain.cpp | 25 +++++++++++ src/osd/modules/render/bgfx/chain.h | 30 +++++++++++++ src/osd/modules/render/bgfx/chainreader.cpp | 59 +++++++++++++++++++++++++ src/osd/modules/render/bgfx/chainreader.h | 22 ++++++++++ src/osd/modules/render/bgfx/parameter.cpp | 29 ++++++++++++ src/osd/modules/render/bgfx/parameter.h | 31 +++++++++++++ src/osd/modules/render/bgfx/paramreader.cpp | 30 +++++++++++++ src/osd/modules/render/bgfx/paramreader.h | 22 ++++++++++ src/osd/modules/render/bgfx/slider.cpp | 57 ++++++++++++++++++++++++ src/osd/modules/render/bgfx/slider.h | 19 ++++---- src/osd/modules/render/bgfx/sliderreader.cpp | 66 ++++++++++++++++++++++++++++ src/osd/modules/render/bgfx/sliderreader.h | 5 ++- 14 files changed, 398 insertions(+), 17 deletions(-) create mode 100644 src/osd/modules/render/bgfx/chain.cpp create mode 100644 src/osd/modules/render/bgfx/chain.h create mode 100644 src/osd/modules/render/bgfx/chainreader.cpp create mode 100644 src/osd/modules/render/bgfx/chainreader.h create mode 100644 src/osd/modules/render/bgfx/parameter.cpp create mode 100644 src/osd/modules/render/bgfx/parameter.h create mode 100644 src/osd/modules/render/bgfx/paramreader.cpp create mode 100644 src/osd/modules/render/bgfx/paramreader.h create mode 100644 src/osd/modules/render/bgfx/slider.cpp create mode 100644 src/osd/modules/render/bgfx/sliderreader.cpp (limited to 'scripts/src/osd/modules.lua') diff --git a/bgfx/chains/test.json b/bgfx/chains/test.json index 0026802d2aa..d5b815ca3fc 100644 --- a/bgfx/chains/test.json +++ b/bgfx/chains/test.json @@ -2,14 +2,14 @@ "author": "Ryan Holtz" "sliders": [ { "type": "bool", "name": "adjustments", "text": "Enable Adjustments", "default": false }, - { "type": "float", "name": "ratio_amount", "text": "Ratio Amount", "default": 0, "max": 1 }, + { "type": "float", "name": "ratio_amount", "text": "Ratio Amount", "default": 0, "max": 1, "min": 0 }, - { "type": "color", "name": "red_ratios", "text": "Red Amount", "default": [ 1, 0, 0 ]}, - { "type": "color", "name": "grn_ratios", "text": "Green Amount", "default": [ 0, 1, 0 ], "max": 1, "min": 0 }, - { "type": "color", "name": "blu_ratios", "text": "Blue Amount", "default": [ 0, 0, 1 ], "max": 1, "min": 0 }, - { "type": "color", "name": "tint": "text": "Tint", "default": [ 1, 1, 1 ], "max": 1, "min": 0 } - { "type": "color", "name": "phosphor", "text": "Phosphor Amount", "default": [ 0, 0, 0 ], "max": 1, "min": 0 }, - { "type": "vec2", "name": "shift", "text": "Frame Shift", "default": [ 0, 0 ], "max": 25, "min": -25 }, + { "type": "color", "name": "red_ratios", "text": "Red Amount", "default": [ 1, 0, 0 ], "max": [ 1, 1, 1 ], "min": [ 0, 0, 0 ] }, + { "type": "color", "name": "grn_ratios", "text": "Green Amount", "default": [ 0, 1, 0 ], "max": [ 1, 1, 1 ], "min": [ 0, 0, 0 ] }, + { "type": "color", "name": "blu_ratios", "text": "Blue Amount", "default": [ 0, 0, 1 ], "max": [ 1, 1, 1 ], "min": [ 0, 0, 0 ] }, + { "type": "color", "name": "tint": "text": "Tint", "default": [ 1, 1, 1 ], "max": [ 1, 1, 1 ], "min": [ 0, 0, 0 ] } + { "type": "color", "name": "phosphor", "text": "Phosphor Amount", "default": [ 0, 0, 0 ], "max": [ 1, 1, 1 ], "min": [ 0, 0 ,0 ] }, + { "type": "vec2", "name": "shift", "text": "Frame Shift", "default": [ 0, 0 ], "max": [ 25, 25 ], "min": [ -25, -25 ] } ] "parameters": [ { "name": "alternating", "type": "frame_mask", "period": 2 } diff --git a/scripts/src/osd/modules.lua b/scripts/src/osd/modules.lua index bba8678ef9c..1dfa4317a48 100644 --- a/scripts/src/osd/modules.lua +++ b/scripts/src/osd/modules.lua @@ -109,11 +109,17 @@ function osdmodulesbuild() MAME_DIR .. "src/osd/modules/render/bgfx/effect.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/effectmanager.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/effectreader.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/chain.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/chainreader.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/chainentry.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/chainentryreader.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/inputpair.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/shadermanager.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/statereader.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/slider.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/sliderreader.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/parameter.cpp", + MAME_DIR .. "src/osd/modules/render/bgfx/paramreader.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/target.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/targetmanager.cpp", MAME_DIR .. "src/osd/modules/render/bgfx/texture.cpp", diff --git a/src/osd/modules/render/bgfx/chain.cpp b/src/osd/modules/render/bgfx/chain.cpp new file mode 100644 index 00000000000..faf72cb5797 --- /dev/null +++ b/src/osd/modules/render/bgfx/chain.cpp @@ -0,0 +1,25 @@ +#include "slider.h" +#include "parameter.h" +#include "chainentry.h" + +#include "chain.h" + +bgfx_chain::bgfx_chain(std::string name, std::string author, std::vector sliders, std::vector params, std::vector entries) + : m_name(name) + , m_author(author) + , m_sliders(sliders) + , m_params(params) + , m_entries(entries) +{ +} + +bgfx_chain::~bgfx_chain() +{ +} + +void bgfx_chain::submit(render_primitive* prim, int view) +{ + //for (bgfx_chain_entry* entry : m_entries) + //{ + //} +} diff --git a/src/osd/modules/render/bgfx/chain.h b/src/osd/modules/render/bgfx/chain.h new file mode 100644 index 00000000000..b800882a265 --- /dev/null +++ b/src/osd/modules/render/bgfx/chain.h @@ -0,0 +1,30 @@ +#pragma once + +#ifndef __DRAWBGFX_CHAIN__ +#define __DRAWBGFX_CHAIN__ + +#include +#include + +class bgfx_slider; +class bgfx_parameter; +class bgfx_chain_entry; +class render_primitive; + +class bgfx_chain +{ +public: + bgfx_chain(std::string name, std::string author, std::vector sliders, std::vector params, std::vector entries); + ~bgfx_chain(); + + void submit(render_primitive* prim, int view); + +private: + std::string m_name; + std::string m_author; + std::vector m_sliders; + std::vector m_params; + std::vector m_entries; +}; + +#endif // __DRAWBGFX_CHAIN__ \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/chainreader.cpp b/src/osd/modules/render/bgfx/chainreader.cpp new file mode 100644 index 00000000000..44de1c8d0ba --- /dev/null +++ b/src/osd/modules/render/bgfx/chainreader.cpp @@ -0,0 +1,59 @@ +#include +#include + +#include "emu.h" + +#include "chain.h" +#include "chainreader.h" +#include "sliderreader.h" +#include "paramreader.h" +#include "chainentryreader.h" + +bgfx_chain* chain_reader::read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects) +{ + validate_parameters(value); + + std::string name = value["name"].GetString(); + std::string author = value["author"].GetString(); + + std::vector sliders; + if (value.HasMember("sliders")) + { + const Value& slider_array = value["sliders"]; + for (UINT32 i = 0; i < slider_array.Size(); i++) + { + sliders.push_back(slider_reader::read_from_value(slider_array[i])); + } + } + + std::vector parameters; + if (value.HasMember("parameters")) + { + const Value& param_array = value["parameters"]; + for (UINT32 i = 0; i < param_array.Size(); i++) + { + parameters.push_back(parameter_reader::read_from_value(param_array[i])); + } + } + + std::vector entries; + if (value.HasMember("passes")) + { + const Value& entry_array = value["passes"]; + for (UINT32 i = 0; i < entry_array.Size(); i++) + { + entries.push_back(chain_entry_reader::read_from_value(entry_array[i], textures, targets, effects)); + } + } + + return new bgfx_chain(name, author, sliders, parameters, entries); +} + +void chain_reader::validate_parameters(const Value& value) +{ + assert(value.HasMember("name")); + assert(value["name"].IsString()); + assert(value.HasMember("author")); + assert(value["author"].IsString()); + assert(value.HasMember("passes")); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/chainreader.h b/src/osd/modules/render/bgfx/chainreader.h new file mode 100644 index 00000000000..72d91881bc3 --- /dev/null +++ b/src/osd/modules/render/bgfx/chainreader.h @@ -0,0 +1,22 @@ +#pragma once + +#ifndef __DRAWBGFX_CHAIN_READER__ +#define __DRAWBGFX_CHAIN_READER__ + +#include "statereader.h" + +class bgfx_chain; +class texture_manager; +class target_manager; +class effect_manager; + +class chain_reader : public state_reader +{ +public: + static bgfx_chain* read_from_value(const Value& value, texture_manager& textures, target_manager& targets, effect_manager& effects); + +private: + static void validate_parameters(const Value& value); +}; + +#endif // __DRAWBGFX_CHAIN_READER__ \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/parameter.cpp b/src/osd/modules/render/bgfx/parameter.cpp new file mode 100644 index 00000000000..d7800974089 --- /dev/null +++ b/src/osd/modules/render/bgfx/parameter.cpp @@ -0,0 +1,29 @@ +#include "emu.h" + +#include "parameter.h" + +bgfx_parameter::bgfx_parameter(std::string name, parameter_type type, int period) + : m_name(name) + , m_type(type) + , m_period(period) + , m_frame(0) +{ +} + +bgfx_parameter::~bgfx_parameter() +{ +} + +void bgfx_parameter::frame() +{ + m_frame++; + if (m_frame == m_period) + { + m_frame = 0; + } +} + +bool bgfx_parameter::active() +{ + return (m_frame % m_period == 0); +} diff --git a/src/osd/modules/render/bgfx/parameter.h b/src/osd/modules/render/bgfx/parameter.h new file mode 100644 index 00000000000..c38b80746a7 --- /dev/null +++ b/src/osd/modules/render/bgfx/parameter.h @@ -0,0 +1,31 @@ +#pragma once + +#ifndef __DRAWBGFX_PARAMETER__ +#define __DRAWBGFX_PARAMETER__ + +#include + +#include "emu.h" + +class bgfx_parameter +{ +public: + enum parameter_type + { + PARAM_FRAME_MASK + }; + + bgfx_parameter(std::string name, parameter_type type, int period); + ~bgfx_parameter(); + + void frame(); + bool active(); + +private: + std::string m_name; + parameter_type m_type; + UINT32 m_period; + UINT32 m_frame; +}; + +#endif // __DRAWBGFX_PARAMETER__ \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/paramreader.cpp b/src/osd/modules/render/bgfx/paramreader.cpp new file mode 100644 index 00000000000..7d0dad85697 --- /dev/null +++ b/src/osd/modules/render/bgfx/paramreader.cpp @@ -0,0 +1,30 @@ +#include + +#include "paramreader.h" + +#include "parameter.h" + +const parameter_reader::string_to_enum parameter_reader::TYPE_NAMES[parameter_reader::TYPE_COUNT] = { + { "frame_mask", uint64_t(bgfx_parameter::parameter_type::PARAM_FRAME_MASK) } +}; + +bgfx_parameter* parameter_reader::read_from_value(const Value& value) +{ + validate_parameters(value); + + std::string name = value["name"].GetString(); + bgfx_parameter::parameter_type type = bgfx_parameter::parameter_type(get_enum_from_value(value, "type", uint64_t(bgfx_parameter::parameter_type::PARAM_FRAME_MASK), TYPE_NAMES, TYPE_COUNT)); + int period = int(value["period"].GetDouble()); + + return new bgfx_parameter(name, type, period); +} + +void parameter_reader::validate_parameters(const Value& value) +{ + assert(value.HasMember("name")); + assert(value["name"].IsString()); + assert(value.HasMember("type")); + assert(value["type"].IsString()); + assert(value.HasMember("period")); + assert(value["period"].IsDouble()); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/paramreader.h b/src/osd/modules/render/bgfx/paramreader.h new file mode 100644 index 00000000000..e8543d39c79 --- /dev/null +++ b/src/osd/modules/render/bgfx/paramreader.h @@ -0,0 +1,22 @@ +#pragma once + +#ifndef __DRAWBGFX_PARAM_READER__ +#define __DRAWBGFX_PARAM_READER__ + +#include "statereader.h" + +class bgfx_parameter; + +class parameter_reader : public state_reader +{ +public: + static bgfx_parameter* read_from_value(const Value& value); + +private: + static void validate_parameters(const Value& value); + + static const int TYPE_COUNT = 1; + static const string_to_enum TYPE_NAMES[TYPE_COUNT]; +}; + +#endif // __DRAWBGFX_PARAM_READER__ \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/slider.cpp b/src/osd/modules/render/bgfx/slider.cpp new file mode 100644 index 00000000000..60445ffd6cb --- /dev/null +++ b/src/osd/modules/render/bgfx/slider.cpp @@ -0,0 +1,57 @@ +#include "emu.h" + +#include "slider.h" + +bgfx_slider::bgfx_slider(slider_type type, std::string name, std::string description, void *defaults, void *min, void *max) + : m_type(type) + , m_name(name) + , m_description(description) +{ + m_data = global_alloc_array_clear(storage_size(type)); + m_min = global_alloc_array_clear(storage_size(type)); + m_max = global_alloc_array_clear(storage_size(type)); + memcpy(m_data, defaults, size(type)); + memcpy(m_min, min, size(type)); + memcpy(m_max, max, size(type)); +} + +bgfx_slider::~bgfx_slider() +{ + global_free(m_data); + global_free(m_min); + global_free(m_max); +} + +size_t bgfx_slider::storage_size(slider_type type) +{ + switch(type) + { + case SLIDER_INT: + return 1 * sizeof(int); + case SLIDER_BOOL: + case SLIDER_FLOAT: + case SLIDER_COLOR: + case SLIDER_VEC2: + return 4 * sizeof(float); + default: + return 0; + } +} + +size_t bgfx_slider::size(slider_type type) +{ + switch(type) + { + case SLIDER_INT: + return sizeof(int); + case SLIDER_BOOL: + case SLIDER_FLOAT: + return sizeof(float); + case SLIDER_COLOR: + return sizeof(float) * 3; + case SLIDER_VEC2: + return sizeof(float) * 2; + default: + return 0; + } +} diff --git a/src/osd/modules/render/bgfx/slider.h b/src/osd/modules/render/bgfx/slider.h index d0bcc97aaf0..ab570e7724a 100644 --- a/src/osd/modules/render/bgfx/slider.h +++ b/src/osd/modules/render/bgfx/slider.h @@ -14,9 +14,6 @@ class bgfx_slider { public: - bgfx_slider(slider_type type, std::string name, std::string description, void *defaults, void *min, void *max); - ~bgfx_slider(); - enum slider_type { SLIDER_BOOL, @@ -26,15 +23,19 @@ public: SLIDER_VEC2 }; - // Getters - bgfx_uniform* uniform(std::string name); - bgfx::ProgramHandle get_program() const { return m_program_handle; } + bgfx_slider(slider_type type, std::string name, std::string description, void *defaults, void *min, void *max); + ~bgfx_slider(); + static size_t size(slider_type type); + static size_t storage_size(slider_type type); protected: + + slider_type m_type; std::string m_name; - void * m_data; - void * m_min; - void * m_max; + std::string m_description; + char* m_data; + char* m_min; + char* m_max; }; #endif // __DRAWBGFX_SLIDER__ \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/sliderreader.cpp b/src/osd/modules/render/bgfx/sliderreader.cpp new file mode 100644 index 00000000000..55b352b8f54 --- /dev/null +++ b/src/osd/modules/render/bgfx/sliderreader.cpp @@ -0,0 +1,66 @@ +#include "emu.h" + +#include "sliderreader.h" + +#include "slider.h" + +const slider_reader::string_to_enum slider_reader::TYPE_NAMES[slider_reader::TYPE_COUNT] = { + { "bool", uint64_t(bgfx_slider::slider_type::SLIDER_BOOL) }, + { "float", uint64_t(bgfx_slider::slider_type::SLIDER_FLOAT) }, + { "int", uint64_t(bgfx_slider::slider_type::SLIDER_INT) }, + { "color", uint64_t(bgfx_slider::slider_type::SLIDER_COLOR) }, + { "vec2", uint64_t(bgfx_slider::slider_type::SLIDER_VEC2) } +}; + +bgfx_slider* slider_reader::read_from_value(const Value& value) +{ + validate_parameters(value); + + bgfx_slider::slider_type type = bgfx_slider::slider_type(get_enum_from_value(value, "type", uint64_t(bgfx_slider::slider_type::SLIDER_FLOAT), TYPE_NAMES, TYPE_COUNT)); + std::string name = value["name"].GetString(); + std::string description = value["text"].GetString(); + + float defaults[4]; + float min[4]; + float max[4]; + get_values(value, "default", defaults); + get_values(value, "min", min); + get_values(value, "max", max); + + return new bgfx_slider(type, name, description, defaults, min, max); +} + +void slider_reader::get_values(const Value& value, std::string name, float* values) +{ + const char* name_str = name.c_str(); + if (value.HasMember(name_str)) + { + if (value[name_str].IsBool()) + { + values[0] = value[name_str].GetBool() ? 1.0f : 0.0f; + } + else if (value[name_str].IsDouble()) + { + values[0] = float(value[name_str].GetDouble()); + } + else + { + const Value& value_array = value[name_str]; + for (UINT32 i = 0; i < value_array.Size() && i < 4; i++) + { + values[i] = float(value_array[i].GetDouble()); + } + } + } +} + +void slider_reader::validate_parameters(const Value& value) +{ + assert(value.HasMember("type")); + assert(value["type"].IsString()); + assert(value.HasMember("name")); + assert(value["name"].IsString()); + assert(value.HasMember("text")); + assert(value["text"].IsString()); + assert(value.HasMember("default")); +} \ No newline at end of file diff --git a/src/osd/modules/render/bgfx/sliderreader.h b/src/osd/modules/render/bgfx/sliderreader.h index c7e8c315dfe..82807c221f8 100644 --- a/src/osd/modules/render/bgfx/sliderreader.h +++ b/src/osd/modules/render/bgfx/sliderreader.h @@ -6,7 +6,6 @@ #include "statereader.h" class bgfx_slider; -class shader_manager; class slider_reader : public state_reader { @@ -14,7 +13,11 @@ public: static bgfx_slider* read_from_value(const Value& value); private: + static void get_values(const Value& value, std::string name, float* values); static void validate_parameters(const Value& value); + + static const int TYPE_COUNT = 5; + static const string_to_enum TYPE_NAMES[TYPE_COUNT]; }; #endif // __DRAWBGFX_SLIDER_READER__ \ No newline at end of file -- cgit v1.2.3-70-g09d2