[Bf-blender-cvs] [f5e2d420923] blender2.8: GPU Texture: Add GL_RG16I format.
Clément Foucault
noreply at git.blender.org
Mon Jan 15 15:42:36 CET 2018
Commit: f5e2d4209234d41cade98660e2e51a06940005e1
Author: Clément Foucault
Date: Sat Jan 13 17:14:01 2018 +0100
Branches: blender2.8
https://developer.blender.org/rBf5e2d4209234d41cade98660e2e51a06940005e1
GPU Texture: Add GL_RG16I format.
===================================================================
M source/blender/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager.c
M source/blender/gpu/GPU_texture.h
M source/blender/gpu/intern/gpu_texture.c
===================================================================
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index fb736061c61..c9a97131097 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -157,7 +157,9 @@ typedef struct DefaultTextureList {
#endif
/* Textures */
-
+/* NOTE naming in this struct is broken.
+ * There should either be suffixes for Normalized int formats or float formats.
+ * Right now every 8bit texture is Normalized int and others are Floating point. */
typedef enum {
DRW_TEX_RGBA_8,
DRW_TEX_RGBA_16,
@@ -168,6 +170,7 @@ typedef enum {
DRW_TEX_RGB_32,
DRW_TEX_RG_8,
DRW_TEX_RG_16,
+ DRW_TEX_RG_16I,
DRW_TEX_RG_32,
DRW_TEX_R_8,
DRW_TEX_R_16,
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index c2318949e9c..6553bc385b5 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -397,6 +397,7 @@ static void drw_texture_get_format(
case DRW_TEX_RGB_11_11_10: *r_data_type = GPU_R11F_G11F_B10F; break;
case DRW_TEX_RG_8: *r_data_type = GPU_RG8; break;
case DRW_TEX_RG_16: *r_data_type = GPU_RG16F; break;
+ case DRW_TEX_RG_16I: *r_data_type = GPU_RG16I; break;
case DRW_TEX_RG_32: *r_data_type = GPU_RG32F; break;
case DRW_TEX_R_8: *r_data_type = GPU_R8; break;
case DRW_TEX_R_16: *r_data_type = GPU_R16F; break;
@@ -430,6 +431,7 @@ static void drw_texture_get_format(
break;
case DRW_TEX_RG_8:
case DRW_TEX_RG_16:
+ case DRW_TEX_RG_16I:
case DRW_TEX_RG_32:
*r_channels = 2;
break;
@@ -2294,6 +2296,7 @@ static GPUTextureFormat convert_tex_format(
case DRW_TEX_R_32: *r_channels = 1; return GPU_R32F;
case DRW_TEX_RG_8: *r_channels = 2; return GPU_RG8;
case DRW_TEX_RG_16: *r_channels = 2; return GPU_RG16F;
+ case DRW_TEX_RG_16I: *r_channels = 2; return GPU_RG16I;
case DRW_TEX_RG_32: *r_channels = 2; return GPU_RG32F;
case DRW_TEX_RGBA_8: *r_channels = 4; return GPU_RGBA8;
case DRW_TEX_RGBA_16: *r_channels = 4; return GPU_RGBA16F;
diff --git a/source/blender/gpu/GPU_texture.h b/source/blender/gpu/GPU_texture.h
index 3ed9ab4bf2c..1b64d66469b 100644
--- a/source/blender/gpu/GPU_texture.h
+++ b/source/blender/gpu/GPU_texture.h
@@ -67,6 +67,7 @@ typedef enum GPUTextureFormat {
GPU_RGBA8,
GPU_RG32F,
GPU_RG16F,
+ GPU_RG16I,
GPU_R32F,
GPU_R16F,
GPU_RG8,
@@ -82,7 +83,6 @@ typedef enum GPUTextureFormat {
GPU_RG32I,
GPU_RG32UI,
GPU_RG16,
- GPU_RG16I,
GPU_RG16UI,
GPU_RG8I,
GPU_RG8UI,
diff --git a/source/blender/gpu/intern/gpu_texture.c b/source/blender/gpu/intern/gpu_texture.c
index bcc0bb2649f..d6b641af225 100644
--- a/source/blender/gpu/intern/gpu_texture.c
+++ b/source/blender/gpu/intern/gpu_texture.c
@@ -115,9 +115,9 @@ static GLenum gpu_texture_get_format(
int components, GPUTextureFormat data_type,
GLenum *format, GLenum *data_format, bool *is_depth, bool *is_stencil, unsigned int *bytesize)
{
- if (data_type == GPU_DEPTH_COMPONENT24 ||
- data_type == GPU_DEPTH_COMPONENT16 ||
- data_type == GPU_DEPTH_COMPONENT32F)
+ if (ELEM(data_type, GPU_DEPTH_COMPONENT24,
+ GPU_DEPTH_COMPONENT16,
+ GPU_DEPTH_COMPONENT32F))
{
*is_depth = true;
*is_stencil = false;
@@ -133,14 +133,29 @@ static GLenum gpu_texture_get_format(
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;
+ /* Integer formats */
+ if (ELEM(data_type, GPU_RG16I)) {
+ *data_format = GL_INT;
+
+ switch (components) {
+ case 1: *format = GL_RED_INTEGER; break;
+ case 2: *format = GL_RG_INTEGER; break;
+ case 3: *format = GL_RGB_INTEGER; break;
+ case 4: *format = GL_RGBA_INTEGER; break;
+ default: break;
+ }
+ }
+ else {
+ *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;
+ }
}
}
@@ -156,6 +171,7 @@ static GLenum gpu_texture_get_format(
*bytesize = 12;
break;
case GPU_RG16F:
+ case GPU_RG16I:
case GPU_DEPTH24_STENCIL8:
case GPU_DEPTH_COMPONENT32F:
case GPU_RGBA8:
@@ -188,6 +204,7 @@ static GLenum gpu_texture_get_format(
case GPU_RG32F: return GL_RG32F;
case GPU_RGB16F: return GL_RGB16F;
case GPU_RG16F: return GL_RG16F;
+ case GPU_RG16I: return GL_RG16I;
case GPU_RGBA8: return GL_RGBA8;
case GPU_R32F: return GL_R32F;
case GPU_R16F: return GL_R16F;
More information about the Bf-blender-cvs
mailing list