Previous 199869 Revisions Next

r41784 Wednesday 18th November, 2015 at 12:37:53 UTC by Jezze
Fixed dynamic beam width for invariabel vector intensity

- the vector renderer now tries to detect a invariabel vector intensity
and disables the calculation of a dynamic beam width
[src/emu]render.cpp render.h
[src/emu/video]vector.cpp vector.h
[src/osd/modules/render]drawd3d.cpp

trunk/src/emu/render.cpp
r250295r250296
925925      m_base_orientation(ROT0),
926926      m_maxtexwidth(65536),
927927      m_maxtexheight(65536),
928      m_scale_primitives(true),
929      m_offset_primitives(true)
928      m_transform_primitives(true)
930929{
931930   // determine the base layer configuration based on options
932931   m_base_layerconfig.set_backdrops_enabled(manager.machine().options().use_backdrops());
r250295r250296
16611660      float yoffs = (container_xform.orientation & ORIENTATION_SWAP_XY) ? container.xoffset() : container.yoffset();
16621661      if (container_xform.orientation & ORIENTATION_FLIP_X) xoffs = -xoffs;
16631662      if (container_xform.orientation & ORIENTATION_FLIP_Y) yoffs = -yoffs;
1664      if (!m_scale_primitives)
1663      if (!m_transform_primitives)
16651664      {
16661665         xscale = 1.0f;
16671666         yscale = 1.0f;
1668      }
1669      if (!m_offset_primitives)
1670      {
16711667         xoffs = 0.0f;
16721668         yoffs = 0.0f;
16731669      }
trunk/src/emu/render.h
r250295r250296
898898   void set_orientation(int orientation) { m_orientation = orientation; }
899899   void set_view(int viewindex);
900900   void set_max_texture_size(int maxwidth, int maxheight);
901   void set_scale_primitives(bool enable) { m_scale_primitives = enable; }
902   void set_offset_primitives(bool enable) { m_offset_primitives = enable; }
901   void set_transform_primitives(bool transform_primitives) { m_transform_primitives = transform_primitives; }
903902
904903   // layer config getters
905904   bool backdrops_enabled() const { return m_layerconfig.backdrops_enabled(); }
r250295r250296
998997   simple_list<render_container> m_debug_containers;   // list of debug containers
999998   INT32                   m_clear_extent_count;       // number of clear extents
1000999   INT32                   m_clear_extents[MAX_CLEAR_EXTENTS]; // array of clear extents
1001   bool                    m_scale_primitives;         // determines if the primitive shall be scaled/offset by screen settings,
1002   bool                    m_offset_primitives;        // otherwise the respective render API will handle it (default is true)
1000   bool                    m_transform_primitives;     // determines if the primitives shall be scaled/offset by screen settings,
1001                                                       // otherwise the respective render API will handle it (default is true)
10031002
10041003   static render_screen_list s_empty_screen_list;
10051004};
trunk/src/emu/video/vector.cpp
r250295r250296
131131vector_device::vector_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source)
132132   : device_t(mconfig, type, name, tag, owner, clock, shortname, source),
133133      device_video_interface(mconfig, *this),
134      m_vector_list(NULL)
134      m_vector_list(NULL),
135      m_min_intensity(255),
136      m_max_intensity(0)
135137{
136138}
137139
138140vector_device::vector_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
139141   : device_t(mconfig, VECTOR, "VECTOR", tag, owner, clock, "vector_device", __FILE__),
140     device_video_interface(mconfig, *this),
141     m_vector_list(NULL)
142      device_video_interface(mconfig, *this),
143      m_vector_list(NULL),
144      m_min_intensity(255),
145      m_max_intensity(0)
142146{
143147}
144148
r250295r250296
221225{
222226   point *newpoint;
223227
224   if (intensity > 255)
225   {
226      intensity = 255;
227   }
228   intensity = MAX(0, MIN(255, intensity));
228229
230   m_min_intensity = intensity > 0 ? MIN(m_min_intensity, intensity) : m_min_intensity;
231   m_max_intensity = intensity > 0 ? MAX(m_max_intensity, intensity) : m_max_intensity;
232
229233   if (m_flicker && (intensity > 0))
230234   {
231235      float random = (float)(machine().rand() & 255) / 255.0f; // random value between 0.0 and 1.0
232236
233237      intensity -= (int)(intensity * random * m_flicker);
234      if (intensity < 0)
235      {
236         intensity = 0;
237      }
238      if (intensity > 255)
239      {
240         intensity = 255;
241      }
238
239      intensity = MAX(0, MIN(255, intensity));
242240   }
243241
244242   newpoint = &m_vector_list[m_vector_index];
r250295r250296
334332      }
335333      else
336334      {
335         float beam_intensity_width = m_beam_width_min;
336
337337         float intensity = (float)curpoint->intensity / 255.0f;
338         float intensity_weight = normalized_sigmoid(intensity, m_beam_intensity_weight);
339338
340         float beam_intensity_width = (m_beam_width_max - m_beam_width_min) * intensity_weight + m_beam_width_min;
339         // check for dynamic intensity
340         if (m_min_intensity != m_max_intensity)
341         {
342            float intensity_weight = normalized_sigmoid(intensity, m_beam_intensity_weight);
343            beam_intensity_width = (m_beam_width_max - m_beam_width_min) * intensity_weight + m_beam_width_min;
344         }
345
341346         float beam_width = beam_intensity_width * (1.0f / (float)VECTOR_WIDTH_DENOM);
342347
343348         coords.x0 = ((float)lastx - xoffs) * xscale;
trunk/src/emu/video/vector.h
r250295r250296
6767   static float m_beam_intensity_weight;
6868   point *m_vector_list;
6969   static int m_vector_index;
70   int m_min_intensity;
71   int m_max_intensity;   
7072
7173   float normalized_sigmoid(float n, float k);
7274};
trunk/src/osd/modules/render/drawd3d.cpp
r250295r250296
247247   }
248248   if (m_shaders != NULL)
249249   {
250      window().target()->set_scale_primitives(!m_shaders->enabled());
251      window().target()->set_offset_primitives(!m_shaders->enabled());
250      window().target()->set_transform_primitives(!m_shaders->enabled());
252251   }
253252   return &window().target()->get_primitives();
254253}


Previous 199869 Revisions Next


© 1997-2024 The MAME Team