[Bf-blender-cvs] [6a0b068cdf0] temp-drawcontext: Merge branch 'blender2.8' of git at git.blender.org:blender.git into temp-drawcontext

Germano noreply at git.blender.org
Wed Feb 21 01:11:48 CET 2018


Commit: 6a0b068cdf05fc20111466dd50c6baccd5691d78
Author: Germano
Date:   Tue Feb 20 21:10:58 2018 -0300
Branches: temp-drawcontext
https://developer.blender.org/rB6a0b068cdf05fc20111466dd50c6baccd5691d78

Merge branch 'blender2.8' of git at git.blender.org:blender.git into temp-drawcontext

# Conflicts:
#	source/blender/draw/intern/draw_manager.c
#	source/blender/editors/render/render_opengl.c

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



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

diff --cc intern/ghost/intern/GHOST_ContextWGL.cpp
index 6842a029e33,7b5e30247a8..249723a9722
--- a/intern/ghost/intern/GHOST_ContextWGL.cpp
+++ b/intern/ghost/intern/GHOST_ContextWGL.cpp
@@@ -43,6 -43,19 +43,12 @@@
  HGLRC GHOST_ContextWGL::s_sharedHGLRC = NULL;
  int   GHOST_ContextWGL::s_sharedCount = 0;
  
 -bool GHOST_ContextWGL::s_singleContextMode = false;
 -
 -
 -/* Intel video-cards don't work fine with multiple contexts and
 - * have to share the same context for all windows.
 - * But if we just share context for all windows it could work incorrect
 - * with multiple videocards configuration. Suppose, that Intel videocards
 - * can't be in multiple-devices configuration. */
++/* Some third-generation Intel video-cards are constantly bring problems */
+ static bool is_crappy_intel_card()
+ {
+ 	return strstr((const char *)glGetString(GL_VENDOR), "Intel") != NULL;
+ }
+ 
  
  GHOST_ContextWGL::GHOST_ContextWGL(
          bool stereoVisual,
diff --cc source/blender/draw/intern/draw_manager.c
index 73376535147,ec068263234..56fa9608474
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@@ -3723,37 -3689,14 +3706,45 @@@ void DRW_render_object_iter
  	DEG_OBJECT_ITER_FOR_RENDER_ENGINE_END
  }
  
 +static struct DRWSelectBuffer {
 +	struct GPUFrameBuffer *framebuffer;
 +	struct GPUTexture *texture_depth;
 +} g_select_buffer = {NULL};
 +
 +static void draw_select_framebuffer_setup(const rcti *rect)
 +{
 +	if (g_select_buffer.framebuffer == NULL) {
 +		g_select_buffer.framebuffer = GPU_framebuffer_create();
 +	}
 +
 +	/* If size mismatch recreate the texture. */
 +	if ((g_select_buffer.texture_depth != NULL) &&
 +		((GPU_texture_width(g_select_buffer.texture_depth) != BLI_rcti_size_x(rect)) ||
- 		 (GPU_texture_height(g_select_buffer.texture_depth) != BLI_rcti_size_y(rect))))
++		(GPU_texture_height(g_select_buffer.texture_depth) != BLI_rcti_size_y(rect))))
 +	{
 +		GPU_texture_free(g_select_buffer.texture_depth);
 +		g_select_buffer.texture_depth = NULL;
 +	}
 +
 +	if (g_select_buffer.texture_depth == NULL) {
 +		g_select_buffer.texture_depth = GPU_texture_create_depth(BLI_rcti_size_x(rect), BLI_rcti_size_y(rect), NULL);
 +
 +		GPU_framebuffer_texture_attach(g_select_buffer.framebuffer, g_select_buffer.texture_depth, 0, 0);
 +
 +		if (!GPU_framebuffer_check_valid(g_select_buffer.framebuffer, NULL)) {
 +			printf("Error invalid selection framebuffer\n");
 +		}
 +	}
 +}
 +
+ /* Must run after all instance datas have been added. */
+ void DRW_render_instance_buffer_finish(void)
+ {
+ 	BLI_assert(!DST.buffer_finish_called && "DRW_render_instance_buffer_finish called twice!");
+ 	DST.buffer_finish_called = true;
+ 	DRW_instance_buffer_finish(DST.idatalist);
+ }
+ 
  /**
   * object mode select-loop, see: ED_view3d_draw_select_loop (legacy drawing).
   */
@@@ -4215,13 -4106,9 +4217,14 @@@ extern struct GPUUniformBuffer *globals
  extern struct GPUTexture *globals_ramp; /* draw_common.c */
  void DRW_engines_free(void)
  {
 +	DRW_opengl_context_enable();
 +
 +	DRW_TEXTURE_FREE_SAFE(g_select_buffer.texture_depth);
 +	DRW_FRAMEBUFFER_FREE_SAFE(g_select_buffer.framebuffer);
 +
  	DRW_shape_cache_free();
  	DRW_stats_free();
+ 	DRW_globals_free();
  
  	DrawEngineType *next;
  	for (DrawEngineType *type = DRW_engines.first; type; type = next) {
diff --cc source/blender/editors/render/render_opengl.c
index 07fb397b9cd,8eb9283790b..1f9894b3b9f
--- a/source/blender/editors/render/render_opengl.c
+++ b/source/blender/editors/render/render_opengl.c
@@@ -656,9 -652,7 +656,9 @@@ static bool screen_opengl_render_init(b
  	sizey = (scene->r.size * scene->r.ysch) / 100;
  
  	/* corrects render size with actual size, not every card supports non-power-of-two dimensions */
 +	DRW_opengl_context_enable(); /* Offscreen creation needs to be done in DRW context. */
- 	ofs = GPU_offscreen_create(sizex, sizey, full_samples ? 0 : samples, true, err_out);
+ 	ofs = GPU_offscreen_create(sizex, sizey, full_samples ? 0 : samples, true, true, err_out);
 +	DRW_opengl_context_disable();
  
  	if (!ofs) {
  		BKE_reportf(op->reports, RPT_ERROR, "Failed to create OpenGL off-screen buffer, %s", err_out);
diff --cc source/blender/gpu/CMakeLists.txt
index 2d404cd2aa7,189ca8e6a33..5c0115d967a
--- a/source/blender/gpu/CMakeLists.txt
+++ b/source/blender/gpu/CMakeLists.txt
@@@ -148,9 -149,7 +149,8 @@@ data_to_c_simple(shaders/gpu_shader_ima
  data_to_c_simple(shaders/gpu_shader_image_modulate_alpha_frag.glsl SRC)
  data_to_c_simple(shaders/gpu_shader_image_alpha_color_frag.glsl SRC)
  data_to_c_simple(shaders/gpu_shader_image_color_frag.glsl SRC)
- data_to_c_simple(shaders/gpu_shader_image_rect_modulate_alpha_frag.glsl SRC)
  data_to_c_simple(shaders/gpu_shader_image_depth_linear_frag.glsl SRC)
 +data_to_c_simple(shaders/gpu_shader_image_depth_copy_frag.glsl SRC)
  data_to_c_simple(shaders/gpu_shader_image_interlace_frag.glsl SRC)
  data_to_c_simple(shaders/gpu_shader_3D_image_vert.glsl SRC)
  data_to_c_simple(shaders/gpu_shader_3D_vert.glsl SRC)
diff --cc source/blender/gpu/GPU_shader.h
index 5db199f1ca9,ca6e8343401..def0b0bfbc7
--- a/source/blender/gpu/GPU_shader.h
+++ b/source/blender/gpu/GPU_shader.h
@@@ -131,9 -133,7 +133,8 @@@ typedef enum GPUBuiltinShader 
  	GPU_SHADER_2D_IMAGE_SHUFFLE_COLOR,
  	GPU_SHADER_2D_IMAGE_MASK_UNIFORM_COLOR,
  	GPU_SHADER_3D_IMAGE_MODULATE_ALPHA,
- 	GPU_SHADER_3D_IMAGE_RECT_MODULATE_ALPHA,
  	GPU_SHADER_3D_IMAGE_DEPTH,
 +	GPU_SHADER_3D_IMAGE_DEPTH_COPY,
  	/* stereo 3d */
  	GPU_SHADER_2D_IMAGE_INTERLACE,
  	/* points */
diff --cc source/blender/gpu/intern/gpu_shader.c
index c8c154074e2,c25d03dff2f..b06ee56c21f
--- a/source/blender/gpu/intern/gpu_shader.c
+++ b/source/blender/gpu/intern/gpu_shader.c
@@@ -75,9 -76,7 +76,8 @@@ extern char datatoc_gpu_shader_image_sh
  extern char datatoc_gpu_shader_image_interlace_frag_glsl[];
  extern char datatoc_gpu_shader_image_mask_uniform_color_frag_glsl[];
  extern char datatoc_gpu_shader_image_modulate_alpha_frag_glsl[];
- extern char datatoc_gpu_shader_image_rect_modulate_alpha_frag_glsl[];
  extern char datatoc_gpu_shader_image_depth_linear_frag_glsl[];
 +extern char datatoc_gpu_shader_image_depth_copy_frag_glsl[];
  extern char datatoc_gpu_shader_3D_vert_glsl[];
  extern char datatoc_gpu_shader_3D_normal_vert_glsl[];
  extern char datatoc_gpu_shader_3D_flat_color_vert_glsl[];
@@@ -711,12 -710,8 +711,10 @@@ GPUShader *GPU_shader_get_builtin_shade
  		                                             datatoc_gpu_shader_image_mask_uniform_color_frag_glsl },
  		[GPU_SHADER_3D_IMAGE_MODULATE_ALPHA] = { datatoc_gpu_shader_3D_image_vert_glsl,
  		                                         datatoc_gpu_shader_image_modulate_alpha_frag_glsl },
- 		[GPU_SHADER_3D_IMAGE_RECT_MODULATE_ALPHA] = { datatoc_gpu_shader_3D_image_vert_glsl,
- 		                                              datatoc_gpu_shader_image_rect_modulate_alpha_frag_glsl },
  		[GPU_SHADER_3D_IMAGE_DEPTH] = { datatoc_gpu_shader_3D_image_vert_glsl,
  		                                datatoc_gpu_shader_image_depth_linear_frag_glsl },
 +		[GPU_SHADER_3D_IMAGE_DEPTH_COPY] = { datatoc_gpu_shader_3D_image_vert_glsl,
 +		                                     datatoc_gpu_shader_image_depth_copy_frag_glsl },
  
  		[GPU_SHADER_2D_IMAGE_INTERLACE] = { datatoc_gpu_shader_2D_image_vert_glsl,
  		                                    datatoc_gpu_shader_image_interlace_frag_glsl },
diff --cc source/blender/gpu/intern/gpu_viewport.c
index e92058e6d8c,fc045805874..665859e4d33
--- a/source/blender/gpu/intern/gpu_viewport.c
+++ b/source/blender/gpu/intern/gpu_viewport.c
@@@ -522,16 -523,19 +525,23 @@@ void GPU_viewport_unbind(GPUViewport *v
  	if (dfbl->default_fb) {
  		GPU_framebuffer_texture_unbind(NULL, NULL);
  		GPU_framebuffer_restore();
 +	}
  
 +	DRW_opengl_context_disable();
 +
 +	if (dfbl->default_fb) {
  		glEnable(GL_SCISSOR_TEST);
  		glDisable(GL_DEPTH_TEST);
+ 	}
+ }
  
+ void GPU_viewport_draw_to_screen(GPUViewport *viewport, const rcti *rect)
+ {
+ 	DefaultFramebufferList *dfbl = viewport->fbl;
+ 
+ 	if (dfbl->default_fb) {
  		/* This might be bandwidth limiting */
- 		draw_ofs_to_screen(viewport);
+ 		draw_ofs_to_screen(viewport, rect);
  	}
  }



More information about the Bf-blender-cvs mailing list