Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/intern/DRW_render.h
| Show All 35 Lines | |||||
| #include "GPU_uniform_buffer.h" | #include "GPU_uniform_buffer.h" | ||||
| #include "draw_cache.h" | #include "draw_cache.h" | ||||
| #include "draw_common.h" | #include "draw_common.h" | ||||
| #include "draw_view.h" | #include "draw_view.h" | ||||
| #include "draw_debug.h" | #include "draw_debug.h" | ||||
| #include "draw_manager_profiling.h" | #include "draw_manager_profiling.h" | ||||
| #include "draw_state.h" | |||||
| #include "draw_view_data.h" | #include "draw_view_data.h" | ||||
| #include "MEM_guardedalloc.h" | #include "MEM_guardedalloc.h" | ||||
| #include "RE_engine.h" | #include "RE_engine.h" | ||||
| #include "DEG_depsgraph.h" | #include "DEG_depsgraph.h" | ||||
| ▲ Show 20 Lines • Show All 231 Lines • ▼ Show 20 Lines | do { \ | ||||
| if (lib != NULL) { \ | if (lib != NULL) { \ | ||||
| DRW_shader_library_free(lib); \ | DRW_shader_library_free(lib); \ | ||||
| lib = NULL; \ | lib = NULL; \ | ||||
| } \ | } \ | ||||
| } while (0) | } while (0) | ||||
| /* Batches */ | /* Batches */ | ||||
| /** | |||||
| * DRWState is a bit-mask that stores the current render state and the desired render state. Based | |||||
| * on the differences the minimum state changes can be invoked to setup the desired render state. | |||||
| * | |||||
| * The Write Stencil, Stencil test, Depth test and Blend state options are mutual exclusive | |||||
| * therefore they aren't ordered as a bit mask. | |||||
| */ | |||||
| typedef enum { | |||||
| /** To be used for compute passes. */ | |||||
| DRW_STATE_NO_DRAW = 0, | |||||
| /** Write mask */ | |||||
| DRW_STATE_WRITE_DEPTH = (1 << 0), | |||||
| DRW_STATE_WRITE_COLOR = (1 << 1), | |||||
| /* Write Stencil. These options are mutual exclusive and packed into 2 bits */ | |||||
| DRW_STATE_WRITE_STENCIL = (1 << 2), | |||||
| DRW_STATE_WRITE_STENCIL_SHADOW_PASS = (2 << 2), | |||||
| DRW_STATE_WRITE_STENCIL_SHADOW_FAIL = (3 << 2), | |||||
| /** Depth test. These options are mutual exclusive and packed into 3 bits */ | |||||
| DRW_STATE_DEPTH_ALWAYS = (1 << 4), | |||||
| DRW_STATE_DEPTH_LESS = (2 << 4), | |||||
| DRW_STATE_DEPTH_LESS_EQUAL = (3 << 4), | |||||
| DRW_STATE_DEPTH_EQUAL = (4 << 4), | |||||
| DRW_STATE_DEPTH_GREATER = (5 << 4), | |||||
| DRW_STATE_DEPTH_GREATER_EQUAL = (6 << 4), | |||||
| /** Culling test */ | |||||
| DRW_STATE_CULL_BACK = (1 << 7), | |||||
| DRW_STATE_CULL_FRONT = (1 << 8), | |||||
| /** Stencil test. These options are mutually exclusive and packed into 2 bits. */ | |||||
| DRW_STATE_STENCIL_ALWAYS = (1 << 9), | |||||
| DRW_STATE_STENCIL_EQUAL = (2 << 9), | |||||
| DRW_STATE_STENCIL_NEQUAL = (3 << 9), | |||||
| /** Blend state. These options are mutual exclusive and packed into 4 bits */ | |||||
| DRW_STATE_BLEND_ADD = (1 << 11), | |||||
| /** Same as additive but let alpha accumulate without pre-multiply. */ | |||||
| DRW_STATE_BLEND_ADD_FULL = (2 << 11), | |||||
| /** Standard alpha blending. */ | |||||
| DRW_STATE_BLEND_ALPHA = (3 << 11), | |||||
| /** Use that if color is already pre-multiply by alpha. */ | |||||
| DRW_STATE_BLEND_ALPHA_PREMUL = (4 << 11), | |||||
| DRW_STATE_BLEND_BACKGROUND = (5 << 11), | |||||
| DRW_STATE_BLEND_OIT = (6 << 11), | |||||
| DRW_STATE_BLEND_MUL = (7 << 11), | |||||
| DRW_STATE_BLEND_SUB = (8 << 11), | |||||
| /** Use dual source blending. WARNING: Only one color buffer allowed. */ | |||||
| DRW_STATE_BLEND_CUSTOM = (9 << 11), | |||||
| DRW_STATE_LOGIC_INVERT = (10 << 11), | |||||
| DRW_STATE_BLEND_ALPHA_UNDER_PREMUL = (11 << 11), | |||||
| DRW_STATE_IN_FRONT_SELECT = (1 << 27), | |||||
| DRW_STATE_SHADOW_OFFSET = (1 << 28), | |||||
| DRW_STATE_CLIP_PLANES = (1 << 29), | |||||
| DRW_STATE_FIRST_VERTEX_CONVENTION = (1 << 30), | |||||
| /** DO NOT USE. Assumed always enabled. Only used internally. */ | |||||
| DRW_STATE_PROGRAM_POINT_SIZE = (1u << 31), | |||||
| } DRWState; | |||||
| ENUM_OPERATORS(DRWState, DRW_STATE_PROGRAM_POINT_SIZE); | |||||
| #define DRW_STATE_DEFAULT \ | |||||
| (DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL) | |||||
| #define DRW_STATE_BLEND_ENABLED \ | |||||
| (DRW_STATE_BLEND_ADD | DRW_STATE_BLEND_ADD_FULL | DRW_STATE_BLEND_ALPHA | \ | |||||
| DRW_STATE_BLEND_ALPHA_PREMUL | DRW_STATE_BLEND_BACKGROUND | DRW_STATE_BLEND_OIT | \ | |||||
| DRW_STATE_BLEND_MUL | DRW_STATE_BLEND_SUB | DRW_STATE_BLEND_CUSTOM | DRW_STATE_LOGIC_INVERT) | |||||
| #define DRW_STATE_RASTERIZER_ENABLED \ | |||||
| (DRW_STATE_WRITE_DEPTH | DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_STENCIL | \ | |||||
| DRW_STATE_WRITE_STENCIL_SHADOW_PASS | DRW_STATE_WRITE_STENCIL_SHADOW_FAIL) | |||||
| #define DRW_STATE_DEPTH_TEST_ENABLED \ | |||||
| (DRW_STATE_DEPTH_ALWAYS | DRW_STATE_DEPTH_LESS | DRW_STATE_DEPTH_LESS_EQUAL | \ | |||||
| DRW_STATE_DEPTH_EQUAL | DRW_STATE_DEPTH_GREATER | DRW_STATE_DEPTH_GREATER_EQUAL) | |||||
| #define DRW_STATE_STENCIL_TEST_ENABLED \ | |||||
| (DRW_STATE_STENCIL_ALWAYS | DRW_STATE_STENCIL_EQUAL | DRW_STATE_STENCIL_NEQUAL) | |||||
| #define DRW_STATE_WRITE_STENCIL_ENABLED \ | |||||
| (DRW_STATE_WRITE_STENCIL | DRW_STATE_WRITE_STENCIL_SHADOW_PASS | \ | |||||
| DRW_STATE_WRITE_STENCIL_SHADOW_FAIL) | |||||
| typedef enum { | typedef enum { | ||||
| DRW_ATTR_INT, | DRW_ATTR_INT, | ||||
| DRW_ATTR_FLOAT, | DRW_ATTR_FLOAT, | ||||
| } eDRWAttrType; | } eDRWAttrType; | ||||
| typedef struct DRWInstanceAttrFormat { | typedef struct DRWInstanceAttrFormat { | ||||
| char name[32]; | char name[32]; | ||||
| eDRWAttrType type; | eDRWAttrType type; | ||||
| ▲ Show 20 Lines • Show All 640 Lines • Show Last 20 Lines | |||||