Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeroen Bakker <j.bakker@atmind.nl>2019-06-04 15:31:00 +0300
committerJeroen Bakker <j.bakker@atmind.nl>2019-06-04 16:15:59 +0300
commit5361fc2c33253a7673c3352ae98070c9cf49165f (patch)
tree5e628b54162ff6ea0eef3b59f9f8a378989308a4
parent19691e3ae2ec97ede5d2973e1e055b027474bbdb (diff)
GPU: High Definition Color Buffer
For offscreen rendering a high definition color buffer is needed. Without it there are banding issues when doing multi-sampling viewport rendering. Reviewed By: fclem Maniphest Tasks: T65287 Differential Revision: https://developer.blender.org/D5009
-rw-r--r--source/blender/draw/modes/overlay_mode.c2
-rw-r--r--source/blender/gpu/intern/gpu_viewport.c11
2 files changed, 7 insertions, 6 deletions
diff --git a/source/blender/draw/modes/overlay_mode.c b/source/blender/draw/modes/overlay_mode.c
index 3c5cb7cb5aa..fe989dbe8cd 100644
--- a/source/blender/draw/modes/overlay_mode.c
+++ b/source/blender/draw/modes/overlay_mode.c
@@ -482,7 +482,7 @@ static void overlay_draw_scene(void *vedata)
/* This is replaced by the next code block */
// MULTISAMPLE_SYNC_ENABLE(dfbl, dtxl);
- if (dfbl->multisample_fb != NULL) {
+ if (dfbl->multisample_fb != NULL && DRW_state_is_fbo()) {
DRW_stats_query_start("Multisample Blit");
GPU_framebuffer_bind(dfbl->multisample_fb);
GPU_framebuffer_clear_color(dfbl->multisample_fb, (const float[4]){0.0f});
diff --git a/source/blender/gpu/intern/gpu_viewport.c b/source/blender/gpu/intern/gpu_viewport.c
index 4fd439f4203..e3c13b0ec14 100644
--- a/source/blender/gpu/intern/gpu_viewport.c
+++ b/source/blender/gpu/intern/gpu_viewport.c
@@ -95,7 +95,7 @@ static void gpu_viewport_buffers_free(FramebufferList *fbl,
static void gpu_viewport_storage_free(StorageList *stl, int stl_len);
static void gpu_viewport_passes_free(PassList *psl, int psl_len);
static void gpu_viewport_texture_pool_free(GPUViewport *viewport);
-static void gpu_viewport_default_fb_create(GPUViewport *viewport);
+static void gpu_viewport_default_fb_create(GPUViewport *viewport, const bool high_bitdepth);
void GPU_viewport_tag_update(GPUViewport *viewport)
{
@@ -135,7 +135,7 @@ GPUViewport *GPU_viewport_create_from_offscreen(struct GPUOffScreen *ofs)
viewport->txl->multisample_color = color;
viewport->txl->multisample_depth = depth;
viewport->fbl->multisample_fb = fb;
- gpu_viewport_default_fb_create(viewport);
+ gpu_viewport_default_fb_create(viewport, true);
}
else {
viewport->fbl->default_fb = fb;
@@ -384,14 +384,15 @@ void GPU_viewport_cache_release(GPUViewport *viewport)
}
}
-static void gpu_viewport_default_fb_create(GPUViewport *viewport)
+static void gpu_viewport_default_fb_create(GPUViewport *viewport, const bool high_bitdepth)
{
DefaultFramebufferList *dfbl = viewport->fbl;
DefaultTextureList *dtxl = viewport->txl;
int *size = viewport->size;
bool ok = true;
- dtxl->color = GPU_texture_create_2d(size[0], size[1], GPU_RGBA8, NULL, NULL);
+ dtxl->color = GPU_texture_create_2d(
+ size[0], size[1], high_bitdepth ? GPU_RGBA16F : GPU_RGBA8, NULL, NULL);
dtxl->depth = GPU_texture_create_2d(size[0], size[1], GPU_DEPTH24_STENCIL8, NULL, NULL);
if (!(dtxl->depth && dtxl->color)) {
@@ -500,7 +501,7 @@ void GPU_viewport_bind(GPUViewport *viewport, const rcti *rect)
}
if (!dfbl->default_fb) {
- gpu_viewport_default_fb_create(viewport);
+ gpu_viewport_default_fb_create(viewport, false);
}
}