[Bf-blender-cvs] [af2fc7b6373] blender2.8: Merge branch 'master' into 28

Campbell Barton noreply at git.blender.org
Wed Apr 12 12:25:56 CEST 2017


Commit: af2fc7b6373ae582168a254c36bc808d8478dd03
Author: Campbell Barton
Date:   Wed Apr 12 20:23:30 2017 +1000
Branches: blender2.8
https://developer.blender.org/rBaf2fc7b6373ae582168a254c36bc808d8478dd03

Merge branch 'master' into 28

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



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

diff --cc source/blender/gpu/intern/gpu_basic_shader.c
index bbd28c8803d,8505bd847a0..ff385683a1e
--- a/source/blender/gpu/intern/gpu_basic_shader.c
+++ b/source/blender/gpu/intern/gpu_basic_shader.c
@@@ -294,12 -420,34 +294,12 @@@ static void gpu_basic_shader_uniform_au
  
  void GPU_basic_shader_bind(int options)
  {
 -	if (USE_GLSL) {
 -		if (options) {
 -			const int bound_options = GPU_MATERIAL_STATE.bound_options;
 -
 -			/* texture options need to be set for basic shader too */
 -			if (options & GPU_SHADER_TEXTURE_2D) {
 -				glEnable(GL_TEXTURE_2D);
 -			}
 -			else if (bound_options & GPU_SHADER_TEXTURE_2D) {
 -				glDisable(GL_TEXTURE_2D);
 -			}
 -
 -			if (options & GPU_SHADER_TEXTURE_RECT) {
 -				glEnable(GL_TEXTURE_RECTANGLE);
 -			}
 -			else if (bound_options & GPU_SHADER_TEXTURE_RECT) {
 -				glDisable(GL_TEXTURE_RECTANGLE);
 -			}
 +	if (options) {
 +		GPUShader *shader = gpu_basic_shader(options);
  
 -			GPUShader *shader = gpu_basic_shader(options);
 -
 -			if (shader) {
 -				GPU_shader_bind(shader);
 -				gpu_basic_shader_uniform_autoset(shader, options);
 -			}
 -		}
 -		else {
 -			GPU_shader_unbind();
 +		if (shader) {
 +			GPU_shader_bind(shader);
- 			GPU_basic_shader_uniform_autoset(shader, options);
++			gpu_basic_shader_uniform_autoset(shader, options);
  		}
  	}
  	else {
diff --cc source/blender/gpu/intern/gpu_draw.c
index 6008e32f0fd,074fadf6003..3ef0a02718d
--- a/source/blender/gpu/intern/gpu_draw.c
+++ b/source/blender/gpu/intern/gpu_draw.c
@@@ -1175,9 -1203,11 +1175,9 @@@ void GPU_paint_set_mipmap(bool mipmap
  
  
  /* check if image has been downscaled and do scaled partial update */
- static bool GPU_check_scaled_image(ImBuf *ibuf, Image *ima, float *frect, int x, int y, int w, int h)
+ static bool gpu_check_scaled_image(ImBuf *ibuf, Image *ima, float *frect, int x, int y, int w, int h)
  {
 -	if ((!GPU_full_non_power_of_two_support() && !is_power_of_2_resolution(ibuf->x, ibuf->y)) ||
 -	    is_over_resolution_limit(GL_TEXTURE_2D, ibuf->x, ibuf->y))
 -	{
 +	if (is_over_resolution_limit(GL_TEXTURE_2D, ibuf->x, ibuf->y)) {
  		int x_limit = smaller_power_of_2_limit(ibuf->x);
  		int y_limit = smaller_power_of_2_limit(ibuf->y);
  
@@@ -1265,8 -1295,8 +1265,8 @@@ void GPU_paint_update_image(Image *ima
  			float *buffer = MEM_mallocN(w * h * sizeof(float) * 4, "temp_texpaint_float_buf");
  			bool is_data = (ima->tpageflag & IMA_GLBIND_IS_DATA) != 0;
  			IMB_partial_rect_from_float(ibuf, buffer, x, y, w, h, is_data);
 -			
 +
- 			if (GPU_check_scaled_image(ibuf, ima, buffer, x, y, w, h)) {
+ 			if (gpu_check_scaled_image(ibuf, ima, buffer, x, y, w, h)) {
  				MEM_freeN(buffer);
  				BKE_image_release_ibuf(ima, ibuf, NULL);
  				return;
@@@ -1945,8 -1964,9 +1945,8 @@@ int GPU_object_material_bind(int nr, vo
  			GPUMaterial *gpumat = GPU_material_from_blender(GMS.gscene, mat, GMS.is_opensubdiv);
  			GPU_material_vertex_attributes(gpumat, gattribs);
  
 -			if (GMS.dob) {
 +			if (GMS.dob)
- 				GPU_get_particle_info(&partile_info);
+ 				gpu_get_particle_info(&partile_info);
 -			}
  
  			GPU_material_bind(
  			        gpumat, GMS.gob->lay, GMS.glay, 1.0, !(GMS.gob->mode & OB_MODE_TEXTURE_PAINT),
diff --cc source/blender/gpu/intern/gpu_framebuffer.c
index fabcf4409da,e7a8beae5cc..ce3b37b3a66
--- a/source/blender/gpu/intern/gpu_framebuffer.c
+++ b/source/blender/gpu/intern/gpu_framebuffer.c
@@@ -51,42 -50,48 +51,42 @@@ struct GPUFrameBuffer 
  	GLuint object;
  	GPUTexture *colortex[GPU_FB_MAX_SLOTS];
  	GPUTexture *depthtex;
 +	struct GPUStateValues attribs;
  };
  
- static void GPU_print_framebuffer_error(GLenum status, char err_out[256])
+ static void gpu_print_framebuffer_error(GLenum status, char err_out[256])
  {
 +	const char *format = "GPUFrameBuffer: framebuffer status %s\n";
  	const char *err = "unknown";
  
 +#define format_status(X) \
 +	case GL_FRAMEBUFFER_##X: err = "GL_FRAMEBUFFER_"#X; \
 +		break;
 +
  	switch (status) {
 -		case GL_FRAMEBUFFER_COMPLETE_EXT:
 -			break;
 -		case GL_INVALID_OPERATION:
 -			err = "Invalid operation";
 -			break;
 -		case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT:
 -			err = "Incomplete attachment";
 -			break;
 -		case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
 -			err = "Unsupported framebuffer format";
 -			break;
 -		case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT:
 -			err = "Missing attachment";
 -			break;
 -		case GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT:
 -			err = "Attached images must have same dimensions";
 -			break;
 -		case GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT:
 -			err = "Attached images must have same format";
 -			break;
 -		case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT:
 -			err = "Missing draw buffer";
 -			break;
 -		case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT:
 -			err = "Missing read buffer";
 -			break;
 +		/* success */
 +		format_status(COMPLETE)
 +		/* errors shared by OpenGL desktop & ES */
 +		format_status(INCOMPLETE_ATTACHMENT)
 +		format_status(INCOMPLETE_MISSING_ATTACHMENT)
 +		format_status(UNSUPPORTED)
 +#if 0 /* for OpenGL ES only */
 +		format_status(INCOMPLETE_DIMENSIONS)
 +#else /* for desktop GL only */
 +		format_status(INCOMPLETE_DRAW_BUFFER)
 +		format_status(INCOMPLETE_READ_BUFFER)
 +		format_status(INCOMPLETE_MULTISAMPLE)
 +		format_status(UNDEFINED)
 +#endif
  	}
  
 +#undef format_status
 +
  	if (err_out) {
 -		BLI_snprintf(err_out, 256, "GPUFrameBuffer: framebuffer incomplete error %d '%s'",
 -			(int)status, err);
 +		BLI_snprintf(err_out, 256, format, err);
  	}
  	else {
 -		fprintf(stderr, "GPUFrameBuffer: framebuffer incomplete error %d '%s'\n",
 -			(int)status, err);
 +		fprintf(stderr, format, err);
  	}
  }
  
@@@ -320,17 -319,22 +320,17 @@@ bool GPU_framebuffer_bound(GPUFrameBuff
  
  bool GPU_framebuffer_check_valid(GPUFrameBuffer *fb, char err_out[256])
  {
 -	GLenum status;
 -	
 -	glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fb->object);
 +	glBindFramebuffer(GL_FRAMEBUFFER, fb->object);
  	GG.currentfb = fb->object;
 -	
 -	/* Clean glError buffer. */
 -	while (glGetError() != GL_NO_ERROR) {}
 -	
 -	status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
 -	
 -	if (status != GL_FRAMEBUFFER_COMPLETE_EXT) {
 +
 +	GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
 +
 +	if (status != GL_FRAMEBUFFER_COMPLETE) {
  		GPU_framebuffer_restore();
- 		GPU_print_framebuffer_error(status, err_out);
+ 		gpu_print_framebuffer_error(status, err_out);
  		return false;
  	}
 -	
 +
  	return true;
  }
  
diff --cc source/blender/gpu/intern/gpu_texture.c
index 4b3570e3831,1c97c2ce811..d0f5a5a5b15
--- a/source/blender/gpu/intern/gpu_texture.c
+++ b/source/blender/gpu/intern/gpu_texture.c
@@@ -61,165 -62,33 +61,167 @@@ struct GPUTexture 
  
  	GPUFrameBuffer *fb; /* GPUFramebuffer this texture is attached to */
  	int fb_attachment;  /* slot the texture is attached to */
 -	int depth;          /* is a depth texture? if 3D how deep? */
 +	bool depth;         /* is a depth texture? */
 +	bool stencil;       /* is a stencil texture? */
  };
  
- static GLenum GPU_texture_get_format(int components, GPUTextureFormat data_type, GLenum *format, GLenum *data_format, bool *is_depth, bool *is_stencil)
 -static unsigned char *GPU_texture_convert_pixels(int length, const float *fpixels)
++static GLenum gpu_texture_get_format(
++        int components, GPUTextureFormat data_type,
++        GLenum *format, GLenum *data_format, bool *is_depth, bool *is_stencil)
  {
 -	unsigned char *pixels, *p;
 -	const float *fp = fpixels;
 -	const int len = 4 * length;
 +	if (data_type == GPU_DEPTH_COMPONENT24 ||
 +	    data_type == GPU_DEPTH_COMPONENT16 ||
 +	    data_type == GPU_DEPTH_COMPONENT32F)
 +	{
 +		*is_depth = true;
 +		*is_stencil = false;
 +		*data_format = GL_FLOAT;
 +		*format = GL_DEPTH_COMPONENT;
 +	}
 +	else if (data_type == GPU_DEPTH24_STENCIL8) {
 +		*is_depth = true;
 +		*is_stencil = true;
 +		*data_format = GL_UNSIGNED_INT_24_8;
 +		*format = GL_DEPTH_STENCIL;
 +	}
 +	else {
 +		*is_depth = false;
 +		*is_stencil = false;
 +		*data_format = GL_FLOAT;
 +
 +		switch (components) {
 +			case 1: *format = GL_RED; break;
 +			case 2: *format = GL_RG; break;
 +			case 3: *format = GL_RGB; break;
 +			case 4: *format = GL_RGBA; break;
 +			default: break;
 +		}
 +	}
 +
 +	/* You can add any of the available type to this list
 +	 * For available types see GPU_texture.h */
 +	switch (data_type) {
 +		/* Formats texture & renderbuffer */
 +		case GPU_RGBA16F: return GL_RGBA16F;
 +		case GPU_RG32F: return GL_RG32F;
 +		case GPU_RG16F: return GL_RG16F;
 +		case GPU_RGBA8: return GL_RGBA8;
 +		case GPU_R16F: return GL_R16F;
 +		case GPU_R8: return GL_R8;
 +		/* Special formats texture & renderbuffer */
 +		case GPU_DEPTH24_STENCIL8: return GL_DEPTH24_STENCIL8;
 +		/* Texture only format */
 +		/* ** Add Format here **/
 +		/* Special formats texture only */
 +		/* ** Add Format here **/
 +		/* Depth Formats */
 +		case GPU_DEPTH_COMPONENT32F: return GL_DEPTH_COMPONENT32F;
 +		case GPU_DEPTH_COMPONENT24: return GL_DEPTH_COMPONENT24;
 +		case GPU_DEPTH_COMPONENT16: return GL_DEPTH_COMPONENT16;
 +		default:
 +			fprintf(stderr, "Texture format incorrect or unsupported\n");
 +			return 0;
 +	}
 +}
  
 -	p = pixels = MEM_callocN(sizeof(unsigned char) * len, "GPUTexturePixels");
 +static float *GPU_texture_3D_rescale(GPUTexture *tex, int w, int h, int d, int channels, const float *fpixels)
 +{
 +	const unsigned int xf = w / tex->w, yf = h / tex->h, zf = d / tex->d;
 +	float *nfpixels = MEM_mallocN(channels * sizeof(float) * tex->w * tex->h * tex->d, "GPUTexture Rescaled 3Dtex");
 +
 +	if (nfpixels) {
 +		GPU_print_error_debug("You need to scale a 3D texture, feel the pain!");
 +
 +		for (unsigned k = 0; k < tex->d; k++) {
 +			for (unsigned j = 0; j < tex->h; j++) {
 +				for (unsigned i = 0; i < tex->w; i++) {
 +					/* obviously doing nearest filtering here,
 +					 * it's going to be slow in any case, let's not make it worse */
 +					float xb = i * xf;
 +					float yb = j * yf;
 +					float zb = k * zf;
 +					unsigned int offset = k * (tex->w * tex->h) + i * tex->h + j;
 +					unsigned int offset_orig = (zb) * (w * h) + (xb) * h + (yb);
  
 -	for (int a = 0; a < len; a++, p++, fp++)
 -		*p = FTOCHAR((*fp));
 +					if (channels 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list