Previous 199869 Revisions Next

r46615 Wednesday 23rd March, 2016 at 16:12:07 UTC by Ryan Holtz
Per-screen sliders and some bugfixing, nw
[/branches/bgfx_shader/3rdparty/bgfx/src]config.h
[/branches/bgfx_shader/src/osd/modules/render]drawbgfx.cpp drawbgfx.h
[/branches/bgfx_shader/src/osd/modules/render/bgfx]chainmanager.cpp chainmanager.h chainreader.cpp chainreader.h sliderreader.cpp sliderreader.h
[/branches/bgfx_shader/src/osd/modules/render/d3d]d3dhlsl.cpp
[/branches/bgfx_shader/src/osd/windows]window.cpp

branches/bgfx_shader/3rdparty/bgfx/src/config.h
r255126r255127
266266#endif // BGFX_CONFIG_MAX_TEXTURE_SAMPLERS
267267
268268#ifndef BGFX_CONFIG_MAX_FRAME_BUFFERS
269#   define BGFX_CONFIG_MAX_FRAME_BUFFERS 64
269#   define BGFX_CONFIG_MAX_FRAME_BUFFERS 128
270270#endif // BGFX_CONFIG_MAX_FRAME_BUFFERS
271271
272272#ifndef BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS
branches/bgfx_shader/src/osd/modules/render/bgfx/chainmanager.cpp
r255126r255127
2525
2626chain_manager::~chain_manager()
2727{
28   for (std::pair<std::string, bgfx_chain*> chain : m_chains)
28   for (bgfx_chain* chain : m_chains)
2929   {
30      delete chain.second;
30      delete chain;
3131   }
3232   m_chains.clear();
3333}
3434
35bgfx_chain* chain_manager::chain(std::string name, running_machine& machine, uint32_t window_index)
35bgfx_chain* chain_manager::chain(std::string name, running_machine& machine, uint32_t window_index, uint32_t screen_index)
3636{
37   std::map<std::string, bgfx_chain*>::iterator iter = m_chains.find(name + std::to_string(window_index));
38   if (iter != m_chains.end())
39   {
40      return iter->second;
41   }
42
43   return load_chain(name, machine, window_index);
37   return load_chain(name, machine, window_index, screen_index);
4438}
4539
46bgfx_chain* chain_manager::load_chain(std::string name, running_machine& machine, uint32_t window_index)
40bgfx_chain* chain_manager::load_chain(std::string name, running_machine& machine, uint32_t window_index, uint32_t screen_index)
4741{
4842   if (name.length() < 5 || (name.compare(name.length() - 5, 5, ".json")!= 0))
4943   {
r255126r255127
7670      return nullptr;
7771   }
7872
79   bgfx_chain* chain = chain_reader::read_from_value(document, name + ": ", m_options, machine, window_index, m_textures, m_targets, m_effects, m_width, m_height);
73   bgfx_chain* chain = chain_reader::read_from_value(document, name + ": ", m_options, machine, window_index, screen_index, m_textures, m_targets, m_effects, m_width, m_height);
8074
8175   if (chain == nullptr)
8276   {
r255126r255127
8478      return nullptr;
8579   }
8680
87   m_chains[name + std::to_string(window_index)] = chain;
81   m_chains.push_back(chain);
8882
8983   return chain;
9084}
branches/bgfx_shader/src/osd/modules/render/bgfx/chainmanager.h
r255126r255127
1414#ifndef __DRAWBGFX_CHAIN_MANAGER__
1515#define __DRAWBGFX_CHAIN_MANAGER__
1616
17#include <map>
17#include <vector>
1818#include <string>
1919
2020#include "texturemanager.h"
r255126r255127
3939   ~chain_manager();
4040
4141   // Getters
42   bgfx_chain* chain(std::string name, running_machine& machine, uint32_t window_index);
42   bgfx_chain* chain(std::string name, running_machine& machine, uint32_t window_index, uint32_t screen_index);
4343
4444private:
45   bgfx_chain* load_chain(std::string name, running_machine& machine, uint32_t window_index);
45   bgfx_chain* load_chain(std::string name, running_machine& machine, uint32_t window_index, uint32_t screen_index);
4646
4747    osd_options&                        m_options;
4848   texture_manager&               m_textures;
r255126r255127
5050   effect_manager&                     m_effects;
5151   uint32_t                     m_width;
5252   uint32_t                     m_height;
53   std::map<std::string, bgfx_chain*>   m_chains;
53   std::vector<bgfx_chain*>           m_chains;
5454};
5555
5656#endif // __DRAWBGFX_CHAIN_MANAGER__
branches/bgfx_shader/src/osd/modules/render/bgfx/chainreader.cpp
r255126r255127
2424#include "slider.h"
2525#include "parameter.h"
2626
27bgfx_chain* chain_reader::read_from_value(const Value& value, std::string prefix, osd_options& options, running_machine& machine, uint32_t window_index, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t screen_width, uint32_t screen_height)
27bgfx_chain* chain_reader::read_from_value(const Value& value, std::string prefix, osd_options& options, running_machine& machine, uint32_t window_index, uint32_t screen_index, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t screen_width, uint32_t screen_height)
2828{
2929   if (!validate_parameters(value, prefix))
3030   {
r255126r255127
4141      const Value& slider_array = value["sliders"];
4242      for (UINT32 i = 0; i < slider_array.Size(); i++)
4343      {
44            std::vector<bgfx_slider*> expanded_sliders = slider_reader::read_from_value(slider_array[i], prefix + "sliders[" + std::to_string(i) + "]: ", machine, window_index);
44            std::vector<bgfx_slider*> expanded_sliders = slider_reader::read_from_value(slider_array[i], prefix + "sliders[" + std::to_string(i) + "]: ", machine, window_index, screen_index);
4545            if (expanded_sliders.size() == 0)
4646            {
4747            return nullptr;
branches/bgfx_shader/src/osd/modules/render/bgfx/chainreader.h
r255126r255127
2121class chain_reader : public state_reader
2222{
2323public:
24   static bgfx_chain* read_from_value(const Value& value, std::string prefix, osd_options& options, running_machine& machine, uint32_t window_index, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t screen_width, uint32_t screen_height);
24   static bgfx_chain* read_from_value(const Value& value, std::string prefix, osd_options& options, running_machine& machine, uint32_t window_index, uint32_t screen_index, texture_manager& textures, target_manager& targets, effect_manager& effects, uint32_t screen_width, uint32_t screen_height);
2525
2626private:
2727   static bool validate_parameters(const Value& value, std::string prefix);
branches/bgfx_shader/src/osd/modules/render/bgfx/sliderreader.cpp
r255126r255127
3333   { "all",   uint64_t(bgfx_slider::screen_type::SLIDER_SCREEN_TYPE_ANY) }
3434};
3535
36std::vector<bgfx_slider*> slider_reader::read_from_value(const Value& value, std::string prefix, running_machine& machine, uint32_t window_index)
36std::vector<bgfx_slider*> slider_reader::read_from_value(const Value& value, std::string prefix, running_machine& machine, uint32_t window_index, uint32_t screen_index)
3737{
3838    std::vector<bgfx_slider*> sliders;
3939
r255126r255127
8383            break;
8484    }
8585
86    std::string prefixed_desc = "Window " + std::to_string(window_index) + ", Screen " + std::to_string(screen_index) + ", " + description;
8687    if (slider_count > 1)
8788    {
8889        int min[3];
r255126r255127
101102            switch (index)
102103            {
103104                case 0:
104                    desc = "Window " + std::to_string(window_index) + ", " + description + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "X" : "Red");
105                    desc = prefixed_desc + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "X" : "Red");
105106                    break;
106107                case 1:
107                    desc = "Window " + std::to_string(window_index) + ", " + description + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "Y" : "Green");
108                    desc = prefixed_desc + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "Y" : "Green");
108109                    break;
109110                case 2:
110                    desc = "Window " + std::to_string(window_index) + ", " + description + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "Invalid" : "Blue");
111                    desc = prefixed_desc + (type == bgfx_slider::slider_type::SLIDER_VEC2 ? "Invalid" : "Blue");
111112                    break;
112113                default:
113                    desc = "Window " + std::to_string(window_index) + ", " + description + "Invalid";
114                    desc = prefixed_desc + "Invalid";
114115                    break;
115116            }
116117            sliders.push_back(new bgfx_slider(machine, full_name, min[index], defaults[index], max[index], step, type, screen_type, scale, format, desc, strings));
r255126r255127
121122        int min = get_int(value, "min", 0);
122123        int def = get_int(value, "default", 0);
123124        int max = get_int(value, "max", 100);
124        sliders.push_back(new bgfx_slider(machine, name + "0", min, def, max, step, type, screen_type, scale, format, "Window " + std::to_string(window_index) + ", " + description, strings));
125        sliders.push_back(new bgfx_slider(machine, name + "0", min, def, max, step, type, screen_type, scale, format, prefixed_desc, strings));
125126    }
126127   return sliders;
127128}
branches/bgfx_shader/src/osd/modules/render/bgfx/sliderreader.h
r255126r255127
2121class slider_reader : public state_reader
2222{
2323public:
24   static std::vector<bgfx_slider*> read_from_value(const Value& value, std::string prefix, running_machine& machine, uint32_t window_index);
24   static std::vector<bgfx_slider*> read_from_value(const Value& value, std::string prefix, running_machine& machine, uint32_t window_index, uint32_t screen_index);
2525
2626private:
2727   static bool get_values(const Value& value, std::string prefix, std::string name, int* values, const int count);
branches/bgfx_shader/src/osd/modules/render/d3d/d3dhlsl.cpp
r255126r255127
26512651               static_cast<float>(static_cast<int>(shadersys->curr_poly->get_prim_width() + 0.5f)),
26522652               static_cast<float>(static_cast<int>(shadersys->curr_poly->get_prim_height() + 0.5f)) };
26532653            m_shader->set_vector("QuadDims", 2, quaddims);
2654            printf("Quad Dims: %f, %f\n", quaddims[0], quaddims[1]);
26552654         }
26562655         break;
26572656      }
r255126r255127
30993098
31003099slider_state *renderer_d3d9::get_slider_list()
31013100{
3101    if (window().m_index > 0)
3102    {
3103        return nullptr;
3104    }
31023105   return g_slider_list;
31033106}
31043107
branches/bgfx_shader/src/osd/modules/render/drawbgfx.cpp
r255126r255127
212212
213213void renderer_bgfx::parse_screen_chains(std::string chain_str)
214214{
215    std::vector<std::string> chains;
215    std::vector<std::vector<std::string>> chains;
216216    uint32_t length = chain_str.length();
217217    uint32_t last_start = 0;
218    uint32_t win = 0;
219    chains.push_back(std::vector<std::string>());
218220    for (uint32_t i = 0; i < length + 1; i++)
219221    {
220        if (i == length || chain_str[i] == ',')
222        if (i == length || chain_str[i] == ',' || chain_str[i] == ':')
221223        {
222            chains.push_back(chain_str.substr(last_start, i - last_start));
224            chains[win].push_back(chain_str.substr(last_start, i - last_start));
223225            last_start = i + 1;
226            if (chain_str[i] == ':')
227            {
228                win++;
229                chains.push_back(std::vector<std::string>());
230            }
224231        }
225232    }
226233
227    for (uint32_t index = 0; index < chains.size(); index++)
234    for (win = 0; win < chains.size(); win++)
228235    {
229        bgfx_chain* chain = m_chains->chain(chains[index], window().machine(), index);
230        if (chain == nullptr)
236        m_screen_chains.push_back(std::vector<bgfx_chain*>());
237        if (win != window().m_index)
231238        {
232            chains.clear();
233            return;
239            continue;
234240        }
235        m_screen_chains.push_back(chain);
241        for (uint32_t screen = 0; screen < chains[win].size(); screen++)
242        {
243            bgfx_chain* chain = m_chains->chain(chains[win][screen], window().machine(), win, screen);
244            if (chain == nullptr) {
245                chains.clear();
246                return;
247            }
248            m_screen_chains[win].push_back(chain);
249        }
236250    }
237251}
238252
r255126r255127
759773
760774int renderer_bgfx::handle_screen_chains()
761775{
762   if (m_screen_chains.size() == 0)
776   if (m_screen_chains.size() <= window().m_index || m_screen_chains[window().m_index].size() == 0)
763777   {
764778      return 0;
765779   }
r255126r255127
802816
803817bgfx_chain* renderer_bgfx::screen_chain(int32_t screen)
804818{
805    if (screen >= m_screen_chains.size())
819    if (screen >= m_screen_chains[window().m_index].size())
806820    {
807        return m_screen_chains[m_screen_chains.size() - 1];
821        return m_screen_chains[window().m_index][m_screen_chains.size() - 1];
808822    }
809823    else
810824    {
811        return m_screen_chains[screen];
825        return m_screen_chains[window().m_index][screen];
812826    }
813827}
814828
r255126r255127
975989                     return BUFFER_PRE_FLUSH;
976990                  }
977991
978                        if (PRIMFLAG_GET_SCREENTEX((*prim)->flags) && m_screen_chains.size() > 0)
992                        if (PRIMFLAG_GET_SCREENTEX((*prim)->flags) && m_screen_chains.size() > window().m_index && m_screen_chains[window().m_index].size() > 0)
979993                        {
980994                            render_post_screen_quad(view, *prim, buffer, screen);
981995                            return BUFFER_SCREEN;
r255126r255127
11951209
11961210slider_state* renderer_bgfx::get_slider_list()
11971211{
1198   if (m_screen_chains.size() == 0)
1212   if (m_screen_chains.size() <= window().m_index || m_screen_chains[window().m_index].size() == 0)
11991213   {
12001214      return nullptr;
12011215   }
12021216
12031217    slider_state *listhead = nullptr;
12041218    slider_state **tailptr = &listhead;
1205    for (bgfx_chain* chain : m_screen_chains)
1219    for (std::vector<bgfx_chain*> screen : m_screen_chains)
12061220    {
1207        std::vector<bgfx_slider*> sliders = chain->sliders();
1208        for (bgfx_slider* slider : sliders)
1221        for (bgfx_chain* chain : screen)
12091222        {
1210            if (*tailptr == nullptr)
1223            std::vector<bgfx_slider*> sliders = chain->sliders();
1224            for (bgfx_slider* slider : sliders)
12111225            {
1212                *tailptr = slider->core_slider();
1226                if (*tailptr == nullptr)
1227                {
1228                    *tailptr = slider->core_slider();
1229                }
1230                else
1231                {
1232                    (*tailptr)->next = slider->core_slider();
1233                    tailptr = &(*tailptr)->next;
1234                }
12131235            }
1214            else
1215            {
1216                (*tailptr)->next = slider->core_slider();
1217                tailptr = &(*tailptr)->next;
1218            }
12191236        }
12201237    }
12211238    if (*tailptr != nullptr)
branches/bgfx_shader/src/osd/modules/render/drawbgfx.h
r255126r255127
108108
109109   bgfx_effect* m_gui_effect[4];
110110   bgfx_effect* m_screen_effect[4];
111   std::vector<bgfx_chain*> m_screen_chains;
111   std::vector<std::vector<bgfx_chain*>> m_screen_chains;
112112
113113   std::map<UINT32, rectangle_packer::packed_rectangle> m_hash_to_entry;
114114   std::vector<rectangle_packer::packable_rectangle> m_texinfo;
branches/bgfx_shader/src/osd/windows/window.cpp
r255126r255127
272272
273273void windows_osd_interface::build_slider_list()
274274{
275   // FIXME: take all sliders from all windows without concatenate them by slider_state->next
276
275    m_sliders = nullptr;
276    slider_state* full_list = nullptr;
277    slider_state* curr = nullptr;
277278   for (win_window_info *window = win_window_list; window != nullptr; window = window->m_next)
278279   {
279280      // take the sliders of the first window
280      m_sliders = window->m_renderer->get_slider_list();
281      return;
281        slider_state* window_sliders = window->m_renderer->get_slider_list();
282        if (window_sliders == nullptr)
283        {
284            continue;
285        }
286
287        if (full_list == nullptr)
288        {
289            full_list = curr = window_sliders;
290        }
291        else
292        {
293            curr->next = window_sliders;
294        }
295
296        while (curr->next != nullptr) {
297            curr = curr->next;
298        }
282299   }
300
301    m_sliders = full_list;
283302}
284303
285304//============================================================


Previous 199869 Revisions Next


© 1997-2024 The MAME Team