static const char *gpu_shader_standard_extensions(void) { /* need this extensions for high quality bump mapping */ if (GPU_bicubic_bump_support()) return "#extension GL_ARB_texture_query_lod: enable\n"; return ""; }
static void gpu_shader_standard_defines(char defines[MAX_DEFINE_LENGTH], bool use_opensubdiv, bool use_instancing, bool use_new_shading) { /* some useful defines to detect GPU type */ if (GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_ANY, GPU_DRIVER_ANY)) { strcat(defines, "#define GPU_ATI\n"); if (GLEW_VERSION_3_0) { /* TODO(merwin): revisit this version check; GLEW_VERSION_3_0 means GL 3.0 or newer */ strcat(defines, "#define CLIP_WORKAROUND\n"); } } else if (GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_ANY, GPU_DRIVER_ANY)) strcat(defines, "#define GPU_NVIDIA\n"); else if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_ANY, GPU_DRIVER_ANY)) strcat(defines, "#define GPU_INTEL\n"); if (GPU_bicubic_bump_support()) strcat(defines, "#define BUMP_BICUBIC\n"); if (GLEW_VERSION_3_0) { strcat(defines, "#define BIT_OPERATIONS\n"); } #ifdef WITH_OPENSUBDIV /* TODO(sergey): Check whether we actually compiling shader for * the OpenSubdiv mesh. */ if (use_opensubdiv) { strcat(defines, "#define USE_OPENSUBDIV\n"); /* TODO(sergey): not strictly speaking a define, but this is * a global typedef which we don't have better place to define * in yet. */ strcat(defines, "struct VertexData {\n" " vec4 position;\n" " vec3 normal;\n" " vec2 uv;" "};\n"); } #else UNUSED_VARS(use_opensubdiv); #endif if (use_instancing) { strcat(defines, "#define USE_INSTANCING\n"); } if (use_new_shading) { strcat(defines, "#define USE_NEW_SHADING\n"); } return; }
static const char *gpu_shader_version(void) { /* turn on glsl 1.30 for bicubic bump mapping and ATI clipping support */ if (GLEW_VERSION_3_0 && (GPU_bicubic_bump_support() || GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_ANY, GPU_DRIVER_ANY))) { return "#version 130\n"; } return ""; }
static void gpu_shader_standard_defines(char defines[MAX_DEFINE_LENGTH]) { /* some useful defines to detect GPU type */ if (GPU_type_matches(GPU_DEVICE_ATI, GPU_OS_ANY, GPU_DRIVER_ANY)) { strcat(defines, "#define GPU_ATI\n"); if (GLEW_VERSION_3_0) strcat(defines, "#define CLIP_WORKAROUND"); } else if (GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_ANY, GPU_DRIVER_ANY)) strcat(defines, "#define GPU_NVIDIA\n"); else if (GPU_type_matches(GPU_DEVICE_INTEL, GPU_OS_ANY, GPU_DRIVER_ANY)) strcat(defines, "#define GPU_INTEL\n"); if (GPU_bicubic_bump_support()) strcat(defines, "#define BUMP_BICUBIC\n"); return; }
void GPU_code_generate_glsl_lib(void) { DynStr *ds; /* only initialize the library once */ if (glsl_material_library) return; ds = BLI_dynstr_new(); if (GPU_bicubic_bump_support()) { BLI_dynstr_append(ds, "/* These are needed for high quality bump mapping */\n" "#version 130\n" "#extension GL_ARB_texture_query_lod: enable\n" "#define BUMP_BICUBIC\n"); } BLI_dynstr_append(ds, datatoc_gpu_shader_material_glsl); glsl_material_library = BLI_dynstr_get_cstring(ds); BLI_dynstr_free(ds); }