mirror of
https://github.com/brl/mutter.git
synced 2024-11-26 10:00:45 -05:00
c5644723f8
Previously the private feature flags were stored in an enum and we already had 31 flags. Adding the 32nd flag would presumably make it add -2³¹ as one of the values which might cause problems. To avoid this we'll just use an fixed-size array of longs and use indices for the enum values like we do for the public features. A slight complication with this is in the CoglDriverDescription where we were previously using a static intialised value to describe the set of features that the driver supports. We can't easily do this with the flags array so instead the features are stored in a fixed-size array of indices. Reviewed-by: Robert Bragg <robert@linux.intel.com> (cherry picked from commit d94cb984e3c93630f3c2e6e3be9d189672aa20f3) Conflicts: cogl/cogl-context-private.h cogl/cogl-context.c cogl/cogl-private.h cogl/cogl-renderer.c cogl/driver/gl/cogl-pipeline-opengl.c cogl/driver/gl/gl/cogl-driver-gl.c cogl/driver/gl/gl/cogl-pipeline-progend-fixed-arbfp.c cogl/driver/gl/gles/cogl-driver-gles.c cogl/driver/nop/cogl-driver-nop.c
107 lines
3.2 KiB
C
107 lines
3.2 KiB
C
/*
|
|
* Cogl
|
|
*
|
|
* An object oriented GL/GLES Abstraction/Utility Layer
|
|
*
|
|
* Copyright (C) 2011 Intel Corporation.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see
|
|
* <http://www.gnu.org/licenses/>.
|
|
*
|
|
*
|
|
*
|
|
* Authors:
|
|
* Neil Roberts <neil@linux.intel.com>
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include "config.h"
|
|
#endif
|
|
|
|
#include <string.h>
|
|
|
|
#include "cogl-pipeline-private.h"
|
|
#include "cogl-pipeline-state-private.h"
|
|
|
|
#ifdef COGL_PIPELINE_PROGEND_FIXED
|
|
|
|
#include "cogl-context.h"
|
|
#include "cogl-context-private.h"
|
|
#include "cogl-framebuffer-private.h"
|
|
|
|
static CoglBool
|
|
_cogl_pipeline_progend_fixed_start (CoglPipeline *pipeline)
|
|
{
|
|
_COGL_GET_CONTEXT (ctx, FALSE);
|
|
|
|
if (G_UNLIKELY (COGL_DEBUG_ENABLED (COGL_DEBUG_DISABLE_FIXED)))
|
|
return FALSE;
|
|
|
|
if (!_cogl_has_private_feature (ctx, COGL_PRIVATE_FEATURE_GL_FIXED))
|
|
return FALSE;
|
|
|
|
/* Vertex snippets are only supported in the GLSL fragend */
|
|
if (_cogl_pipeline_has_vertex_snippets (pipeline))
|
|
return FALSE;
|
|
|
|
/* Fragment snippets are only supported in the GLSL fragend */
|
|
if (_cogl_pipeline_has_fragment_snippets (pipeline))
|
|
return FALSE;
|
|
|
|
/* If there is a user program then the appropriate backend for that
|
|
* language should handle it. */
|
|
if (cogl_pipeline_get_user_program (pipeline))
|
|
return FALSE;
|
|
|
|
/* The fixed progend can't handle the per-vertex point size
|
|
* attribute */
|
|
if (cogl_pipeline_get_per_vertex_point_size (pipeline))
|
|
return FALSE;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
static void
|
|
_cogl_pipeline_progend_fixed_pre_paint (CoglPipeline *pipeline,
|
|
CoglFramebuffer *framebuffer)
|
|
{
|
|
CoglContext *ctx = framebuffer->context;
|
|
|
|
if (ctx->current_projection_entry)
|
|
_cogl_matrix_entry_flush_to_gl_builtins (ctx,
|
|
ctx->current_projection_entry,
|
|
COGL_MATRIX_PROJECTION,
|
|
framebuffer,
|
|
FALSE /* enable flip */);
|
|
if (ctx->current_modelview_entry)
|
|
_cogl_matrix_entry_flush_to_gl_builtins (ctx,
|
|
ctx->current_modelview_entry,
|
|
COGL_MATRIX_MODELVIEW,
|
|
framebuffer,
|
|
FALSE /* enable flip */);
|
|
}
|
|
|
|
const CoglPipelineProgend _cogl_pipeline_fixed_progend =
|
|
{
|
|
COGL_PIPELINE_VERTEND_FIXED,
|
|
COGL_PIPELINE_FRAGEND_FIXED,
|
|
_cogl_pipeline_progend_fixed_start,
|
|
NULL, /* end */
|
|
NULL, /* pre_change_notify */
|
|
NULL, /* layer_pre_change_notify */
|
|
_cogl_pipeline_progend_fixed_pre_paint
|
|
};
|
|
|
|
#endif /* COGL_PIPELINE_PROGEND_FIXED */
|