[Bf-blender-cvs] [141c2cf1501] soc-2018-npr: Multisample implementing, f 12 won't work either.
Nick Wu
noreply at git.blender.org
Fri Jun 29 06:02:18 CEST 2018
Commit: 141c2cf1501a9607c2fb01da58a72dcdbb1d596b
Author: Nick Wu
Date: Fri Jun 29 12:01:12 2018 +0800
Branches: soc-2018-npr
https://developer.blender.org/rB141c2cf1501a9607c2fb01da58a72dcdbb1d596b
Multisample implementing, f 12 won't work either.
===================================================================
M source/blender/draw/engines/lanpr/lanpr_all.h
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
===================================================================
diff --git a/source/blender/draw/engines/lanpr/lanpr_all.h b/source/blender/draw/engines/lanpr/lanpr_all.h
index 82a7d355c81..ecfe1770629 100644
--- a/source/blender/draw/engines/lanpr/lanpr_all.h
+++ b/source/blender/draw/engines/lanpr/lanpr_all.h
@@ -122,6 +122,12 @@ typedef struct LANPR_FramebufferList {
struct GPUFrameBuffer *dpix_transform;
struct GPUFrameBuffer *dpix_preview;
+ /* Software */
+ struct GPUFrameBuffer *software_ms;
+
+ /* MS Resolve */
+ struct GPUFrameBuffer *ms_resolve;
+
} LANPR_FramebufferList;
typedef struct LANPR_TextureList {
@@ -141,6 +147,10 @@ typedef struct LANPR_TextureList {
struct GPUTexture *dpix_out_pr;
struct GPUTexture *dpix_out_length;
+ /* multisample resolve */
+ struct GPUTexture *ms_resolve_depth;
+ struct GPUTexture *ms_resolve_color;
+
} LANPR_TextureList;
typedef struct LANPR_PrivateData {
@@ -763,9 +773,8 @@ int lanpr_feed_atlas_data_obj(void *vedata,
Object *ob, int BeginIndex);
int lanpr_feed_atlas_trigger_preview_obj(void *vedata, Object *ob, int BeginIndex);
-void lanpr_dpix_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr);
-
+//DPIX
+void lanpr_dpix_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr, GPUFrameBuffer* DefaultFB);
//snake
-
-void lanpr_snake_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr);
+void lanpr_snake_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr, GPUFrameBuffer* DefaultFB);
diff --git a/source/blender/draw/engines/lanpr/lanpr_dpix.c b/source/blender/draw/engines/lanpr/lanpr_dpix.c
index 1ee7e995338..10a3fd20486 100644
--- a/source/blender/draw/engines/lanpr/lanpr_dpix.c
+++ b/source/blender/draw/engines/lanpr/lanpr_dpix.c
@@ -268,14 +268,11 @@ 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){
+void lanpr_dpix_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr, GPUFrameBuffer* DefaultFB) {
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;
@@ -310,7 +307,7 @@ void lanpr_dpix_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, L
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);
+ GPU_framebuffer_bind(DefaultFB);
+ GPU_framebuffer_clear(DefaultFB, 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 84522c971e3..ab5f9686535 100644
--- a/source/blender/draw/engines/lanpr/lanpr_engine.c
+++ b/source/blender/draw/engines/lanpr/lanpr_engine.c
@@ -2,6 +2,7 @@
#include "DRW_render.h"
#include "BLI_listbase.h"
#include "BLI_linklist.h"
+#include "BLI_math_matrix.h"
#include "lanpr_all.h"
#include "DRW_render.h"
#include "BKE_object.h"
@@ -171,6 +172,16 @@ static void lanpr_engine_init(void *ved){
NULL, NULL);
}
+ GPU_framebuffer_ensure_config(&fbl->software_ms, {
+ 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
+ });
+
}
static void lanpr_engine_free(void){
void *ved = OneTime.ved;
@@ -323,7 +334,7 @@ static void lanpr_cache_init(void *vedata){
BLI_mempool_clear(pd->mp_batch_list);
}
}elif(lanpr->master_mode == LANPR_MASTER_MODE_SOFTWARE) {
- psl->software_pass = DRW_pass_create("Software Render Preview", DRW_STATE_WRITE_COLOR);
+ psl->software_pass = DRW_pass_create("Software Render Preview", DRW_STATE_WRITE_COLOR | DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_ALWAYS);
LANPR_LineLayer* ll;
for (ll = lanpr->line_layers.first; ll; ll = ll->next) {
ll->shgrp = DRW_shgroup_create(OneTime.software_shader, psl->software_pass);
@@ -403,7 +414,7 @@ static void lanpr_cache_finish(void *vedata){
}
}
-static void lanpr_draw_scene(void *vedata) {
+static void lanpr_draw_scene_exec(void *vedata, GPUFrameBuffer* dfb) {
LANPR_PassList *psl = ((LANPR_Data *)vedata)->psl;
LANPR_TextureList *txl = ((LANPR_Data *)vedata)->txl;
LANPR_StorageList *stl = ((LANPR_Data *)vedata)->stl;
@@ -413,15 +424,10 @@ static void lanpr_draw_scene(void *vedata) {
float clear_depth = 1.0f;
uint clear_stencil = 0xFF;
- DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
- DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
-
GPU_framebuffer_bind(fbl->passes);
GPUFrameBufferBits clear_bits = GPU_DEPTH_BIT | GPU_COLOR_BIT;
GPU_framebuffer_clear(fbl->passes, clear_bits, clear_col, clear_depth, clear_stencil);
- DRW_draw_pass(psl->color_pass);
-
const DRWContextState *draw_ctx = DRW_context_state_get();
Scene *scene = DEG_get_evaluated_scene(draw_ctx->depsgraph);
SceneLANPR *lanpr = &scene->lanpr;
@@ -436,17 +442,28 @@ static void lanpr_draw_scene(void *vedata) {
}
if (lanpr->master_mode == LANPR_MASTER_MODE_DPIX) {
- lanpr_dpix_draw_scene(txl, fbl, psl, stl->g_data, lanpr);
+ DRW_draw_pass(psl->color_pass);
+ lanpr_dpix_draw_scene(txl, fbl, psl, stl->g_data, lanpr, dfb);
}
elif(lanpr->master_mode == LANPR_MASTER_MODE_SNAKE) {
- lanpr_snake_draw_scene(txl, fbl, psl, stl->g_data, lanpr);
+ DRW_draw_pass(psl->color_pass);
+ lanpr_snake_draw_scene(txl, fbl, psl, stl->g_data, lanpr, dfb);
}
elif(lanpr->master_mode == LANPR_MASTER_MODE_SOFTWARE) {
- GPU_framebuffer_bind(dfbl->default_fb);
+ GPU_framebuffer_bind(dfb);
+
+ DRW_draw_pass(psl->color_pass);
+
DRW_draw_pass(psl->software_pass);
+
}
}
+static void lanpr_draw_scene(void *vedata) {
+ DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
+ lanpr_draw_scene_exec(vedata, dfbl->default_fb);
+}
+
void LANPR_render_cache(
void *vedata, struct Object *ob,
struct RenderEngine *engine, struct Depsgraph *UNUSED(depsgraph)){
@@ -471,18 +488,18 @@ static void lanpr_render_to_image(LANPR_Data *vedata, RenderEngine *engine, stru
DefaultFramebufferList *dfbl = DRW_viewport_framebuffer_list_get();
DefaultTextureList *dtxl = DRW_viewport_texture_list_get();
- /* TODO 32 bit depth */
- DRW_texture_ensure_fullscreen_2D(&dtxl->depth, GPU_DEPTH_COMPONENT32F, 0);
- DRW_texture_ensure_fullscreen_2D(&dtxl->color, GPU_RGBA32F, DRW_TEX_FILTER | DRW_TEX_MIPMAP);
+ DRW_texture_ensure_fullscreen_2D(&txl->ms_resolve_depth, GPU_DEPTH_COMPONENT32F, 0);
+ DRW_texture_ensure_fullscreen_2D(&txl->ms_resolve_color, GPU_RGBA32F, 0);
- GPU_framebuffer_ensure_config(&dfbl->default_fb, {
- GPU_ATTACHMENT_TEXTURE(dtxl->depth),
- GPU_ATTACHMENT_TEXTURE(dtxl->color),
+ GPU_framebuffer_ensure_config(&fbl->ms_resolve, {
+ GPU_ATTACHMENT_TEXTURE(txl->ms_resolve_depth),
+ GPU_ATTACHMENT_TEXTURE(txl->ms_resolve_color),
+ GPU_ATTACHMENT_LEAVE,
+ GPU_ATTACHMENT_LEAVE,
GPU_ATTACHMENT_LEAVE,
GPU_ATTACHMENT_LEAVE,
GPU_ATTACHMENT_LEAVE
});
-
scene->lanpr.reloaded = 1;
lanpr_engine_init(vedata);
@@ -490,14 +507,13 @@ static void lanpr_render_to_image(LANPR_Data *vedata, RenderEngine *engine, stru
DRW_render_object_iter(vedata, engine, draw_ctx->depsgraph, LANPR_render_cache);
lanpr_cache_finish(vedata);
- lanpr_draw_scene(vedata);
-
+ lanpr_draw_scene_exec(vedata, fbl->ms_resolve);
// read it back so we can again display and save it.
const char *viewname = RE_GetActiveRenderView(engine->re);
RenderPass *rp = RE_pass_find_by_name(render_layer, RE_PASSNAME_COMBINED, viewname);
- GPU_framebuffer_bind(dfbl->default_fb);
- GPU_framebuffer_read_color(dfbl->default_fb,
+ GPU_framebuffer_bind(fbl->ms_resolve);
+ GPU_framebuffer_read_color(fbl->ms_resolve,
rect->xmin, rect->ymin,
BLI_rcti_size_x(rect), BLI_rcti_size_y(rect),
4, 0, rp->rect);
diff --git a/source/blender/draw/engines/lanpr/lanpr_snake.c b/source/blender/draw/engines/lanpr/lanpr_snake.c
index 0455f27d263..72ba4218d98 100644
--- a/source/blender/draw/engines/lanpr/lanpr_snake.c
+++ b/source/blender/draw/engines/lanpr/lanpr_snake.c
@@ -302,15 +302,12 @@ Gwn_Batch *lanpr_get_snake_batch(LANPR_PrivateData *pd){
return GWN_batch_create_ex(GWN_PRIM_LINES_ADJ, vbo, GWN_indexbuf_build(&elb), GWN_USAGE_STATIC | GWN_BATCH_OWNS_VBO);
}
-void lanpr_snake_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr){
+void lanpr_snake_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl, LANPR_PassList *psl, LANPR_PrivateData *pd, SceneLANPR *lanpr, GPUFrameBuffer* DefaultFB){
GPUFrameBufferBits clear_bits = GPU_COLOR_BIT | GPU_DEPTH_BIT;
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();
-
const DRWContextState *draw_ctx = DRW_context_state_get();
Scene *scene = DEG_get_evaluated_scene(draw_ctx->depsgraph);
View3D *v3d = draw_ctx->v3d;
@@ -334,7 +331,7 @@ void lanpr_snake_draw_scene(LANPR_TextureList *txl, LANPR_FramebufferList *fbl,
DRW_draw_pass(psl->edge_intermediate);
if ((!lanpr->enable_vector_trace) && (!lanpr-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list