[Bf-blender-cvs] [265b5238de7] blender2.8: Merge branch 'master' into blender2.8

Campbell Barton noreply at git.blender.org
Wed Sep 12 08:10:36 CEST 2018


Commit: 265b5238de738a821bed0c56fb0ef3abefae0d05
Author: Campbell Barton
Date:   Wed Sep 12 16:21:00 2018 +1000
Branches: blender2.8
https://developer.blender.org/rB265b5238de738a821bed0c56fb0ef3abefae0d05

Merge branch 'master' into blender2.8

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



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

diff --cc source/blender/editors/interface/interface_widgets.c
index e81af2755b1,a655dea9215..a8f5d5e7977
--- a/source/blender/editors/interface/interface_widgets.c
+++ b/source/blender/editors/interface/interface_widgets.c
@@@ -1030,210 -674,180 +1030,219 @@@ static void widgetbase_outline(uiWidget
  	float triangle_strip[WIDGET_SIZE_MAX * 2 + 2][2]; /* + 2 because the last pair is wrapped */
  	widget_verts_to_triangle_strip(wtb, wtb->totvert, triangle_strip);
  
 -	glEnableClientState(GL_VERTEX_ARRAY);
 -	glVertexPointer(2, GL_FLOAT, 0, triangle_strip);
 -	glDrawArrays(GL_TRIANGLE_STRIP, 0, wtb->totvert * 2 + 2);
 -	glDisableClientState(GL_VERTEX_ARRAY);
 +	widget_draw_vertex_buffer(pos, 0, GL_TRIANGLE_STRIP, triangle_strip, NULL, wtb->totvert * 2 + 2);
  }
  
 -static void widgetbase_draw_ex(
 -        uiWidgetBase *wtb, uiWidgetColors *wcol,
 -        const bool show_alpha_checkers)
 +static void widgetbase_set_uniform_alpha_discard(
 +        uiWidgetBase *wtb,
 +        const bool alpha_check,
 +        const float discard_factor)
  {
 -	int j, a;
 +	if (alpha_check) {
 +		wtb->uniform_params.alpha_discard = -discard_factor;
 +	}
 +	else {
 +		wtb->uniform_params.alpha_discard = discard_factor;
 +	}
 +}
  
 -	glEnable(GL_BLEND);
 +static void widgetbase_set_uniform_alpha_check(
 +        uiWidgetBase *wtb,
 +        const bool alpha_check)
 +{
 +	const float discard_factor = fabs(wtb->uniform_params.alpha_discard);
 +	widgetbase_set_uniform_alpha_discard(wtb, alpha_check, discard_factor);
 +}
  
 -	/* backdrop non AA */
 -	if (wtb->draw_inner) {
 -		BLI_assert(wtb->totvert != 0);
 -		if (wcol->shaded == 0) {
 -			if (show_alpha_checkers) {
 -				float inner_v_half[WIDGET_SIZE_MAX][2];
 -				float x_mid = 0.0f; /* used for dumb clamping of values */
 +static void widgetbase_set_uniform_discard_factor(
 +        uiWidgetBase *wtb,
 +        const float discard_factor)
 +{
 +	bool alpha_check = wtb->uniform_params.alpha_discard < 0.0f;
 +	widgetbase_set_uniform_alpha_discard(wtb, alpha_check, discard_factor);
 +}
  
 -				/* dark checkers */
 -				glColor4ub(UI_ALPHA_CHECKER_DARK, UI_ALPHA_CHECKER_DARK, UI_ALPHA_CHECKER_DARK, 255);
 -				glEnableClientState(GL_VERTEX_ARRAY);
 -				glVertexPointer(2, GL_FLOAT, 0, wtb->inner_v);
 -				glDrawArrays(GL_POLYGON, 0, wtb->totvert);
 +static void widgetbase_set_uniform_colors_ubv(
 +        uiWidgetBase *wtb,
 +        const unsigned char *col1, const unsigned char *col2,
 +        const unsigned char *outline,
 +        const unsigned char *emboss,
 +        const unsigned char *tria,
 +        const bool alpha_check)
 +{
 +	widgetbase_set_uniform_alpha_check(wtb, alpha_check);
 +	rgba_float_args_set_ch(wtb->uniform_params.color_inner1, col1[0], col1[1], col1[2], col1[3]);
 +	rgba_float_args_set_ch(wtb->uniform_params.color_inner2, col2[0], col2[1], col2[2], col2[3]);
 +	rgba_float_args_set_ch(wtb->uniform_params.color_outline, outline[0], outline[1], outline[2], outline[3]);
 +	rgba_float_args_set_ch(wtb->uniform_params.color_emboss, emboss[0], emboss[1], emboss[2], emboss[3]);
 +	rgba_float_args_set_ch(wtb->uniform_params.color_tria, tria[0], tria[1], tria[2], tria[3]);
 +}
  
 -				/* light checkers */
 -				GPU_basic_shader_bind(GPU_SHADER_STIPPLE | GPU_SHADER_USE_COLOR);
 -				glColor4ub(UI_ALPHA_CHECKER_LIGHT, UI_ALPHA_CHECKER_LIGHT, UI_ALPHA_CHECKER_LIGHT, 255);
 -				GPU_basic_shader_stipple(GPU_SHADER_STIPPLE_CHECKER_8PX);
 +/* keep in sync with shader */
 +#define MAX_WIDGET_BASE_BATCH 6
 +#define MAX_WIDGET_PARAMETERS 11
  
 -				glVertexPointer(2, GL_FLOAT, 0, wtb->inner_v);
 -				glDrawArrays(GL_POLYGON, 0, wtb->totvert);
 +static struct {
 +	GPUBatch *batch; /* Batch type */
 +	uiWidgetBaseParameters params[MAX_WIDGET_BASE_BATCH];
 +	int count;
 +	bool enabled;
 +} g_widget_base_batch = {0};
  
 -				GPU_basic_shader_bind(GPU_SHADER_USE_COLOR);
 +void UI_widgetbase_draw_cache_flush(void)
 +{
 +	float checker_params[3] = {UI_ALPHA_CHECKER_DARK / 255.0f, UI_ALPHA_CHECKER_LIGHT / 255.0f, 8.0f};
  
 -				/* alpha fill */
 -				glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
 +	if (g_widget_base_batch.count == 0)
 +		return;
  
 -				glColor4ubv((unsigned char *)wcol->inner);
 +	GPUBatch *batch = g_widget_base_batch.batch;
 +	if (g_widget_base_batch.count == 1) {
 +		/* draw single */
 +		GPU_batch_program_set_builtin(batch, GPU_SHADER_2D_WIDGET_BASE);
 +		GPU_batch_uniform_4fv_array(batch, "parameters", MAX_WIDGET_PARAMETERS, (float *)g_widget_base_batch.params);
 +		GPU_batch_uniform_3fv(batch, "checkerColorAndSize", checker_params);
 +		GPU_batch_draw(batch);
 +	}
 +	else {
 +		GPU_batch_program_set_builtin(batch, GPU_SHADER_2D_WIDGET_BASE_INST);
 +		GPU_batch_uniform_4fv_array(batch, "parameters", MAX_WIDGET_PARAMETERS * MAX_WIDGET_BASE_BATCH,
 +		                            (float *)g_widget_base_batch.params);
 +		GPU_batch_uniform_3fv(batch, "checkerColorAndSize", checker_params);
 +		GPU_matrix_bind(batch->interface);
 +		GPU_batch_draw_range_ex(batch, 0, g_widget_base_batch.count, true);
 +		GPU_batch_program_use_end(batch);
 +	}
 +	g_widget_base_batch.count = 0;
 +}
  
 -				for (a = 0; a < wtb->totvert; a++) {
 -					x_mid += wtb->inner_v[a][0];
 -				}
 -				x_mid /= wtb->totvert;
 +void UI_widgetbase_draw_cache_begin(void)
 +{
 +	BLI_assert(g_widget_base_batch.enabled == false);
 +	g_widget_base_batch.enabled = true;
 +}
  
 -				glVertexPointer(2, GL_FLOAT, 0, wtb->inner_v);
 -				glDrawArrays(GL_POLYGON, 0, wtb->totvert);
 +void UI_widgetbase_draw_cache_end(void)
 +{
 +	BLI_assert(g_widget_base_batch.enabled == true);
 +	g_widget_base_batch.enabled = false;
  
 -				/* 1/2 solid color */
 -				glColor4ub(wcol->inner[0], wcol->inner[1], wcol->inner[2], 255);
 +	GPU_blend(true);
  
 -				for (a = 0; a < wtb->totvert; a++) {
 -					inner_v_half[a][0] = MIN2(wtb->inner_v[a][0], x_mid);
 -					inner_v_half[a][1] = wtb->inner_v[a][1];
 -				}
 +	UI_widgetbase_draw_cache_flush();
  
 -				glVertexPointer(2, GL_FLOAT, 0, inner_v_half);
 -				glDrawArrays(GL_POLYGON, 0, wtb->totvert);
 -				glDisableClientState(GL_VERTEX_ARRAY);
 -			}
 -			else {
 -				/* simple fill */
 -				glColor4ubv((unsigned char *)wcol->inner);
 +	GPU_blend(false);
 +}
  
 -				glEnableClientState(GL_VERTEX_ARRAY);
 -				glVertexPointer(2, GL_FLOAT, 0, wtb->inner_v);
 -				glDrawArrays(GL_POLYGON, 0, wtb->totvert);
 -				glDisableClientState(GL_VERTEX_ARRAY);
 -			}
 +static void draw_widgetbase_batch(GPUBatch *batch, uiWidgetBase *wtb)
 +{
 +	wtb->uniform_params.tria1_size = wtb->tria1.size;
 +	wtb->uniform_params.tria2_size = wtb->tria2.size;
 +	copy_v2_v2(wtb->uniform_params.tria1_center, wtb->tria1.center);
 +	copy_v2_v2(wtb->uniform_params.tria2_center, wtb->tria2.center);
 +
 +	if (g_widget_base_batch.enabled) {
 +		if (g_widget_base_batch.batch == NULL) {
 +			g_widget_base_batch.batch = ui_batch_roundbox_widget_get(ROUNDBOX_TRIA_ARROWS);
  		}
 -		else {
 -			char col1[4], col2[4];
 -			unsigned char col_array[WIDGET_SIZE_MAX * 4];
 -			unsigned char *col_pt = col_array;
 -
 -			shadecolors4(col1, col2, wcol->inner, wcol->shadetop, wcol->shadedown);
  
 -			for (a = 0; a < wtb->totvert; a++, col_pt += 4) {
 -				round_box_shade_col4_r(col_pt, col1, col2, wtb->inner_uv[a][wtb->draw_shadedir ? 1 : 0]);
 -			}
 -
 -			glEnableClientState(GL_VERTEX_ARRAY);
 -			glEnableClientState(GL_COLOR_ARRAY);
 -			glVertexPointer(2, GL_FLOAT, 0, wtb->inner_v);
 -			glColorPointer(4, GL_UNSIGNED_BYTE, 0, col_array);
 -			glDrawArrays(GL_POLYGON, 0, wtb->totvert);
 -			glDisableClientState(GL_VERTEX_ARRAY);
 -			glDisableClientState(GL_COLOR_ARRAY);
 +		/* draw multi */
 +		if (batch != g_ui_batch_cache.roundbox_widget[ROUNDBOX_TRIA_NONE] &&
 +		    batch != g_widget_base_batch.batch)
 +		{
 +			/* issue previous calls before changing batch type. */
 +			UI_widgetbase_draw_cache_flush();
 +			g_widget_base_batch.batch = batch;
  		}
 -	}
  
 -	/* for each AA step */
 -	if (wtb->draw_outline) {
 -		BLI_assert(wtb->totvert != 0);
 -		float triangle_strip[WIDGET_SIZE_MAX * 2 + 2][2]; /* + 2 because the last pair is wrapped */
 -		float triangle_strip_emboss[WIDGET_SIZE_MAX * 2][2]; /* only for emboss */
 -
 -		const unsigned char tcol[4] = {
 -			wcol->outline[0],
 -			wcol->outline[1],
 -			wcol->outline[2],
 -			wcol->outline[3] / WIDGET_AA_JITTER,
 -		};
 -		unsigned char emboss[4];
 +		/* No need to change batch if tria is not visible. Just scale it to 0. */
 +		if (batch == g_ui_batch_cache.roundbox_widget[ROUNDBOX_TRIA_NONE]) {
 +			wtb->uniform_params.tria1_size = wtb->uniform_params.tria2_size = 0;
 +		}
  
 -		widget_verts_to_triangle_strip(wtb, wtb->totvert, triangle_strip);
 +		g_widget_base_batch.params[g_widget_base_batch.count] = wtb->uniform_params;
 +		g_widget_base_batch.count++;
  
 -		if (wtb->draw_emboss) {
 -			widget_verts_to_triangle_strip_open(wtb, wtb->halfwayvert, triangle_strip_emboss);
 -			UI_GetThemeColor4ubv(TH_WIDGET_EMBOSS, emboss);
 +		if (g_widget_base_batch.count == MAX_WIDGET_BASE_BATCH) {
 +			UI_widgetbase_draw_cache_flush();
  		}
 +	}
 +	else {
 +		float checker_params[3] = {UI_ALPHA_CHECKER_DARK / 255.0f, UI_ALPHA_CHECKER_LIGHT / 255.0f, 8.0f};
 +		/* draw single */
 +		GPU_batch_program_set_builtin(batch, GPU_SHADER_2D_WIDGET_BASE);
 +		GPU_batch_uniform_4fv_array(batch, "parameters", MAX_WIDGET_PARAMETERS, (float *)&wtb->uniform_params);
 +		GPU_batch_uniform_3fv(batch, "checkerColorAndSize", checker_params);
 +		GPU_batch_draw(batch);
 +	}
 +}
  
- static void widgetbase_draw(uiWidgetBase *wtb, const uiWidgetColors *wcol)
 -		glEnableClientState(GL_VERTEX_ARRAY);
 -
 -		for (j = 0; j < WIDGET_AA_JITTER; j++) {
 -			glTranslate2fv(jit[j]);
++static void widgetbase_draw_ex(
++        uiWidgetBase *wtb, const uiWidgetColors *wcol,
++        bool show_alpha_checkers)
 +{
 +	unsigned char inner_col1[4] = {0};
 +	unsigned char inner_col2[4] = {0};
 +	unsigned char emboss_col[4] = {0};
 +	unsigned char outline_col[4] = {0};
 +	unsigned char tria_col[4] = {0};
 +	/* For color widget. */
- 	bool alpha_check = (wcol->alpha_check && (wcol->shaded == 0));
++	if (wcol->shaded != 0) {
++		show_alpha_checkers = false;
++	}
  
 -			/* outline */
 -			glColor4ubv(tcol);
 +	GPU_blend(true);


@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list