[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