Blender  V3.3
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 "PIL_time.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"
#include "CLG_log.h"

Go to the source code of this file.

Classes

struct  DRWShaderCompiler
 
struct  DRWShaderLibrary
 

Macros

#define USE_DEFERRED_COMPILATION   1
 

Variables

static CLG_LogRef LOG = {"draw.manager.shader"}
 
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   64
 
#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 uint64_t drw_shader_dependencies_get (const DRWShaderLibrary *lib, const char *pragma_str, const char *lib_code, const char *UNUSED(lib_name))
 
void DRW_shader_library_add_file (DRWShaderLibrary *lib, const 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 DRWShaderCompiler DRWShaderCompiler
 
static void drw_deferred_shader_compilation_exec (void *custom_data, short *stop, short *UNUSED(do_update), float *UNUSED(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_from_world (World *wo, struct bNodeTree *ntree, const uint64_t shader_id, const bool is_volume_shader, bool deferred, GPUCodegenCallbackFn callback, void *thunk)
 
GPUMaterialDRW_shader_from_material (Material *ma, struct bNodeTree *ntree, const uint64_t shader_id, const bool is_volume_shader, bool deferred, GPUCodegenCallbackFn callback, void *thunk)
 
void DRW_shader_free (GPUShader *shader)
 

Macro Definition Documentation

◆ MAX_LIB

#define MAX_LIB   64

Definition at line 439 of file draw_manager_shader.c.

◆ MAX_LIB_DEPS

#define MAX_LIB_DEPS   8

Definition at line 441 of file draw_manager_shader.c.

◆ MAX_LIB_NAME

#define MAX_LIB_NAME   64

Definition at line 440 of file draw_manager_shader.c.

◆ USE_DEFERRED_COMPILATION

#define USE_DEFERRED_COMPILATION   1

Definition at line 43 of file draw_manager_shader.c.

Typedef Documentation

◆ 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 *  UNUSEDdo_update,
float UNUSEDprogress 
)
static

◆ drw_deferred_shader_compilation_free()

static void drw_deferred_shader_compilation_free ( void custom_data)
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 265 of file draw_manager_shader.c.

References GPU_shader_create(), and NULL.

◆ 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 271 of file draw_manager_shader.c.

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

◆ 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 uint64_t drw_shader_dependencies_get ( const DRWShaderLibrary lib,
const char *  pragma_str,
const char *  lib_code,
const char *  UNUSEDlib_name 
)
static

◆ DRW_shader_free()

void DRW_shader_free ( GPUShader shader)

Definition at line 419 of file draw_manager_shader.c.

References GPU_shader_free().

◆ DRW_shader_from_material()

GPUMaterial* DRW_shader_from_material ( Material ma,
struct bNodeTree ntree,
const uint64_t  shader_id,
const bool  is_volume_shader,
bool  deferred,
GPUCodegenCallbackFn  callback,
void thunk 
)

◆ DRW_shader_from_world()

GPUMaterial* DRW_shader_from_world ( World wo,
struct bNodeTree ntree,
const uint64_t  shader_id,
const bool  is_volume_shader,
bool  deferred,
GPUCodegenCallbackFn  callback,
void thunk 
)

◆ DRW_shader_library_add_file()

void DRW_shader_library_add_file ( DRWShaderLibrary lib,
const char *  lib_code,
const char *  lib_name 
)
Warning
Each library must be added after all its dependencies.

Definition at line 510 of file draw_manager_shader.c.

References BLI_assert, BLI_strncpy(), drw_shader_dependencies_get(), lib, DRWShaderLibrary::libs, DRWShaderLibrary::libs_deps, DRWShaderLibrary::libs_name, MAX_LIB, MAX_LIB_NAME, and NULL.

◆ DRW_shader_library_create()

DRWShaderLibrary* DRW_shader_library_create ( void  )

Definition at line 449 of file draw_manager_shader.c.

References MEM_callocN.

Referenced by eevee_shader_library_ensure().

◆ 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 454 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_depth_only_frag_glsl

char datatoc_gpu_shader_depth_only_frag_glsl[]
extern

◆ LOG

CLG_LogRef LOG = {"draw.manager.shader"}
static

Definition at line 38 of file draw_manager_shader.c.

Referenced by drw_shader_dependencies_get().