diff options
Diffstat (limited to 'source/blender/gpu/intern/gpu_codegen.h')
-rw-r--r-- | source/blender/gpu/intern/gpu_codegen.h | 72 |
1 files changed, 34 insertions, 38 deletions
diff --git a/source/blender/gpu/intern/gpu_codegen.h b/source/blender/gpu/intern/gpu_codegen.h index a0698235db6..a6da5e018fd 100644 --- a/source/blender/gpu/intern/gpu_codegen.h +++ b/source/blender/gpu/intern/gpu_codegen.h @@ -33,6 +33,7 @@ #ifndef __GPU_CODEGEN_H__ #define __GPU_CODEGEN_H__ +#include "DNA_customdata_types.h" #include "DNA_listBase.h" #include "GPU_material.h" #include "GPU_glew.h" @@ -45,22 +46,6 @@ struct GPUVertexAttribs; struct GPUFrameBuffer; struct PreviewImage; -#define MAX_FUNCTION_NAME 64 -#define MAX_PARAMETER 32 - -#define FUNCTION_QUAL_IN 0 -#define FUNCTION_QUAL_OUT 1 -#define FUNCTION_QUAL_INOUT 2 - -typedef struct GPUFunction { - char name[MAX_FUNCTION_NAME]; - int paramtype[MAX_PARAMETER]; - int paramqual[MAX_PARAMETER]; - int totparam; -} GPUFunction; - -GPUFunction *GPU_lookup_function(const char *name); - /* Pass Generation * - Takes a list of nodes and a desired output, and makes a pass. This * will take ownership of the nodes and free them early if unused or @@ -76,11 +61,19 @@ typedef enum GPUDataSource { GPU_SOURCE_ATTRIB } GPUDataSource; +typedef enum { + GPU_NODE_LINK_IMAGE_NONE = 0, + GPU_NODE_LINK_IMAGE_BLENDER = 1, + GPU_NODE_LINK_IMAGE_PREVIEW = 2 +} GPUNodeLinkImage; + struct GPUNode { struct GPUNode *next, *prev; const char *name; - int tag; + + /* Internal flag to mark nodes during pruning */ + bool tag; ListBase inputs; ListBase outputs; @@ -89,21 +82,23 @@ struct GPUNode { struct GPUNodeLink { GPUNodeStack *socket; - int attribtype; + CustomDataType attribtype; const char *attribname; - int image; - int image_isdata; + GPUNodeLinkImage image; + bool image_isdata; - int texture; + bool texture; int texturesize; void *ptr1, *ptr2; - int dynamic; - int dynamictype; + bool dynamic; + GPUDynamicType dynamictype; + + GPUType type; - int type; + /* Refcount */ int users; struct GPUTexture *dynamictex; @@ -118,7 +113,7 @@ typedef struct GPUOutput { struct GPUOutput *next, *prev; GPUNode *node; - int type; /* data type = length of vector/matrix */ + GPUType type; /* data type = length of vector/matrix */ GPUNodeLink *link; /* output link */ int id; /* unique id as created by code generator */ } GPUOutput; @@ -128,23 +123,23 @@ typedef struct GPUInput { GPUNode *node; - int type; /* datatype */ - int source; /* data source */ + GPUType type; /* datatype */ + GPUDataSource source; /* data source */ int id; /* unique id as created by code generator */ - int texid; /* number for multitexture */ + int texid; /* number for multitexture, starting from zero */ int attribid; /* id for vertex attributes */ - int bindtex; /* input is responsible for binding the texture? */ - int definetex; /* input is responsible for defining the pixel? */ - int textarget; /* GL_TEXTURE_* */ - int textype; /* datatype */ + bool bindtex; /* input is responsible for binding the texture? */ + bool definetex; /* input is responsible for defining the pixel? */ + int textarget; /* GL texture target, e.g. GL_TEXTURE_2D */ + GPUType textype; /* datatype */ struct Image *ima; /* image */ struct ImageUser *iuser;/* image user */ struct PreviewImage *prv; /* preview images & icons */ - int image_isdata; /* image does not contain color data */ + bool image_isdata; /* image does not contain color data */ float *dynamicvec; /* vector data in case it is dynamic */ - int dynamictype; /* origin of the dynamic uniform (GPUDynamicType) */ + GPUDynamicType dynamictype; /* origin of the dynamic uniform */ void *dynamicdata; /* data source of the dynamic uniform */ struct GPUTexture *tex; /* input texture, only set at runtime */ int shaderloc; /* id from opengl */ @@ -152,9 +147,9 @@ typedef struct GPUInput { float vec[16]; /* vector data */ GPUNodeLink *link; - int dynamictex; /* dynamic? */ - int attribtype; /* attribute type */ - char attribname[32]; /* attribute name */ + bool dynamictex; /* dynamic? */ + CustomDataType attribtype; /* attribute type */ + char attribname[MAX_CUSTOMDATA_LAYER_NAME]; /* attribute name */ int attribfirst; /* this is the first one that is bound */ GPUBuiltin builtin; /* builtin uniform */ GPUOpenGLBuiltin oglbuiltin; /* opengl built in varying */ @@ -175,7 +170,8 @@ struct GPUPass { typedef struct GPUPass GPUPass; GPUPass *GPU_generate_pass(ListBase *nodes, struct GPUNodeLink *outlink, - struct GPUVertexAttribs *attribs, int *builtin, int type, const char *name); + struct GPUVertexAttribs *attribs, int *builtin, + const GPUMatType type, const char *name); struct GPUShader *GPU_pass_shader(GPUPass *pass); |