Matteo Bruni : wined3d: Introduce a get_pointsize() function.

Alexandre Julliard julliard at wine.codeweavers.com
Fri May 29 05:29:49 CDT 2015


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

Author: Matteo Bruni <mbruni at codeweavers.com>
Date:   Thu May 28 23:23:04 2015 +0200

wined3d: Introduce a get_pointsize() function.

---

 dlls/wined3d/state.c           | 31 ++++---------------------------
 dlls/wined3d/utils.c           | 32 ++++++++++++++++++++++++++++++++
 dlls/wined3d/wined3d_private.h |  2 ++
 3 files changed, 38 insertions(+), 27 deletions(-)

diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index c0a87d3..37f4498 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -1458,33 +1458,10 @@ void state_psizemin_arb(struct wined3d_context *context, const struct wined3d_st
 void state_pscale(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
 {
     const struct wined3d_gl_info *gl_info = context->gl_info;
-    /* TODO: Group this with the viewport */
-    /*
-     * POINTSCALEENABLE controls how point size value is treated. If set to
-     * true, the point size is scaled with respect to height of viewport.
-     * When set to false point size is in pixels.
-     */
-
-    /* Default values */
-    GLfloat att[3] = {1.0f, 0.0f, 0.0f};
-    union {
-        DWORD d;
-        float f;
-    } pointSize, A, B, C;
+    float att[3];
+    float pointsize;
 
-    pointSize.d = state->render_states[WINED3D_RS_POINTSIZE];
-    A.d = state->render_states[WINED3D_RS_POINTSCALE_A];
-    B.d = state->render_states[WINED3D_RS_POINTSCALE_B];
-    C.d = state->render_states[WINED3D_RS_POINTSCALE_C];
-
-    if (state->render_states[WINED3D_RS_POINTSCALEENABLE])
-    {
-        float scale_factor = state->viewport.height * state->viewport.height;
-
-        att[0] = A.f / scale_factor;
-        att[1] = B.f / scale_factor;
-        att[2] = C.f / scale_factor;
-    }
+    get_pointsize(context, state, &pointsize, att);
 
     if (gl_info->supported[ARB_POINT_PARAMETERS])
     {
@@ -1501,7 +1478,7 @@ void state_pscale(struct wined3d_context *context, const struct wined3d_state *s
         WARN("POINT_PARAMETERS not supported in this version of opengl\n");
     }
 
-    gl_info->gl_ops.gl.p_glPointSize(max(pointSize.f, FLT_MIN));
+    gl_info->gl_ops.gl.p_glPointSize(max(pointsize, FLT_MIN));
     checkGLcall("glPointSize(...);");
 }
 
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 9084626..5ad82bd 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -3622,6 +3622,38 @@ void get_pointsize_minmax(const struct wined3d_context *context, const struct wi
     *out_max = max.f;
 }
 
+void get_pointsize(const struct wined3d_context *context, const struct wined3d_state *state,
+        float *out_pointsize, float *out_att)
+{
+    /* POINTSCALEENABLE controls how point size value is treated. If set to
+     * true, the point size is scaled with respect to height of viewport.
+     * When set to false point size is in pixels. */
+    union
+    {
+        DWORD d;
+        float f;
+    } pointsize, a, b, c;
+
+    out_att[0] = 1.0f;
+    out_att[1] = 0.0f;
+    out_att[2] = 0.0f;
+
+    pointsize.d = state->render_states[WINED3D_RS_POINTSIZE];
+    a.d = state->render_states[WINED3D_RS_POINTSCALE_A];
+    b.d = state->render_states[WINED3D_RS_POINTSCALE_B];
+    c.d = state->render_states[WINED3D_RS_POINTSCALE_C];
+
+    if (state->render_states[WINED3D_RS_POINTSCALEENABLE])
+    {
+        float scale_factor = state->viewport.height * state->viewport.height;
+
+        out_att[0] = a.f / scale_factor;
+        out_att[1] = b.f / scale_factor;
+        out_att[2] = c.f / scale_factor;
+    }
+    *out_pointsize = pointsize.f;
+}
+
 /* This small helper function is used to convert a bitmask into the number of masked bits */
 unsigned int count_bits(unsigned int mask)
 {
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index a79d8b0..7f85317 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -3072,6 +3072,8 @@ void get_texture_matrix(const struct wined3d_context *context, const struct wine
         unsigned int tex, struct wined3d_matrix *mat) DECLSPEC_HIDDEN;
 void get_pointsize_minmax(const struct wined3d_context *context, const struct wined3d_state *state,
         float *out_min, float *out_max) DECLSPEC_HIDDEN;
+void get_pointsize(const struct wined3d_context *context, const struct wined3d_state *state,
+        float *out_pointsize, float *out_att) DECLSPEC_HIDDEN;
 
 /* Using additional shader constants (uniforms in GLSL / program environment
  * or local parameters in ARB) is costly:




More information about the wine-cvs mailing list