mirror of
https://github.com/brl/mutter.git
synced 2024-11-10 07:56:14 -05:00
26628553ed
This was mistakenly added some time ago because at some point when we were discussing how to handle premultiplied alpha in Clutter/Cogl we were considering having a magic "just do the right thing" option which was later abandoned.
138 lines
3.7 KiB
C
138 lines
3.7 KiB
C
/*
|
|
* Cogl
|
|
*
|
|
* An object oriented GL/GLES Abstraction/Utility Layer
|
|
*
|
|
* Copyright (C) 2009 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:
|
|
* Robert Bragg <robert@linux.intel.com>
|
|
*/
|
|
|
|
#ifndef COGL_BLEND_STRING_H
|
|
#define COGL_BLEND_STRING_H
|
|
|
|
#include <stdlib.h>
|
|
#include <glib.h>
|
|
|
|
typedef enum _CoglBlendStringContext
|
|
{
|
|
COGL_BLEND_STRING_CONTEXT_BLENDING,
|
|
COGL_BLEND_STRING_CONTEXT_TEXTURE_COMBINE
|
|
} CoglBlendStringContext;
|
|
|
|
/* NB: debug stringify code will get upset if these
|
|
* are re-ordered */
|
|
typedef enum _CoglBlendStringChannelMask
|
|
{
|
|
COGL_BLEND_STRING_CHANNEL_MASK_RGB,
|
|
COGL_BLEND_STRING_CHANNEL_MASK_ALPHA,
|
|
COGL_BLEND_STRING_CHANNEL_MASK_RGBA
|
|
} CoglBlendStringChannelMask;
|
|
|
|
typedef enum _CoglBlendStringColorSourceType
|
|
{
|
|
/* blending */
|
|
COGL_BLEND_STRING_COLOR_SOURCE_SRC_COLOR,
|
|
COGL_BLEND_STRING_COLOR_SOURCE_DST_COLOR,
|
|
|
|
/* shared */
|
|
COGL_BLEND_STRING_COLOR_SOURCE_CONSTANT,
|
|
|
|
/* texture combining */
|
|
COGL_BLEND_STRING_COLOR_SOURCE_TEXTURE,
|
|
COGL_BLEND_STRING_COLOR_SOURCE_TEXTURE_N,
|
|
COGL_BLEND_STRING_COLOR_SOURCE_PRIMARY,
|
|
COGL_BLEND_STRING_COLOR_SOURCE_PREVIOUS
|
|
} CoglBlendStringColorSourceType;
|
|
|
|
typedef struct _CoglBlendStringColorSourceInfo
|
|
{
|
|
CoglBlendStringColorSourceType type;
|
|
const char *name;
|
|
gsize name_len;
|
|
} CoglBlendStringColorSourceInfo;
|
|
|
|
typedef struct _CoglBlendStringColorSource
|
|
{
|
|
gboolean is_zero;
|
|
const CoglBlendStringColorSourceInfo *info;
|
|
int texture; /* for the TEXTURE_N color source */
|
|
gboolean one_minus;
|
|
CoglBlendStringChannelMask mask;
|
|
} CoglBlendStringColorSource;
|
|
|
|
typedef struct _CoglBlendStringFactor
|
|
{
|
|
gboolean is_one;
|
|
gboolean is_src_alpha_saturate;
|
|
gboolean is_color;
|
|
CoglBlendStringColorSource source;
|
|
} CoglBlendStringFactor;
|
|
|
|
typedef struct _CoglBlendStringArgument
|
|
{
|
|
CoglBlendStringColorSource source;
|
|
CoglBlendStringFactor factor;
|
|
} CoglBlendStringArgument;
|
|
|
|
typedef enum _CoglBlendStringFunctionType
|
|
{
|
|
/* shared */
|
|
COGL_BLEND_STRING_FUNCTION_ADD,
|
|
|
|
/* texture combine only */
|
|
COGL_BLEND_STRING_FUNCTION_REPLACE,
|
|
COGL_BLEND_STRING_FUNCTION_MODULATE,
|
|
COGL_BLEND_STRING_FUNCTION_ADD_SIGNED,
|
|
COGL_BLEND_STRING_FUNCTION_INTERPOLATE,
|
|
COGL_BLEND_STRING_FUNCTION_SUBTRACT,
|
|
COGL_BLEND_STRING_FUNCTION_DOT3_RGB,
|
|
COGL_BLEND_STRING_FUNCTION_DOT3_RGBA
|
|
} CoglBlendStringFunctionType;
|
|
|
|
typedef struct _CoglBlendStringFunctionInfo
|
|
{
|
|
enum _CoglBlendStringFunctionType type;
|
|
const char *name;
|
|
gsize name_len;
|
|
int argc;
|
|
} CoglBlendStringFunctionInfo;
|
|
|
|
typedef struct _CoglBlendStringStatement
|
|
{
|
|
CoglBlendStringChannelMask mask;
|
|
const CoglBlendStringFunctionInfo *function;
|
|
CoglBlendStringArgument args[3];
|
|
} CoglBlendStringStatement;
|
|
|
|
|
|
gboolean
|
|
_cogl_blend_string_compile (const char *string,
|
|
CoglBlendStringContext context,
|
|
CoglBlendStringStatement *statements,
|
|
GError **error);
|
|
|
|
void
|
|
_cogl_blend_string_split_rgba_statement (CoglBlendStringStatement *statement,
|
|
CoglBlendStringStatement *rgb,
|
|
CoglBlendStringStatement *a);
|
|
|
|
#endif /* COGL_BLEND_STRING_H */
|
|
|