This repository has been archived on 2023-10-09. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
blender-archive/source/blender/blenkernel/BKE_shader_fx.h
Campbell Barton 3d3bc74884 Cleanup: remove redundant const qualifiers for POD types
MSVC used to warn about const mismatch for arguments passed by value.
Remove these as newer versions of MSVC no longer show this warning.
2022-01-07 14:16:26 +11:00

202 lines
7.0 KiB
C++

/*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software Foundation,
* Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#pragma once
/** \file
* \ingroup bke
*/
#include "BLI_compiler_attrs.h"
#include "DNA_shader_fx_types.h" /* needed for all enum typdefs */
#ifdef __cplusplus
extern "C" {
#endif
struct ARegionType;
struct BlendDataReader;
struct BlendLibReader;
struct BlendWriter;
struct ID;
struct ListBase;
struct ModifierUpdateDepsgraphContext;
struct Object;
struct ShaderFxData;
#define SHADER_FX_ACTIVE(_fx, _is_render) \
((((_fx)->mode & eShaderFxMode_Realtime) && (_is_render == false)) || \
(((_fx)->mode & eShaderFxMode_Render) && (_is_render == true)))
#define SHADER_FX_EDIT(_fx, _is_edit) ((((_fx)->mode & eShaderFxMode_Editmode) == 0) && (_is_edit))
typedef enum {
/* Should not be used, only for None type */
eShaderFxType_NoneType,
/* grease pencil effects */
eShaderFxType_GpencilType,
} ShaderFxTypeType;
typedef enum {
eShaderFxTypeFlag_SupportsEditmode = (1 << 0),
/* For effects that support editmode this determines if the
* effect should be enabled by default in editmode.
*/
eShaderFxTypeFlag_EnableInEditmode = (1 << 2),
/* max one per type */
eShaderFxTypeFlag_Single = (1 << 4),
/* can't be added manually by user */
eShaderFxTypeFlag_NoUserAdd = (1 << 5),
} ShaderFxTypeFlag;
typedef void (*ShaderFxIDWalkFunc)(void *userData,
struct Object *ob,
struct ID **idpoin,
int cb_flag);
typedef void (*ShaderFxTexWalkFunc)(void *userData,
struct Object *ob,
struct ShaderFxData *fx,
const char *propname);
typedef struct ShaderFxTypeInfo {
/* The user visible name for this effect */
char name[32];
/* The DNA struct name for the effect data type, used to
* write the DNA data out.
*/
char struct_name[32];
/* The size of the effect data type, used by allocation. */
int struct_size;
ShaderFxTypeType type;
ShaderFxTypeFlag flags;
/* Copy instance data for this effect type. Should copy all user
* level settings to the target effect.
*/
void (*copyData)(const struct ShaderFxData *fx, struct ShaderFxData *target);
/* Initialize new instance data for this effect type, this function
* should set effect variables to their default values.
*
* This function is optional.
*/
void (*initData)(struct ShaderFxData *fx);
/* Free internal effect data variables, this function should
* not free the fx variable itself.
*
* This function is optional.
*/
void (*freeData)(struct ShaderFxData *fx);
/* Return a boolean value indicating if this effect is able to be
* calculated based on the effect data. This is *not* regarding the
* fx->flag, that is tested by the system, this is just if the data
* validates (for example, a lattice will return false if the lattice
* object is not defined).
*
* This function is optional (assumes never disabled if not present).
*/
bool (*isDisabled)(struct ShaderFxData *fx, int userRenderParams);
/* Add the appropriate relations to the dependency graph.
*
* This function is optional.
*/
void (*updateDepsgraph)(struct ShaderFxData *fx,
const struct ModifierUpdateDepsgraphContext *ctx);
/* Should return true if the effect needs to be recalculated on time
* changes.
*
* This function is optional (assumes false if not present).
*/
bool (*dependsOnTime)(struct ShaderFxData *fx);
/* Should call the given walk function with a pointer to each ID
* pointer (i.e. each data-block pointer) that the effect data
* stores. This is used for linking on file load and for
* unlinking data-blocks or forwarding data-block references.
*
* This function is optional.
*/
void (*foreachIDLink)(struct ShaderFxData *fx,
struct Object *ob,
ShaderFxIDWalkFunc walk,
void *userData);
/* Register the panel types for the effect's UI. */
void (*panelRegister)(struct ARegionType *region_type);
} ShaderFxTypeInfo;
#define SHADERFX_TYPE_PANEL_PREFIX "FX_PT_"
/**
* Initialize global data (type info and some common global storage).
*/
void BKE_shaderfx_init(void);
/**
* Get an effect's panel type, which was defined in the #panelRegister callback.
*
* \note ShaderFx panel types are assumed to be named with the struct name field concatenated to
* the defined prefix.
*/
void BKE_shaderfxType_panel_id(ShaderFxType type, char *r_idname);
void BKE_shaderfx_panel_expand(struct ShaderFxData *fx);
const ShaderFxTypeInfo *BKE_shaderfx_get_info(ShaderFxType type);
struct ShaderFxData *BKE_shaderfx_new(int type);
void BKE_shaderfx_free_ex(struct ShaderFxData *fx, int flag);
void BKE_shaderfx_free(struct ShaderFxData *fx);
/**
* Check unique name.
*/
bool BKE_shaderfx_unique_name(struct ListBase *shaderfx, struct ShaderFxData *fx);
bool BKE_shaderfx_depends_ontime(struct ShaderFxData *fx);
/**
* Check whether given shaderfx is not local (i.e. from linked data) when the object is a library
* override.
*
* \param shaderfx: May be NULL, in which case we consider it as a non-local shaderfx case.
*/
bool BKE_shaderfx_is_nonlocal_in_liboverride(const struct Object *ob,
const struct ShaderFxData *shaderfx);
struct ShaderFxData *BKE_shaderfx_findby_type(struct Object *ob, ShaderFxType type);
struct ShaderFxData *BKE_shaderfx_findby_name(struct Object *ob, const char *name);
void BKE_shaderfx_copydata_generic(const struct ShaderFxData *fx_src, struct ShaderFxData *fx_dst);
void BKE_shaderfx_copydata(struct ShaderFxData *fx, struct ShaderFxData *target);
void BKE_shaderfx_copydata_ex(struct ShaderFxData *fx, struct ShaderFxData *target, int flag);
void BKE_shaderfx_copy(struct ListBase *dst, const struct ListBase *src);
void BKE_shaderfx_foreach_ID_link(struct Object *ob, ShaderFxIDWalkFunc walk, void *userData);
/**
* Check if exist grease pencil effects.
*/
bool BKE_shaderfx_has_gpencil(const struct Object *ob);
void BKE_shaderfx_blend_write(struct BlendWriter *writer, struct ListBase *fxbase);
void BKE_shaderfx_blend_read_data(struct BlendDataReader *reader, struct ListBase *lb);
void BKE_shaderfx_blend_read_lib(struct BlendLibReader *reader, struct Object *ob);
#ifdef __cplusplus
}
#endif