[Bf-blender-cvs] [54670f27221] soc-2018-npr: Seperated different algorithms into 3 files. Init code minor changes.
Nick Wu
noreply at git.blender.org
Thu Jun 7 05:43:33 CEST 2018
Commit: 54670f27221259c3c92694574e68e76fa8615f49
Author: Nick Wu
Date: Thu Jun 7 11:42:58 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB54670f27221259c3c92694574e68e76fa8615f49
Seperated different algorithms into 3 files. Init code minor changes.
===================================================================
M source/blender/draw/CMakeLists.txt
D source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
R081 source/blender/draw/engines/lanpr/NUL_TNS.h source/blender/draw/engines/lanpr/lanpr_all.h
A source/blender/draw/engines/lanpr/lanpr_dpix.c
A source/blender/draw/engines/lanpr/lanpr_engine.c
A source/blender/draw/engines/lanpr/lanpr_snake.c
===================================================================
diff --git a/source/blender/draw/CMakeLists.txt b/source/blender/draw/CMakeLists.txt
index 861c9edba3b..f2ec7e3a8cb 100644
--- a/source/blender/draw/CMakeLists.txt
+++ b/source/blender/draw/CMakeLists.txt
@@ -121,8 +121,11 @@ set(SRC
#engines/lanpr/NUL_TNS_Kernel.c
#engines/lanpr/NUL_Util.c
#engines/lanpr/NUL_TNS_SoftwareRender.c
- engines/lanpr/NUL_TNS_EdgeRendering.c
+ #engines/lanpr/NUL_TNS_EdgeRendering.c
#engines/lanpr/NUL_TNS_Mesh.c
+ engines/lanpr/lanpr_dpix.c
+ engines/lanpr/lanpr_engine.c
+ engines/lanpr/lanpr_snake.c
DRW_engine.h
intern/DRW_render.h
@@ -145,8 +148,9 @@ set(SRC
engines/eevee/eevee_private.h
engines/external/external_engine.h
- engines/lanpr/NUL_TNS.h
+ #engines/lanpr/NUL_TNS.h
engines/lanpr/NUL_Util.h
+ engines/lanpr/lanpr_all.h
)
if(WITH_CLAY_ENGINE)
diff --git a/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c b/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
deleted file mode 100644
index 9dab69ab582..00000000000
--- a/source/blender/draw/engines/lanpr/NUL_TNS_EdgeRendering.c
+++ /dev/null
@@ -1,1316 +0,0 @@
-#include "DRW_engine.h"
-#include "DRW_render.h"
-#include "BLI_listbase.h"
-#include "BLI_linklist.h"
-#include "NUL_TNS.h"
-#include "DRW_render.h"
-#include "BKE_object.h"
-#include "DNA_mesh_types.h"
-#include "DNA_camera_types.h"
-#include "GPU_immediate.h"
-#include "GPU_immediate_util.h"
-#include "GPU_framebuffer.h"
-#include "DNA_lanpr_types.h"
-#include "GPU_draw.h"
-
-#include "GPU_batch.h"
-#include "GPU_framebuffer.h"
-#include "GPU_shader.h"
-#include "GPU_uniformbuffer.h"
-#include "GPU_viewport.h"
-#include "bmesh.h"
-
-
-#include <math.h>
-
-extern char datatoc_common_fullscreen_vert_glsl[];
-extern char datatoc_gpu_shader_3D_normal_smooth_color_vert_glsl[];
-extern char datatoc_lanpr_snake_multichannel_fragment[];
-extern char datatoc_lanpr_snake_edge_fragment[];
-extern char datatoc_lanpr_image_peel_fragment[];
-extern char datatoc_lanpr_line_connection_vertex[];
-extern char datatoc_lanpr_line_connection_fragment[];
-extern char datatoc_lanpr_line_connection_geometry[];
-extern char datatoc_lanpr_atlas_project_passthrough_vertex[];
-extern char datatoc_lanpr_atlas_project_clip_fragment[];
-extern char datatoc_lanpr_atlas_preview_geometry[];
-extern char datatoc_lanpr_atlas_preview_fragment[];
-
-typedef struct LANPROneTimeInit{
-
- /* Snake */
-
- GPUShader* multichannel_shader;
- GPUShader* edge_detect_shader;
- GPUShader* edge_thinning_shader;
- GPUShader* snake_connection_shader;
-
- /* DPIX */
-
- GPUShader* dpix_transform_shader;
- GPUShader* dpix_preview_shader;
-
- void* ved;
-} LANPROneTimeInit;
-
-LANPROneTimeInit OneTime;
-
-
-#define tMatDist2v(p1,p2)\
- sqrt(((p1)[0]-(p2)[0])*((p1)[0]-(p2)[0]) + ((p1)[1]-(p2)[1])*((p1)[1]-(p2)[1]))
-
-#define tnsLinearItp(L,R,T)\
-((L)*(1.0f - (T)) + (R)*(T))
-
-
-//==============================================================[ ATLAS / DPIX ]
-
-
-
-
-void lanpr_init_atlas_inputs(void *ved){
- OneTime.ved = ved;
- LANPR_Data *vedata = (LANPR_Data *)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;
- Object *camera = (rv3d->persp == RV3D_CAMOB) ? v3d->camera : NULL;
- SceneLANPR* lanpr=&draw_ctx->scene->lanpr;
-
- if(lanpr->reloaded){
- DRW_texture_ensure_2D(&txl->dpix_in_pl, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
- DRW_texture_ensure_2D(&txl->dpix_in_pr, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
- DRW_texture_ensure_2D(&txl->dpix_in_nl, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
- DRW_texture_ensure_2D(&txl->dpix_in_nr, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
-
- DRW_texture_ensure_2D(&txl->dpix_out_pl, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
- DRW_texture_ensure_2D(&txl->dpix_out_pr, TNS_DPIX_TEXTURE_SIZE, TNS_DPIX_TEXTURE_SIZE, GPU_RGBA32F, 0);
- 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),
- GPU_ATTACHMENT_TEXTURE(txl->dpix_out_pr),
- GPU_ATTACHMENT_TEXTURE(txl->dpix_out_length),
- GPU_ATTACHMENT_LEAVE,
- GPU_ATTACHMENT_LEAVE,
- GPU_ATTACHMENT_LEAVE
- });
-
- GPU_framebuffer_ensure_config(&fbl->dpix_preview, {
- GPU_ATTACHMENT_TEXTURE(txl->depth),
- GPU_ATTACHMENT_TEXTURE(txl->color),
- GPU_ATTACHMENT_LEAVE,
- GPU_ATTACHMENT_LEAVE,
- GPU_ATTACHMENT_LEAVE,
- GPU_ATTACHMENT_LEAVE,
- GPU_ATTACHMENT_LEAVE
- });
-
- if (!OneTime.dpix_transform_shader) {
- OneTime.dpix_transform_shader =
- GPU_shader_create(
- datatoc_lanpr_atlas_project_passthrough_vertex,
- datatoc_lanpr_atlas_project_clip_fragment,
- NULL,NULL,NULL);
- }
- if (!OneTime.dpix_preview_shader) {
- OneTime.dpix_preview_shader =
- GPU_shader_create(
- datatoc_lanpr_atlas_project_passthrough_vertex,
- datatoc_lanpr_atlas_preview_fragment,
- datatoc_lanpr_atlas_preview_geometry,
- //NULL,
- NULL,NULL);
- }
-}
-void lanpr_destroy_atlas(void *ved){
- OneTime.ved = ved;
- LANPR_Data *vedata = (LANPR_Data *)ved;
- LANPR_TextureList *txl = vedata->txl;
- LANPR_FramebufferList *fbl = vedata->fbl;
- LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
- LANPR_PassList *psl = ((LANPR_Data *)vedata)->psl;
-
- DRW_pass_free(psl->dpix_transform_pass);
- DRW_pass_free(psl->dpix_preview_pass);
-
- GPU_framebuffer_free(fbl->dpix_transform);
- GPU_framebuffer_free(fbl->dpix_preview);
-
- DRW_texture_free(txl->dpix_in_pl);
- DRW_texture_free(txl->dpix_in_pr);
- DRW_texture_free(txl->dpix_in_nl);
- DRW_texture_free(txl->dpix_in_nr);
- DRW_texture_free(txl->dpix_out_pl);
- DRW_texture_free(txl->dpix_out_pr);
-}
-
-int lanpr_feed_atlas_data_obj(void* vedata,
- float* AtlasPointsL, float* AtlasPointsR,
- float* AtlasFaceNormalL, float* AtlasFaceNormalR,
- Object* ob, int BeginIndex) {
- LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
-
- if (!DRW_object_is_renderable(ob)) return BeginIndex;
- const DRWContextState *draw_ctx = DRW_context_state_get();
- if (ob == draw_ctx->object_edit) return BeginIndex;
- if(ob->type != OB_MESH) return BeginIndex;
-
- Mesh* me = ob->data;
- BMesh* bm;
- struct BMFace *f1,*f2;
- struct BMVert *v1,*v2;
- struct BMEdge *e;
- struct BMLoop *l1,*l2;
- int vert_count = me->totvert, edge_count = me->totedge, face_count = me->totface;
- int i,idx;
-
- const BMAllocTemplate allocsize = BMALLOC_TEMPLATE_FROM_ME(me);
- bm = BM_mesh_create(&allocsize,
- &((struct BMeshCreateParams){.use_toolflags = true,}));
- BM_mesh_bm_from_me(bm, me, &((struct BMeshFromMeshParams){.calc_face_normal = true,}));
- BM_mesh_elem_table_ensure(bm,BM_VERT|BM_EDGE|BM_FACE);
-
- for(i=0; i<edge_count; i++){
- f1=0;
- f2=0;
- e = BM_edge_at_index(bm,i);
- v1 = e->v1;
- v2 = e->v2;
- l1 = e->l;
- l2 = e->l?e->l->radial_next:0;
- if(l1) f1 = l1->f;
- if(l2) f2 = l2->f;
-
- idx = (BeginIndex+i)*4;
-
- AtlasPointsL[idx + 0] = v1->co[0];
- AtlasPointsL[idx + 1] = v1->co[1];
- AtlasPointsL[idx + 2] = v1->co[2];
- AtlasPointsL[idx + 3] = 1;
-
- AtlasPointsR[idx + 0] = v2->co[0];
- AtlasPointsR[idx + 1] = v2->co[1];
- AtlasPointsR[idx + 2] = v2->co[2];
- AtlasPointsR[idx + 3] = 1;
-
- if(f1){
- AtlasFaceNormalL[idx + 0] = f1->no[0];
- AtlasFaceNormalL[idx + 1] = f1->no[1];
- AtlasFaceNormalL[idx + 2] = f1->no[2];
- AtlasFaceNormalL[idx + 3] = 1;
- }else{
- AtlasFaceNormalL[idx + 0] = 0;
- AtlasFaceNormalL[idx + 1] = 0;
- AtlasFaceNormalL[idx + 2] = 0;
- AtlasFaceNormalL[idx + 3] = 0;
- }
-
- if(f2 && f2!=f1){ // this is for edge condition
- AtlasFaceNormalR[idx + 0] = f2->no[0];
- AtlasFaceNormalR[idx + 1] = f2->no[1];
- AtlasFaceNormalR[idx + 2] = f2->no[2];
- AtlasFaceNormalR[idx + 3] = 1;
- }else{
- AtlasFaceNormalR[idx + 0] = 0;
- AtlasFaceNormalR[idx + 1] = 0;
- AtlasFaceNormalR[idx + 2] = 0;
- AtlasFaceNormalR[idx + 3] = 0;
- }
-
- }
-
- return BeginIndex + edge_count;
-
-
-
- //return DRW_cache_mesh_surface_get(ob);
- //
- //int NextBegin = Begin;
- //int ThisCount=0;
-
- //for (io = o->ChildObjects.pFirst; io; io = io->Item.pNext) {
- // NextBegin = tns_FeedAtlasDataRecursive(
- // AtlasPointsL, AtlasPointsR, AtlasFaceNormalL, AtlasFaceNormalR, io, NextBegin);
- //}
-
- //if (o->Type != TNS_OBJECT_MESH) return Begin;
-
-
- //for (e = mo->E.pFirst; e; e = e->Item.pNext) {
- // int offset = ThisCount + NextBegin;
- // AtlasPointsL[offset + 0] = e->VL->P[0];
- // AtlasPointsL[offset + 1] = e->VL->P[1];
- // AtlasPointsL[offset + 2] = e->VL->P[2];
- // AtlasPointsR[offset + 0] = e->VR->P[0];
- // AtlasPointsR[offset + 1] = e->VR->P[1];
- // AtlasPointsR[offset + 2] = e->VR->P[2];
- // AtlasFaceNormalL[offset + 0] = e->FL ? e->FL->FaceNormal[0] : 0;
- // AtlasFaceNormalL[offset + 1] = e->FL ? e->FL->FaceNormal[1] : 0;
- // AtlasFaceNormalL[offset + 2] = e->FL ? e->FL->FaceNormal[2] : 0;
- // AtlasFaceNormalR[offset + 0] = e->FR ? e->FR->FaceNormal[0] : 0;
- // AtlasFaceNormalR[offset + 1] = e->FR ? e->FR->FaceNormal[1] : 0;
- // AtlasFaceNormalR[offset + 2] = e->FR ? e->FR->FaceNormal[2] : 0;
- // ThisCount += 3;
- //}
-
- //return ThisCount + NextBegin;
-
-}
-
-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;
-}
-
-void lanpr_feed_atlas_trigger_preview_obj(void* vedata, Object* ob, int BeginIndex) {
- LANPR_StorageList *stl = ((
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list