diff options
author | 2016-02-28 18:59:10 +0100 | |
---|---|---|
committer | 2016-02-28 18:59:10 +0100 | |
commit | 0e76ce80ded45d091b657554908874d6a9e4d72b (patch) | |
tree | b9d651845ec3ea5cbf1c8b9a3bfacf2d00acced7 /src/osd/modules/render/drawd3d.cpp | |
parent | 11395616ddde568531c640a461d70d526bb112ab (diff) |
Cleanup primary.fx
- split into primary.fx into 3 techniques for vector buffer, screen and
UI pass
- moved register_texture() for shaders outside of texture_info creation
- added render_primitive parameter to register_texture(); currently
unused
- removed other unused register_texture() definition
Diffstat (limited to 'src/osd/modules/render/drawd3d.cpp')
-rw-r--r-- | src/osd/modules/render/drawd3d.cpp | 28 |
1 files changed, 18 insertions, 10 deletions
diff --git a/src/osd/modules/render/drawd3d.cpp b/src/osd/modules/render/drawd3d.cpp index edce723c475..4037c9c0bbe 100644 --- a/src/osd/modules/render/drawd3d.cpp +++ b/src/osd/modules/render/drawd3d.cpp @@ -694,8 +694,20 @@ void d3d_texture_manager::update_textures() texture_info *texture = find_texinfo(&prim->texture, prim->flags); if (texture == nullptr) { - // if there isn't one, create a new texture - global_alloc(texture_info(this, &prim->texture, m_renderer->window().prescale(), prim->flags)); + if (m_renderer->get_shaders()->enabled()) + { + // create a new texture without prescale, shaders will handle the prescale + texture = global_alloc(texture_info(this, &prim->texture, 1, prim->flags)); + if (texture != nullptr) + { + m_renderer->get_shaders()->register_texture(prim, texture); + } + } + else + { + // create a new texture + texture = global_alloc(texture_info(this, &prim->texture, m_renderer->window().prescale(), prim->flags)); + } } else { @@ -1689,11 +1701,12 @@ void renderer_d3d9::draw_quad(const render_primitive *prim) float height = prim->bounds.y1 - prim->bounds.y0; // set the texture coordinates - if(texture != nullptr) + if (texture != nullptr) { vec2f& start = texture->get_uvstart(); vec2f& stop = texture->get_uvstop(); vec2f delta = stop - start; + vertex[0].u0 = start.c.x + delta.c.x * prim->texcoords.tl.u; vertex[0].v0 = start.c.y + delta.c.y * prim->texcoords.tl.v; vertex[1].u0 = start.c.x + delta.c.x * prim->texcoords.tr.u; @@ -2018,11 +2031,11 @@ texture_info::texture_info(d3d_texture_manager *manager, const render_texinfo* t } // screen textures with no prescaling are pretty easy and shaders handle prescale itself - if ((m_xprescale == 1 && m_yprescale == 1) || m_renderer->get_shaders()->enabled()) + if (m_xprescale == 1 && m_yprescale == 1) { // required to compute the size m_type = m_texture_manager->is_dynamic_supported() ? TEXTURE_TYPE_DYNAMIC : TEXTURE_TYPE_PLAIN; - + // compute the size compute_size(texsource->width, texsource->height); @@ -2030,11 +2043,6 @@ texture_info::texture_info(d3d_texture_manager *manager, const render_texinfo* t if (result == D3D_OK) { m_d3dfinaltex = m_d3dtex; - if (m_renderer->get_shaders()->enabled() && !m_renderer->get_shaders()->register_texture(this)) - { - goto error; - } - break; } } |