Henri Verbeet : d2d1: Only draw if the geometry has any faces in d2d_d3d_render_target_FillGeometry ().

Alexandre Julliard julliard at wine.codeweavers.com
Mon Aug 17 09:01:13 CDT 2015


Module: wine
Branch: master
Commit: 4460006fbd1185d55567b5cd754a50bf2e9bed8f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=4460006fbd1185d55567b5cd754a50bf2e9bed8f

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon Aug 17 12:55:17 2015 +0200

d2d1: Only draw if the geometry has any faces in d2d_d3d_render_target_FillGeometry().

---

 dlls/d2d1/render_target.c | 45 ++++++++++++++++++++++++---------------------
 1 file changed, 24 insertions(+), 21 deletions(-)

diff --git a/dlls/d2d1/render_target.c b/dlls/d2d1/render_target.c
index c6bce45..7d80ef5 100644
--- a/dlls/d2d1/render_target.c
+++ b/dlls/d2d1/render_target.c
@@ -713,32 +713,35 @@ static void STDMETHODCALLTYPE d2d_d3d_render_target_FillGeometry(ID2D1RenderTarg
         return;
     }
 
-    buffer_desc.ByteWidth = geometry_impl->face_count * sizeof(*geometry_impl->faces);
-    buffer_desc.BindFlags = D3D10_BIND_INDEX_BUFFER;
-    buffer_data.pSysMem = geometry_impl->faces;
-
-    if (FAILED(hr = ID3D10Device_CreateBuffer(render_target->device, &buffer_desc, &buffer_data, &ib)))
+    if (geometry_impl->face_count)
     {
-        WARN("Failed to create index buffer, hr %#x.\n", hr);
-        goto done;
-    }
+        buffer_desc.ByteWidth = geometry_impl->face_count * sizeof(*geometry_impl->faces);
+        buffer_desc.BindFlags = D3D10_BIND_INDEX_BUFFER;
+        buffer_data.pSysMem = geometry_impl->faces;
 
-    buffer_desc.ByteWidth = geometry_impl->vertex_count * sizeof(*geometry_impl->vertices);
-    buffer_desc.BindFlags = D3D10_BIND_VERTEX_BUFFER;
-    buffer_data.pSysMem = geometry_impl->vertices;
+        if (FAILED(hr = ID3D10Device_CreateBuffer(render_target->device, &buffer_desc, &buffer_data, &ib)))
+        {
+            WARN("Failed to create index buffer, hr %#x.\n", hr);
+            goto done;
+        }
 
-    if (FAILED(hr = ID3D10Device_CreateBuffer(render_target->device, &buffer_desc, &buffer_data, &vb)))
-    {
-        ERR("Failed to create vertex buffer, hr %#x.\n", hr);
-        ID3D10Buffer_Release(ib);
-        goto done;
-    }
+        buffer_desc.ByteWidth = geometry_impl->vertex_count * sizeof(*geometry_impl->vertices);
+        buffer_desc.BindFlags = D3D10_BIND_VERTEX_BUFFER;
+        buffer_data.pSysMem = geometry_impl->vertices;
 
-    d2d_draw(render_target, D2D_SHAPE_TYPE_TRIANGLE, ib, 3 * geometry_impl->face_count, vb,
-            sizeof(*geometry_impl->vertices), vs_cb, ps_cb, brush_impl);
+        if (FAILED(hr = ID3D10Device_CreateBuffer(render_target->device, &buffer_desc, &buffer_data, &vb)))
+        {
+            ERR("Failed to create vertex buffer, hr %#x.\n", hr);
+            ID3D10Buffer_Release(ib);
+            goto done;
+        }
 
-    ID3D10Buffer_Release(vb);
-    ID3D10Buffer_Release(ib);
+        d2d_draw(render_target, D2D_SHAPE_TYPE_TRIANGLE, ib, 3 * geometry_impl->face_count, vb,
+                sizeof(*geometry_impl->vertices), vs_cb, ps_cb, brush_impl);
+
+        ID3D10Buffer_Release(vb);
+        ID3D10Buffer_Release(ib);
+    }
 
     if (geometry_impl->bezier_count)
     {




More information about the wine-cvs mailing list