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. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to