Commit: 28e06bbe6117da80e86e9be78a25a9d2a83d7543
Author: Lukas Tönne
Date:   Tue Jul 19 17:10:13 2016 +0200
Branches: strand_gpu
https://developer.blender.org/rB28e06bbe6117da80e86e9be78a25a9d2a83d7543

Handle replacement of the shader cache for strands outside the creation 
function.

This makes it easier to run preparation code outside the gpu module 
conditionally.

===================================================================

M       source/blender/editors/space_view3d/drawstrands.c
M       source/blender/gpu/GPU_strands.h
M       source/blender/gpu/intern/gpu_strands_shader.c

===================================================================

diff --git a/source/blender/editors/space_view3d/drawstrands.c 
b/source/blender/editors/space_view3d/drawstrands.c
index 4c2f56d..78ca113 100644
--- a/source/blender/editors/space_view3d/drawstrands.c
+++ b/source/blender/editors/space_view3d/drawstrands.c
@@ -139,12 +139,16 @@ void draw_strands(Scene *scene, View3D *UNUSED(v3d), 
RegionView3D *rv3d,
                smd->gpu_buffer = GPU_strands_buffer_create(converter);
        GPUDrawStrands *buffer = smd->gpu_buffer;
        
-       GPUStrandsShaderParams shader_params;
-       shader_params.fiber_primitive = fiber_primitive;
-       shader_params.effects = get_effects(smd->effects);
-       shader_params.use_geomshader = use_geomshader;
-       shader_params.shader_model = get_shader_model(smd->shader_model);
-       GPUStrandsShader *shader = GPU_strand_shader_get(strands, 
&shader_params);
+       if (!strands->gpu_shader) {
+               GPUStrandsShaderParams shader_params;
+               shader_params.fiber_primitive = fiber_primitive;
+               shader_params.effects = get_effects(smd->effects);
+               shader_params.use_geomshader = use_geomshader;
+               shader_params.shader_model = 
get_shader_model(smd->shader_model);
+               
+               strands->gpu_shader = GPU_strand_shader_create(&shader_params);
+       }
+       GPUStrandsShader *shader = strands->gpu_shader;
        
        if (show_controls) {
                GPU_strands_setup_edges(buffer, converter);
diff --git a/source/blender/gpu/GPU_strands.h b/source/blender/gpu/GPU_strands.h
index e85bd65..0038bee 100644
--- a/source/blender/gpu/GPU_strands.h
+++ b/source/blender/gpu/GPU_strands.h
@@ -68,8 +68,7 @@ typedef struct GPUStrandsShaderParams {
        GPUStrands_ShaderModel shader_model;
 } GPUStrandsShaderParams;
 
-GPUStrandsShader *GPU_strand_shader_get(struct Strands *strands, struct 
GPUStrandsShaderParams *params);
-
+GPUStrandsShader *GPU_strand_shader_create(struct GPUStrandsShaderParams 
*params);
 void GPU_strand_shader_free(struct GPUStrandsShader *gpu_shader);
 
 void GPU_strand_shader_bind(
diff --git a/source/blender/gpu/intern/gpu_strands_shader.c 
b/source/blender/gpu/intern/gpu_strands_shader.c
index 6a1fce3..88bb4c7 100644
--- a/source/blender/gpu/intern/gpu_strands_shader.c
+++ b/source/blender/gpu/intern/gpu_strands_shader.c
@@ -205,12 +205,10 @@ static void get_shader_attributes(GPUShader *shader, bool 
use_geomshader,
        *r_num_attributes = (int)(attr - r_attributes);
 }
 
-GPUStrandsShader *GPU_strand_shader_get(Strands *strands, 
GPUStrandsShaderParams *params)
+GPUStrandsShader *GPU_strand_shader_create(GPUStrandsShaderParams *params)
 {
        bool use_geometry_shader = params->use_geomshader;
        
-       if (strands->gpu_shader != NULL)
-               return strands->gpu_shader;
        
        GPUStrandsShader *gpu_shader = MEM_callocN(sizeof(GPUStrandsShader), 
"GPUStrands");
        
@@ -266,7 +264,6 @@ GPUStrandsShader *GPU_strand_shader_get(Strands *strands, 
GPUStrandsShaderParams
                        MEM_freeN(debug_fragmentcode);
        }
        
-       strands->gpu_shader = gpu_shader;
        return gpu_shader;
 }

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to