Blender  V2.93
Classes | Macros | Variables
draw_manager_shader.c File Reference
#include "DNA_material_types.h"
#include "DNA_object_types.h"
#include "DNA_world_types.h"
#include "BLI_dynstr.h"
#include "BLI_listbase.h"
#include "BLI_string_utils.h"
#include "BLI_threads.h"
#include "BKE_context.h"
#include "BKE_global.h"
#include "BKE_main.h"
#include "DEG_depsgraph_query.h"
#include "GPU_capabilities.h"
#include "GPU_material.h"
#include "GPU_shader.h"
#include "WM_api.h"
#include "WM_types.h"
#include "wm_window.h"
#include "draw_manager.h"

Go to the source code of this file.

Classes

struct  DRWDeferredShader
 
struct  DRWShaderCompiler
 
struct  DRWShaderLibrary
 

Macros

#define USE_DEFERRED_COMPILATION   1
 

Variables

char datatoc_gpu_shader_2D_vert_glsl []
 
char datatoc_gpu_shader_3D_vert_glsl []
 
char datatoc_gpu_shader_depth_only_frag_glsl []
 
char datatoc_common_fullscreen_vert_glsl []
 

Shader Library

Simple include system for glsl files.

Usage: Create a DRWShaderLibrary and add the library in the right order. You can have nested dependencies but each new library needs to have all its dependencies already added to the DRWShaderLibrary. Finally you can use DRW_shader_library_create_shader_string to get a shader string that also contains the needed libraries for this shader.

#define MAX_LIB   32
 
#define MAX_LIB_NAME   64
 
#define MAX_LIB_DEPS   8
 
DRWShaderLibraryDRW_shader_library_create (void)
 
void DRW_shader_library_free (DRWShaderLibrary *lib)
 
static int drw_shader_library_search (const DRWShaderLibrary *lib, const char *name)
 
static uint32_t drw_shader_dependencies_get (const DRWShaderLibrary *lib, const char *lib_code)
 
void DRW_shader_library_add_file (DRWShaderLibrary *lib, char *lib_code, const char *lib_name)
 
char * DRW_shader_library_create_shader_string (const DRWShaderLibrary *lib, const char *shader_code)
 

Deferred Compilation (DRW_deferred)

typedef struct DRWDeferredShader DRWDeferredShader
 
typedef struct DRWShaderCompiler DRWShaderCompiler
 
static void drw_deferred_shader_free (DRWDeferredShader *dsh)
 
static void drw_deferred_shader_queue_free (ListBase *queue)
 
static void drw_deferred_shader_compilation_exec (void *custom_data, short *stop, short *do_update, float *progress)
 
static void drw_deferred_shader_compilation_free (void *custom_data)
 
static void drw_deferred_shader_add (GPUMaterial *mat, bool deferred)
 
void DRW_deferred_shader_remove (GPUMaterial *mat)
 
GPUShaderDRW_shader_create_ex (const char *vert, const char *geom, const char *frag, const char *defines, const char *name)
 
GPUShaderDRW_shader_create_with_lib_ex (const char *vert, const char *geom, const char *frag, const char *lib, const char *defines, const char *name)
 
GPUShaderDRW_shader_create_with_shaderlib_ex (const char *vert, const char *geom, const char *frag, const DRWShaderLibrary *lib, const char *defines, const char *name)
 
GPUShaderDRW_shader_create_with_transform_feedback (const char *vert, const char *geom, const char *defines, const eGPUShaderTFBType prim_type, const char **varying_names, const int varying_count)
 
GPUShaderDRW_shader_create_fullscreen_ex (const char *frag, const char *defines, const char *name)
 
GPUShaderDRW_shader_create_fullscreen_with_shaderlib_ex (const char *frag, const DRWShaderLibrary *lib, const char *defines, const char *name)
 
GPUMaterialDRW_shader_find_from_world (World *wo, const void *engine_type, const int options, bool deferred)
 
GPUMaterialDRW_shader_find_from_material (Material *ma, const void *engine_type, const int options, bool deferred)
 
GPUMaterialDRW_shader_create_from_world (struct Scene *scene, World *wo, struct bNodeTree *ntree, const void *engine_type, const int options, const bool is_volume_shader, const char *vert, const char *geom, const char *frag_lib, const char *defines, bool deferred, GPUMaterialEvalCallbackFn callback)
 
GPUMaterialDRW_shader_create_from_material (struct Scene *scene, Material *ma, struct bNodeTree *ntree, const void *engine_type, const int options, const bool is_volume_shader, const char *vert, const char *geom, const char *frag_lib, const char *defines, bool deferred, GPUMaterialEvalCallbackFn callback)
 
void DRW_shader_free (GPUShader *shader)
 

Macro Definition Documentation

◆ MAX_LIB

#define MAX_LIB   32

Definition at line 564 of file draw_manager_shader.c.

◆ MAX_LIB_DEPS

#define MAX_LIB_DEPS   8

Definition at line 566 of file draw_manager_shader.c.

◆ MAX_LIB_NAME

#define MAX_LIB_NAME   64

Definition at line 565 of file draw_manager_shader.c.

◆ USE_DEFERRED_COMPILATION

#define USE_DEFERRED_COMPILATION   1

Definition at line 54 of file draw_manager_shader.c.

Typedef Documentation

◆ DRWDeferredShader

◆ DRWShaderCompiler

Function Documentation

◆ drw_deferred_shader_add()

static void drw_deferred_shader_add ( GPUMaterial mat,
bool  deferred 
)
static

◆ drw_deferred_shader_compilation_exec()

static void drw_deferred_shader_compilation_exec ( void *  custom_data,
short *  stop,
short *  do_update,
float progress 
)
static

◆ drw_deferred_shader_compilation_free()

static void drw_deferred_shader_compilation_free ( void *  custom_data)
static

◆ drw_deferred_shader_free()

static void drw_deferred_shader_free ( DRWDeferredShader dsh)
static

◆ drw_deferred_shader_queue_free()

static void drw_deferred_shader_queue_free ( ListBase queue)
static

◆ DRW_deferred_shader_remove()

void DRW_deferred_shader_remove ( GPUMaterial mat)

◆ DRW_shader_create_ex()

GPUShader* DRW_shader_create_ex ( const char *  vert,
const char *  geom,
const char *  frag,
const char *  defines,
const char *  name 
)

Definition at line 332 of file draw_manager_shader.c.

References GPU_shader_create(), and NULL.

◆ DRW_shader_create_from_material()

GPUMaterial* DRW_shader_create_from_material ( struct Scene scene,
Material ma,
struct bNodeTree ntree,
const void *  engine_type,
const int  options,
const bool  is_volume_shader,
const char *  vert,
const char *  geom,
const char *  frag_lib,
const char *  defines,
bool  deferred,
GPUMaterialEvalCallbackFn  callback 
)

◆ DRW_shader_create_from_world()

GPUMaterial* DRW_shader_create_from_world ( struct Scene scene,
World wo,
struct bNodeTree ntree,
const void *  engine_type,
const int  options,
const bool  is_volume_shader,
const char *  vert,
const char *  geom,
const char *  frag_lib,
const char *  defines,
bool  deferred,
GPUMaterialEvalCallbackFn  callback 
)

◆ DRW_shader_create_fullscreen_ex()

GPUShader* DRW_shader_create_fullscreen_ex ( const char *  frag,
const char *  defines,
const char *  name 
)

◆ DRW_shader_create_fullscreen_with_shaderlib_ex()

GPUShader* DRW_shader_create_fullscreen_with_shaderlib_ex ( const char *  frag,
const DRWShaderLibrary lib,
const char *  defines,
const char *  name 
)

◆ DRW_shader_create_with_lib_ex()

GPUShader* DRW_shader_create_with_lib_ex ( const char *  vert,
const char *  geom,
const char *  frag,
const char *  lib,
const char *  defines,
const char *  name 
)

Definition at line 338 of file draw_manager_shader.c.

References BLI_string_joinN, GPU_shader_create(), lib, MEM_freeN, and NULL.

◆ DRW_shader_create_with_shaderlib_ex()

GPUShader* DRW_shader_create_with_shaderlib_ex ( const char *  vert,
const char *  geom,
const char *  frag,
const DRWShaderLibrary lib,
const char *  defines,
const char *  name 
)

◆ DRW_shader_create_with_transform_feedback()

GPUShader* DRW_shader_create_with_transform_feedback ( const char *  vert,
const char *  geom,
const char *  defines,
const eGPUShaderTFBType  prim_type,
const char **  varying_names,
const int  varying_count 
)

◆ drw_shader_dependencies_get()

static uint32_t drw_shader_dependencies_get ( const DRWShaderLibrary lib,
const char *  lib_code 
)
static

◆ DRW_shader_find_from_material()

GPUMaterial* DRW_shader_find_from_material ( Material ma,
const void *  engine_type,
const int  options,
bool  deferred 
)

◆ DRW_shader_find_from_world()

GPUMaterial* DRW_shader_find_from_world ( World wo,
const void *  engine_type,
const int  options,
bool  deferred 
)

◆ DRW_shader_free()

void DRW_shader_free ( GPUShader shader)

Definition at line 544 of file draw_manager_shader.c.

References GPU_shader_free(), and shader().

◆ DRW_shader_library_add_file()

void DRW_shader_library_add_file ( DRWShaderLibrary lib,
char *  lib_code,
const char *  lib_name 
)

◆ DRW_shader_library_create()

DRWShaderLibrary* DRW_shader_library_create ( void  )

◆ DRW_shader_library_create_shader_string()

char* DRW_shader_library_create_shader_string ( const DRWShaderLibrary lib,
const char *  shader_code 
)

◆ DRW_shader_library_free()

void DRW_shader_library_free ( DRWShaderLibrary lib)

Definition at line 579 of file draw_manager_shader.c.

References lib, and MEM_SAFE_FREE.

◆ drw_shader_library_search()

static int drw_shader_library_search ( const DRWShaderLibrary lib,
const char *  name 
)
static

Variable Documentation

◆ datatoc_common_fullscreen_vert_glsl

char datatoc_common_fullscreen_vert_glsl[]
extern

◆ datatoc_gpu_shader_2D_vert_glsl

char datatoc_gpu_shader_2D_vert_glsl[]
extern

◆ datatoc_gpu_shader_3D_vert_glsl

char datatoc_gpu_shader_3D_vert_glsl[]
extern

◆ datatoc_gpu_shader_depth_only_frag_glsl

char datatoc_gpu_shader_depth_only_frag_glsl[]
extern