[Bf-blender-cvs] [0944c314515] soc-2018-npr: render_to_image implemented, but not working correctly.

Nick Wu noreply at git.blender.org
Tue Jun 19 05:29:04 CEST 2018


Commit: 0944c31451554c99c34632f14c097a5cd6763bf8
Author: Nick Wu
Date:   Fri Jun 15 22:03:19 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB0944c31451554c99c34632f14c097a5cd6763bf8

render_to_image implemented, but not working correctly.

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

M	source/blender/draw/engines/lanpr/lanpr_dpix.c
M	source/blender/draw/engines/lanpr/lanpr_engine.c
M	source/blender/draw/engines/lanpr/lanpr_snake.c
M	source/blender/draw/engines/lanpr/shaders/lanpr_atlas_project_clip.fragment

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

diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 8f8ddaa3434..4324efe7705 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -13,6 +13,7 @@
 #include "DNA_lanpr_types.h"
 #include "DNA_meshdata_types.h"
 #include "BKE_customdata.h"
+#include "DEG_depsgraph_query.h"
 #include "GPU_draw.h"
 
 #include "GPU_batch.h"
@@ -36,11 +37,8 @@ void lanpr_init_atlas_inputs(void *ved){
 	LANPR_TextureList *txl = vedata->txl;
 	LANPR_FramebufferList *fbl = vedata->fbl;
 	LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
-	//LANPR_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
 	DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
 
-	//txl->dpix_in_pl = 
-
 	const DRWContextState *draw_ctx = DRW_context_state_get();
 	View3D *v3d = draw_ctx->v3d;
 	RegionView3D *rv3d = draw_ctx->rv3d;
@@ -58,9 +56,6 @@ void lanpr_init_atlas_inputs(void *ved){
 		DRW_texture_ensure_2D(&txl->dpix_out_length, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
 	}
 
-
-	/* Main Buffer */
-
 	GPU_framebuffer_ensure_config(&fbl->dpix_transform, {
 		GPU_ATTACHMENT_LEAVE,
 		GPU_ATTACHMENT_TEXTURE(txl->dpix_out_pl),
@@ -94,7 +89,6 @@ void lanpr_init_atlas_inputs(void *ved){
 		    datatoc_lanpr_atlas_project_passthrough_vertex,
 			datatoc_lanpr_atlas_preview_fragment,
 			datatoc_lanpr_atlas_preview_geometry,
-			//NULL,
 			NULL,NULL);
     }
 }
@@ -139,7 +133,6 @@ int lanpr_feed_atlas_data_obj(void* vedata,
 	struct BMVert *v1,*v2;
 	struct BMEdge *e;
 	struct BMLoop *l1,*l2;
-	//struct MEdge* ome;
 	FreestyleEdge *fe;
 	int CanFindFreestyle=0;
     int vert_count = me->totvert, edge_count = me->totedge, face_count = me->totface;
@@ -221,6 +214,7 @@ void lanpr_dpix_index_to_coord(int index, float* x,float* y){
     (*x) = tnsLinearItp(-1,1,(float)(index % TNS_DPIX_TEXTURE_SIZE+0.5)/(float)TNS_DPIX_TEXTURE_SIZE);
 	(*y) = tnsLinearItp(-1,1,(float)(index / TNS_DPIX_TEXTURE_SIZE+0.5)/(float)TNS_DPIX_TEXTURE_SIZE);
 }
+
 void lanpr_dpix_index_to_coord_absolute(int index, float* x,float* y){
 	(*x) = (float)(index % TNS_DPIX_TEXTURE_SIZE)+0.5;
     (*y) = (float)(index / TNS_DPIX_TEXTURE_SIZE)+0.5;
@@ -273,41 +267,47 @@ int lanpr_feed_atlas_trigger_preview_obj(void* vedata, Object* ob, int BeginInde
 
 
 void lanpr_dpix_draw_scene(LANPR_TextureList* txl, LANPR_FramebufferList * fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr){
-    	float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
-	    float clear_depth = 1.0f;
-	    uint clear_stencil = 0xFF;
-
-        DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
-	    DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
-
-        int texw = GPU_texture_width(txl->edge_intermediate) ,texh = GPU_texture_height(txl->edge_intermediate);;
-	    int tsize = texw*texh;
-
-		const DRWContextState *draw_ctx = DRW_context_state_get();
-		View3D *v3d = draw_ctx->v3d;
-	    RegionView3D *rv3d = draw_ctx->rv3d;
-	    Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
-        
-        pd->dpix_viewport[2] = texw;
-		pd->dpix_viewport[3] = texh;
-		pd->dpix_is_perspective = 1;
-		pd->dpix_sample_step = 1;
-		pd->dpix_buffer_width = TNS_DPIX_TEXTURE_SIZE;
-		pd->dpix_depth_offset=0.0001;
-		pd->dpix_znear = camera?((Camera*)camera->data)->clipsta:v3d->near;
-		pd->dpix_zfar = camera?((Camera*)camera->data)->clipend:v3d->far;
-
-        glPointSize(1);
-		glLineWidth(2);
-		GPU_framebuffer_bind(fbl->dpix_transform);
-		DRW_draw_pass(psl->dpix_transform_pass);
-
-		GPU_framebuffer_bind(fbl->dpix_preview);
-		GPUFrameBufferBits clear_bits = GPU_COLOR_BIT;
-		GPU_framebuffer_clear(fbl->dpix_preview, clear_bits, lanpr->background_color, clear_depth, clear_stencil);
-		DRW_draw_pass(psl->dpix_preview_pass);
-
-		GPU_framebuffer_bind(dfbl->default_fb);
-		GPU_framebuffer_clear(dfbl->default_fb, clear_bits, lanpr->background_color, clear_depth, clear_stencil);
-		DRW_multisamples_resolve(txl->depth,txl->color);  
+	float clear_col[4] = {0.0f, 0.0f, 0.0f, 0.0f};
+	float clear_depth = 1.0f;
+	uint clear_stencil = 0xFF;
+
+	DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
+	DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+
+	int texw = GPU_texture_width(txl->edge_intermediate) ,texh = GPU_texture_height(txl->edge_intermediate);;
+	int tsize = texw*texh;
+
+	const DRWContextState *draw_ctx = DRW_context_state_get();
+	Scene *scene = DEG_get_evaluated_scene(draw_ctx->depsgraph);
+	View3D *v3d = draw_ctx->v3d;
+	Object *camera;
+	if(v3d){
+		RegionView3D *rv3d = draw_ctx->rv3d;
+		camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
+	}else{
+		camera = scene->camera;
+	}
+		
+	pd->dpix_viewport[2] = texw;
+	pd->dpix_viewport[3] = texh;
+	pd->dpix_is_perspective = 1;
+	pd->dpix_sample_step = 1;
+	pd->dpix_buffer_width = TNS_DPIX_TEXTURE_SIZE;
+	pd->dpix_depth_offset=0.0001;
+	pd->dpix_znear = camera?((Camera*)camera->data)->clipsta:v3d->near;
+	pd->dpix_zfar = camera?((Camera*)camera->data)->clipend:v3d->far;
+
+	glPointSize(1);
+	glLineWidth(2);
+	GPU_framebuffer_bind(fbl->dpix_transform);
+	DRW_draw_pass(psl->dpix_transform_pass);
+
+	GPU_framebuffer_bind(fbl->dpix_preview);
+	GPUFrameBufferBits clear_bits = GPU_COLOR_BIT;
+	GPU_framebuffer_clear(fbl->dpix_preview, clear_bits, lanpr->background_color, clear_depth, clear_stencil);
+	DRW_draw_pass(psl->dpix_preview_pass);
+
+	GPU_framebuffer_bind(dfbl->default_fb);
+	GPU_framebuffer_clear(dfbl->default_fb, clear_bits, lanpr->background_color, clear_depth, clear_stencil);
+	DRW_multisamples_resolve(txl->depth,txl->color);  
 }
diff --git a/source/blender/draw/engines/lanpr/lanpr_engine.c b/source/blender/draw/engines/lanpr/lanpr_engine.c
index 5e0202468f1..cd64a1d81cc 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -12,6 +12,9 @@
 #include "GPU_framebuffer.h"
 #include "DNA_lanpr_types.h"
 #include "GPU_draw.h"
+#include "DEG_depsgraph_query.h"
+#include "RE_pipeline.h"
+#include "BLI_rect.h"
 
 #include "GPU_batch.h"
 #include "GPU_framebuffer.h"
@@ -43,18 +46,19 @@ static void lanpr_engine_init(void *ved){
 	LANPR_TextureList *txl = vedata->txl;
 	LANPR_FramebufferList *fbl = vedata->fbl;
 	LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
-	//LANPR_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
 	DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
 
-	//if(!stl->g_data) stl->g_data = MEM_callocN(sizeof(*stl->g_data), __func__);
-
 	const DRWContextState *draw_ctx = DRW_context_state_get();
+	Scene *scene = DEG_get_evaluated_scene(draw_ctx->depsgraph);
+	SceneLANPR *lanpr = &scene->lanpr;
 	View3D *v3d = draw_ctx->v3d;
-	RegionView3D *rv3d = draw_ctx->rv3d;
-	Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
-	SceneLANPR* lanpr = &draw_ctx->scene->lanpr;
-
-	//lanpr->reloaded = 1;
+	Object *camera;
+	if (v3d) {
+		RegionView3D *rv3d = draw_ctx->rv3d;
+		camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
+	}else {
+		camera = scene->camera;
+	}
 
 	if (!OneTime.InitComplete) {
 		lanpr->depth_clamp = 0.01;
@@ -77,15 +81,11 @@ static void lanpr_engine_init(void *ved){
 		lanpr->background_color[2] = 0.51;
 		lanpr->background_color[3] = 1;
 
-		//lanpr->depth_influence = 0.3;
-
 		lanpr->reloaded = 1;
 
 		OneTime.InitComplete=1;
 	}
 
-
-	/* Main Buffer */
 	DRW_texture_ensure_fullscreen_2D_multisample(&txl->depth, GPU_DEPTH_COMPONENT32F, 8, 0);
 	DRW_texture_ensure_fullscreen_2D_multisample(&txl->color, GPU_RGBA32F, 8, 0);
 	DRW_texture_ensure_fullscreen_2D_multisample(&txl->normal, GPU_RGBA32F, 8, 0);
@@ -113,7 +113,6 @@ static void lanpr_engine_init(void *ved){
 
 	GPU_framebuffer_ensure_config(&fbl->edge_thinning, {
 		GPU_ATTACHMENT_LEAVE,
-		//GPU_ATTACHMENT_TEXTURE(txl->depth),
 		GPU_ATTACHMENT_TEXTURE(txl->color),
 		GPU_ATTACHMENT_LEAVE,
 		GPU_ATTACHMENT_LEAVE,
@@ -162,7 +161,6 @@ static void lanpr_engine_free(void){
 	LANPR_TextureList *txl = vedata->txl;
 	LANPR_FramebufferList *fbl = vedata->fbl;
 	LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
-	//LANPR_ViewLayerData *sldata = EEVEE_view_layer_data_ensure();
     LANPR_PassList *psl = ((LANPR_Data *)vedata)->psl;
 
 	DRW_pass_free(psl->color_pass);
@@ -211,8 +209,17 @@ static void lanpr_cache_init(void *vedata){
 	LANPR_PrivateData* pd = stl->g_data;
 
 	const DRWContextState *draw_ctx = DRW_context_state_get();
+	Scene *scene = DEG_get_evaluated_scene(draw_ctx->depsgraph);
+	SceneLANPR *lanpr = &scene->lanpr;
 	View3D *v3d = draw_ctx->v3d;
-	SceneLANPR *lanpr = &draw_ctx->scene->lanpr;
+	Object *camera;
+	if (v3d) {
+		RegionView3D *rv3d = draw_ctx->rv3d;
+		camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
+	}
+	else {
+		camera = scene->camera;
+	}
 
 	psl->color_pass = DRW_pass_create("Color Pass", DRW_STATE_WRITE_COLOR | DRW_STATE_DEPTH_LESS_EQUAL | DRW_STATE_WRITE_DEPTH);
 	stl->g_data->multipass_shgrp = DRW_shgroup_create(OneTime.multichannel_shader, psl->color_pass);
@@ -361,8 +368,7 @@ static void lanpr_cache_finish(void *vedata){
 	}
 }
 
-static void lanpr_draw_scene(void *vedata)
-{
+static void lanpr_draw_scene(void *vedata){
 	LANPR_PassList *psl = ((LANPR_Data *)vedata)->psl;
 	LANPR_TextureList *txl = ((LANPR_Data *)vedata)->txl;
 	LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
@@ -382,10 +388,16 @@ static void lanpr_draw_scene(void *vedata)
     DRW_draw_pass(psl->color_pass);
 
 	const DRWContextState *draw_ctx = DRW_context_state_get();
-	SceneLANPR *lanpr = &draw_ctx->scene->lanpr;
+	Scene *scene = DEG_get_evaluated_scene(draw_ctx->depsgraph);
+	SceneLANPR *lanpr = &scene->lanpr;
 	View3D *v3d = draw_ctx->v3d;
-	RegionView3D *rv3d = draw_ctx->rv3d;
-	Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
+	Object *camera;
+	if(v3d){
+		RegionView3D *rv3d = draw_ctx->rv3d;
+	    camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
+	}else{
+		camera = scene->camera;
+	}
 
 	if(lanpr->master_mode == LANPR_MASTER_MODE_DPIX){
 		lanpr_dpix_draw_scene(txl,fbl,psl,stl->g_data,lanpr);
@@ -394,22 +406,112 @@ static void lanpr_draw_sc

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list