wined3d: Introduce a get_pointsize() function.
This commit is contained in:
parent
36520c3e9d
commit
953a45303c
|
@ -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)
|
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;
|
const struct wined3d_gl_info *gl_info = context->gl_info;
|
||||||
/* TODO: Group this with the viewport */
|
float att[3];
|
||||||
/*
|
float pointsize;
|
||||||
* 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 */
|
get_pointsize(context, state, &pointsize, att);
|
||||||
GLfloat att[3] = {1.0f, 0.0f, 0.0f};
|
|
||||||
union {
|
|
||||||
DWORD d;
|
|
||||||
float f;
|
|
||||||
} pointSize, A, B, C;
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gl_info->supported[ARB_POINT_PARAMETERS])
|
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");
|
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(...);");
|
checkGLcall("glPointSize(...);");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3622,6 +3622,38 @@ void get_pointsize_minmax(const struct wined3d_context *context, const struct wi
|
||||||
*out_max = max.f;
|
*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 */
|
/* This small helper function is used to convert a bitmask into the number of masked bits */
|
||||||
unsigned int count_bits(unsigned int mask)
|
unsigned int count_bits(unsigned int mask)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
unsigned int tex, struct wined3d_matrix *mat) DECLSPEC_HIDDEN;
|
||||||
void get_pointsize_minmax(const struct wined3d_context *context, const struct wined3d_state *state,
|
void get_pointsize_minmax(const struct wined3d_context *context, const struct wined3d_state *state,
|
||||||
float *out_min, float *out_max) DECLSPEC_HIDDEN;
|
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
|
/* Using additional shader constants (uniforms in GLSL / program environment
|
||||||
* or local parameters in ARB) is costly:
|
* or local parameters in ARB) is costly:
|
||||||
|
|
Loading…
Reference in New Issue