[Bf-blender-cvs] [abe8c53fadc] temp-greasepencil-vfx: WIP: Initial steps to implement VFX again

Antonio Vazquez noreply at git.blender.org
Tue Jun 26 13:16:48 CEST 2018


Commit: abe8c53fadc4cae249757c75d1680310177f665e
Author: Antonio Vazquez
Date:   Mon Jun 25 22:29:41 2018 +0200
Branches: temp-greasepencil-vfx
https://developer.blender.org/rBabe8c53fadc4cae249757c75d1680310177f665e

WIP: Initial steps to implement VFX again

===================================================================

M	build_files/cmake/macros.cmake
M	source/blender/CMakeLists.txt
A	source/blender/blenkernel/BKE_shader_fx.h
M	source/blender/blenkernel/CMakeLists.txt
A	source/blender/blenkernel/intern/shader_fx.c
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/writefile.c
M	source/blender/editors/include/ED_object.h
M	source/blender/editors/object/CMakeLists.txt
M	source/blender/editors/object/object_intern.h
M	source/blender/editors/object/object_ops.c
A	source/blender/editors/object/object_shader_fx.c
M	source/blender/makesdna/DNA_object_types.h
A	source/blender/makesdna/DNA_shader_fx_types.h
M	source/blender/makesdna/intern/makesdna.c
M	source/blender/makesrna/RNA_access.h
M	source/blender/makesrna/RNA_enum_types.h
M	source/blender/makesrna/intern/CMakeLists.txt
M	source/blender/makesrna/intern/makesrna.c
M	source/blender/makesrna/intern/rna_internal.h
A	source/blender/makesrna/intern/rna_shader_fx.c
A	source/blender/shader_fx/CMakeLists.txt
A	source/blender/shader_fx/FX_shader_types.h
A	source/blender/shader_fx/intern/FX_shader_blur.c
A	source/blender/shader_fx/intern/FX_shader_flip.c
A	source/blender/shader_fx/intern/FX_shader_light.c
A	source/blender/shader_fx/intern/FX_shader_pixel.c
A	source/blender/shader_fx/intern/FX_shader_swirl.c
A	source/blender/shader_fx/intern/FX_shader_util.c
A	source/blender/shader_fx/intern/FX_shader_util.h
A	source/blender/shader_fx/intern/FX_shader_wave.c

===================================================================

diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake
index 123139fcd37..c976c74a1e6 100644
--- a/build_files/cmake/macros.cmake
+++ b/build_files/cmake/macros.cmake
@@ -627,6 +627,7 @@ function(SETUP_BLENDER_SORTED_LIBS)
 		bf_ikplugin
 		bf_modifiers
 		bf_gpencil_modifiers
+		bf_shader_fx
 		bf_alembic
 		bf_bmesh
 		bf_gpu
diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt
index 57eecd1c71e..2c9b1efe2f4 100644
--- a/source/blender/CMakeLists.txt
+++ b/source/blender/CMakeLists.txt
@@ -46,6 +46,7 @@ set(SRC_DNA_INC
 	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_genfile.h
 	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_gpencil_modifier_types.h
 	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_gpencil_types.h
+	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_shader_fx_types.h
 	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_gpu_types.h
 	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_group_types.h
 	${CMAKE_CURRENT_SOURCE_DIR}/makesdna/DNA_image_types.h
@@ -114,6 +115,7 @@ add_subdirectory(imbuf)
 add_subdirectory(nodes)
 add_subdirectory(modifiers)
 add_subdirectory(gpencil_modifiers)
+add_subdirectory(shader_fx)
 add_subdirectory(makesdna)
 add_subdirectory(makesrna)
 
diff --git a/source/blender/blenkernel/BKE_shader_fx.h b/source/blender/blenkernel/BKE_shader_fx.h
new file mode 100644
index 00000000000..fe3f03e3081
--- /dev/null
+++ b/source/blender/blenkernel/BKE_shader_fx.h
@@ -0,0 +1,206 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * 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.
+ *
+ * The Original Code is: all of this file.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+#ifndef __BKE_SHADER_FX_H__
+#define __BKE_SHADER_FX_H__
+
+/** \file BKE_shader_fx.h
+ *  \ingroup bke
+ */
+
+#include "DNA_shader_fx_types.h"     /* needed for all enum typdefs */
+#include "BLI_compiler_attrs.h"
+#include "BKE_customdata.h"
+
+struct ID;
+struct Depsgraph;
+struct DerivedMesh;
+struct bContext; /* NOTE: bakeModifier() - called from UI - needs to create new datablocks, hence the need for this */
+struct Mesh;
+struct Object;
+struct Scene;
+struct ViewLayer;
+struct ListBase;
+struct bArmature;
+struct Main;
+struct ShaderFxData;
+struct BMEditMesh;
+struct DepsNodeHandle;
+struct bGPDlayer;
+struct bGPDframe;
+struct bGPDstroke;
+struct ModifierUpdateDepsgraphContext;
+
+#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_Gpencil,
+}  ShaderFxType;
+
+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;
+
+/* IMPORTANT! Keep ObjectWalkFunc and IDWalkFunc signatures compatible. */
+typedef void(*ShaderFxObjectWalkFunc)(void *userData, struct Object *ob, struct Object **obpoin, int cb_flag);
+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;
+
+	ShaderFxType type;
+	ShaderFxTypeFlag flags;
+
+
+	/********************* Non-optional functions *********************/
+
+	/* 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);
+
+	/* create pass */
+	/* set shading group */
+	/* apply effect */
+	void(*generateStrokes)(struct GpencilModifierData *md, struct Depsgraph *depsgraph,
+		struct Object *ob, struct bGPDlayer *gpl, struct bGPDframe *gpf);
+
+	/********************* Optional functions *********************/
+
+	/* 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 on with a pointer to each Object
+	 * pointer that the effect data stores. This is used for linking on file
+	 * load and for unlinking objects or forwarding object references.
+	 *
+	 * This function is optional.
+	 */
+	void (*foreachObjectLink)(struct ShaderFxData *fx, struct Object *ob,
+	                          ShaderFxObjectWalkFunc walk, void *userData);
+
+	/* Should call the given walk function with a pointer to each ID
+	 * pointer (i.e. each datablock pointer) that the effect data
+	 * stores. This is used for linking on file load and for
+	 * unlinking datablocks or forwarding datablock references.
+	 *
+	 * This function is optional. If it is not present, foreachObjectLink
+	 * will be used.
+	 */
+	void (*foreachIDLink)(struct ShaderFxData *fx, struct Object *ob,
+	                      ShaderFxIDWalkFunc walk, void *userData);
+
+	/* Should call the given walk function for each texture that the
+	 * effect data stores. This is used for finding all textures in
+	 * the context for the UI.
+	 *
+	 * This function is optional. If it is not present, it will be
+	 * assumed the effect has no textures.
+	 */
+	void (*foreachTexLink)(struct ShaderFxData *fx, struct Object *ob,
+	                       ShaderFxTexWalkFunc walk, void *userData);
+} ShaderFxTypeInfo;
+
+/* Initialize  global data (type info and some common global storages). */
+void BKE_shaderfx_init(void);
+
+const ShaderFxTypeInfo *BKE_shaderfx_Type_getInfo(ShaderFxType type);
+struct ShaderFxData  *BKE_shaderfx_new(int type);
+void BKE_shaderfx_free_ex(struct ShaderFxData *fx, const int flag);
+void BKE_shaderfx_free(struct ShaderFxData *fx);
+bool BKE_shaderfx_unique_name(struct ListBase *shaderfx, struct ShaderFxData *fx);
+bool BKE_shaderfx_dependsOnTime(struct ShaderFxData *fx);
+struct ShaderFxData *BKE_shaderfx_findByType(struct Object *ob, ShaderFxType type);
+struct ShaderFxData *BKE_shaderfx_findByName(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, const int flag);
+void BKE_shaderfx_foreachIDLink(struct Object *ob, ShaderFxIDWalkFunc walk, void *userData);
+void BKE_shaderfx_foreachTexLink(struct Object *ob, ShaderFxTexWalkFunc walk, void *userData);
+
+void BKE_shaderfx_stroke_modifiers(
+	struct Depsgraph *depsgraph, struct Object *ob,
+	struct bGPDlayer *gpl, struct bGPDframe *gpf, struct bGPDstroke *gps, bool is_render);
+
+#endif /* __BKE_SHADER_FX_H__ */
diff --git a/source/blender/blenkernel/CMakeLists.txt b/source/blender/blenkernel/CMakeLists.txt
index 2cd8ce82836..cc381a4ba0b 100644
--- a/source/blender/blenkernel/CMakeLists.txt
+++ b/source/blender/blenkernel/CMakeLists.txt
@@ -39,6 +39,7 @@ set(INC
 	../bmesh
 	../modifiers
 	../gpencil_modifiers
+	../shader_fx
 	../nodes
 	../physics
 	../render/extern/include
@@ -183,6 +184,7 @@ set(SRC
 	intern/seqeffects.c
 	intern/seqmodifier.c
 	intern/sequencer.c
+	intern/shader_fx.c
 	intern/shrinkwrap.c
 	intern/smoke.c
 	intern/softbody.c
diff --git a/source/blender/blenkernel/intern/shader_fx.c b/source/blender/blenkernel/intern/shader_fx.c
new file mode 100644
index 00000000000..e71ec512ec1
--- /dev/null
+++ b/source/blender/blenkernel/intern/shader_fx.c
@@ -0,0 +1,679 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * 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 vers

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list