* determined by calling GetFloatv with the symbolic constant
* VIEWPORT_BOUNDS_RANGE (see section 6.1)."
*/
- if (ctx->Extensions.ARB_viewport_array) {
+ if (ctx->Extensions.ARB_viewport_array ||
+ (ctx->Extensions.OES_viewport_array &&
+ _mesa_is_gles31(ctx))) {
x = CLAMP(x,
ctx->Const.ViewportBounds.Min, ctx->Const.ViewportBounds.Max);
y = CLAMP(y,
ctx->Driver.DepthRange(ctx);
}
+void GLAPIENTRY
+_mesa_DepthRangeArrayfvOES(GLuint first, GLsizei count, const GLfloat *v)
+{
+ int i;
+ GET_CURRENT_CONTEXT(ctx);
+
+ if (MESA_VERBOSE & VERBOSE_API)
+ _mesa_debug(ctx, "glDepthRangeArrayfv %d %d\n", first, count);
+
+ if ((first + count) > ctx->Const.MaxViewports) {
+ _mesa_error(ctx, GL_INVALID_VALUE,
+ "glDepthRangeArrayfv: first (%d) + count (%d) >= MaxViewports (%d)",
+ first, count, ctx->Const.MaxViewports);
+ return;
+ }
+
+ for (i = 0; i < count; i++)
+ set_depth_range_no_notify(ctx, i + first, v[i * 2], v[i * 2 + 1]);
+
+ if (ctx->Driver.DepthRange)
+ ctx->Driver.DepthRange(ctx);
+}
+
/**
* Update a single DepthRange
*
_mesa_set_depth_range(ctx, index, nearval, farval);
}
+void GLAPIENTRY
+_mesa_DepthRangeIndexedfOES(GLuint index, GLfloat nearval, GLfloat farval)
+{
+ _mesa_DepthRangeIndexed(index, nearval, farval);
+}
+
/**
* Initialize the context viewport attribute group.
* \param ctx the GL context.
if (MESA_VERBOSE&VERBOSE_API)
_mesa_debug(ctx, "glClipControl(%s, %s)\n",
- _mesa_lookup_enum_by_nr(origin),
- _mesa_lookup_enum_by_nr(depth));
+ _mesa_enum_to_string(origin),
+ _mesa_enum_to_string(depth));
ASSERT_OUTSIDE_BEGIN_END(ctx);
*/
void
_mesa_get_viewport_xform(struct gl_context *ctx, unsigned i,
- double scale[3], double translate[3])
+ float scale[3], float translate[3])
{
- double x = ctx->ViewportArray[i].X;
- double y = ctx->ViewportArray[i].Y;
- double half_width = 0.5*ctx->ViewportArray[i].Width;
- double half_height = 0.5*ctx->ViewportArray[i].Height;
+ float x = ctx->ViewportArray[i].X;
+ float y = ctx->ViewportArray[i].Y;
+ float half_width = 0.5f * ctx->ViewportArray[i].Width;
+ float half_height = 0.5f * ctx->ViewportArray[i].Height;
double n = ctx->ViewportArray[i].Near;
double f = ctx->ViewportArray[i].Far;
translate[0] = half_width + x;
if (ctx->Transform.ClipOrigin == GL_UPPER_LEFT) {
scale[1] = -half_height;
- translate[1] = half_height - y;
} else {
scale[1] = half_height;
- translate[1] = half_height + y;
}
+ translate[1] = half_height + y;
+
if (ctx->Transform.ClipDepthMode == GL_NEGATIVE_ONE_TO_ONE) {
- scale[2] = 0.5*(f - n);
- translate[2] = 0.5*(n + f);
+ scale[2] = 0.5 * (f - n);
+ translate[2] = 0.5 * (n + f);
} else {
scale[2] = f - n;
translate[2] = n;