mesa: Only FRONT_AND_BACK is allowed for PolygonMode in core context
Page 407 (page 423 of the PDF) of the OpenGL 3.0 spec says (in the list of deprecated functionality): "Separate polygon draw mode - PolygonMode face values of FRONT and BACK; polygons are always drawn in the same mode, no matter which face is being rasterized." Also modify meta to not use FRONT or BACK in a core context. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
d638da23d2
commit
7e1cab09a1
|
@ -851,8 +851,14 @@ _mesa_meta_end(struct gl_context *ctx)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state & MESA_META_RASTERIZATION) {
|
if (state & MESA_META_RASTERIZATION) {
|
||||||
_mesa_PolygonMode(GL_FRONT, save->FrontPolygonMode);
|
/* Core context requires that front and back mode be the same.
|
||||||
_mesa_PolygonMode(GL_BACK, save->BackPolygonMode);
|
*/
|
||||||
|
if (ctx->API == API_OPENGL_CORE) {
|
||||||
|
_mesa_PolygonMode(GL_FRONT_AND_BACK, save->FrontPolygonMode);
|
||||||
|
} else {
|
||||||
|
_mesa_PolygonMode(GL_FRONT, save->FrontPolygonMode);
|
||||||
|
_mesa_PolygonMode(GL_BACK, save->BackPolygonMode);
|
||||||
|
}
|
||||||
if (ctx->API == API_OPENGL) {
|
if (ctx->API == API_OPENGL) {
|
||||||
_mesa_set_enable(ctx, GL_POLYGON_STIPPLE, save->PolygonStipple);
|
_mesa_set_enable(ctx, GL_POLYGON_STIPPLE, save->PolygonStipple);
|
||||||
_mesa_set_enable(ctx, GL_POLYGON_SMOOTH, save->PolygonSmooth);
|
_mesa_set_enable(ctx, GL_POLYGON_SMOOTH, save->PolygonSmooth);
|
||||||
|
|
|
@ -143,6 +143,10 @@ _mesa_PolygonMode( GLenum face, GLenum mode )
|
||||||
|
|
||||||
switch (face) {
|
switch (face) {
|
||||||
case GL_FRONT:
|
case GL_FRONT:
|
||||||
|
if (ctx->API == API_OPENGL_CORE) {
|
||||||
|
_mesa_error( ctx, GL_INVALID_ENUM, "glPolygonMode(face)" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (ctx->Polygon.FrontMode == mode)
|
if (ctx->Polygon.FrontMode == mode)
|
||||||
return;
|
return;
|
||||||
FLUSH_VERTICES(ctx, _NEW_POLYGON);
|
FLUSH_VERTICES(ctx, _NEW_POLYGON);
|
||||||
|
@ -157,6 +161,10 @@ _mesa_PolygonMode( GLenum face, GLenum mode )
|
||||||
ctx->Polygon.BackMode = mode;
|
ctx->Polygon.BackMode = mode;
|
||||||
break;
|
break;
|
||||||
case GL_BACK:
|
case GL_BACK:
|
||||||
|
if (ctx->API == API_OPENGL_CORE) {
|
||||||
|
_mesa_error( ctx, GL_INVALID_ENUM, "glPolygonMode(face)" );
|
||||||
|
return;
|
||||||
|
}
|
||||||
if (ctx->Polygon.BackMode == mode)
|
if (ctx->Polygon.BackMode == mode)
|
||||||
return;
|
return;
|
||||||
FLUSH_VERTICES(ctx, _NEW_POLYGON);
|
FLUSH_VERTICES(ctx, _NEW_POLYGON);
|
||||||
|
|
Loading…
Reference in New Issue