forked from bartvdbraak/blender
Image: Display GPU layout in uiTemplateImageInfo
Add IMB_gpu_get_texture_format and GPU_texture_format_description to retrieve and 'stringify' an eGPUTextureFormat. These are then used in the image info panel used in several areas across blender. New Information: {F13330937} Reviewed By: jbakker Maniphest Tasks: T99998 Differential Revision: https://developer.blender.org/D15575
This commit is contained in:
parent
abc46d5aeb
commit
ea70687dd5
@ -5,6 +5,7 @@ set(INC
|
||||
.
|
||||
../clog
|
||||
../glew-mx
|
||||
../../source/blender/blenlib
|
||||
../../source/blender/imbuf
|
||||
../../source/blender/makesdna
|
||||
)
|
||||
|
@ -1211,6 +1211,12 @@ void uiTemplateImageInfo(uiLayout *layout, bContext *C, Image *ima, ImageUser *i
|
||||
ofs += BLI_strncpy_rlen(str + ofs, TIP_(" + Z"), len - ofs);
|
||||
}
|
||||
|
||||
eGPUTextureFormat texture_format = IMB_gpu_get_texture_format(ibuf,
|
||||
ima->flag & IMA_HIGH_BITDEPTH);
|
||||
const char *texture_format_description = GPU_texture_format_description(
|
||||
texture_format);
|
||||
ofs += BLI_snprintf_rlen(str + ofs, len - ofs, TIP_(", %s"), texture_format_description);
|
||||
|
||||
uiItemL(col, str, ICON_NONE);
|
||||
}
|
||||
|
||||
|
@ -331,6 +331,7 @@ int GPU_texture_orig_width(const GPUTexture *tex);
|
||||
int GPU_texture_orig_height(const GPUTexture *tex);
|
||||
void GPU_texture_orig_size_set(GPUTexture *tex, int w, int h);
|
||||
eGPUTextureFormat GPU_texture_format(const GPUTexture *tex);
|
||||
const char *GPU_texture_format_description(eGPUTextureFormat texture_format);
|
||||
bool GPU_texture_array(const GPUTexture *tex);
|
||||
bool GPU_texture_cube(const GPUTexture *tex);
|
||||
bool GPU_texture_depth(const GPUTexture *tex);
|
||||
|
@ -641,6 +641,112 @@ eGPUTextureFormat GPU_texture_format(const GPUTexture *tex)
|
||||
return reinterpret_cast<const Texture *>(tex)->format_get();
|
||||
}
|
||||
|
||||
const char *GPU_texture_format_description(eGPUTextureFormat texture_format)
|
||||
{
|
||||
switch (texture_format) {
|
||||
case GPU_RGBA8UI:
|
||||
return "RGBA8UI";
|
||||
case GPU_RGBA8I:
|
||||
return "RGBA8I";
|
||||
case GPU_RGBA8:
|
||||
return "RGBA8";
|
||||
case GPU_RGBA32UI:
|
||||
return "RGBA32UI";
|
||||
case GPU_RGBA32I:
|
||||
return "RGBA32I";
|
||||
case GPU_RGBA32F:
|
||||
return "RGBA32F";
|
||||
case GPU_RGBA16UI:
|
||||
return "RGBA16UI";
|
||||
case GPU_RGBA16I:
|
||||
return "RGBA16I";
|
||||
case GPU_RGBA16F:
|
||||
return "RGBA16F";
|
||||
case GPU_RGBA16:
|
||||
return "RGBA16";
|
||||
case GPU_RG8UI:
|
||||
return "RG8UI";
|
||||
case GPU_RG8I:
|
||||
return "RG8I";
|
||||
case GPU_RG8:
|
||||
return "RG8";
|
||||
case GPU_RG32UI:
|
||||
return "RG32UI";
|
||||
case GPU_RG32I:
|
||||
return "RG32I";
|
||||
case GPU_RG32F:
|
||||
return "RG32F";
|
||||
case GPU_RG16UI:
|
||||
return "RG16UI";
|
||||
case GPU_RG16I:
|
||||
return "RG16I";
|
||||
case GPU_RG16F:
|
||||
return "RG16F";
|
||||
case GPU_RG16:
|
||||
return "RG16";
|
||||
case GPU_R8UI:
|
||||
return "R8UI";
|
||||
case GPU_R8I:
|
||||
return "R8I";
|
||||
case GPU_R8:
|
||||
return "R8";
|
||||
case GPU_R32UI:
|
||||
return "R32UI";
|
||||
case GPU_R32I:
|
||||
return "R32I";
|
||||
case GPU_R32F:
|
||||
return "R32F";
|
||||
case GPU_R16UI:
|
||||
return "R16UI";
|
||||
case GPU_R16I:
|
||||
return "R16I";
|
||||
case GPU_R16F:
|
||||
return "R16F";
|
||||
case GPU_R16:
|
||||
return "R16";
|
||||
|
||||
|
||||
/* Special formats texture & render-buffer. */
|
||||
case GPU_RGB10_A2:
|
||||
return "RGB10A2";
|
||||
case GPU_R11F_G11F_B10F:
|
||||
return "R11FG11FB10F";
|
||||
case GPU_DEPTH32F_STENCIL8:
|
||||
return "DEPTH32FSTENCIL8";
|
||||
case GPU_DEPTH24_STENCIL8:
|
||||
return "DEPTH24STENCIL8";
|
||||
case GPU_SRGB8_A8:
|
||||
return "SRGB8A8";
|
||||
|
||||
/* Texture only format */
|
||||
case (GPU_RGB16F):
|
||||
return "RGB16F";
|
||||
|
||||
/* Special formats texture only */
|
||||
case GPU_SRGB8_A8_DXT1:
|
||||
return "SRGB8_A8_DXT1";
|
||||
case GPU_SRGB8_A8_DXT3:
|
||||
return "SRGB8_A8_DXT3";
|
||||
case GPU_SRGB8_A8_DXT5:
|
||||
return "SRGB8_A8_DXT5";
|
||||
case GPU_RGBA8_DXT1:
|
||||
return "RGBA8_DXT1";
|
||||
case GPU_RGBA8_DXT3:
|
||||
return "RGBA8_DXT3";
|
||||
case GPU_RGBA8_DXT5:
|
||||
return "RGBA8_DXT5";
|
||||
|
||||
/* Depth Formats */
|
||||
case GPU_DEPTH_COMPONENT32F:
|
||||
return "DEPTH32F";
|
||||
case GPU_DEPTH_COMPONENT24:
|
||||
return "DEPTH24";
|
||||
case GPU_DEPTH_COMPONENT16:
|
||||
return "DEPTH16";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool GPU_texture_depth(const GPUTexture *tex)
|
||||
{
|
||||
return (reinterpret_cast<const Texture *>(tex)->format_flag_get() & GPU_FORMAT_DEPTH) != 0;
|
||||
|
@ -41,6 +41,7 @@
|
||||
|
||||
/* for bool */
|
||||
#include "../blenlib/BLI_sys_types.h"
|
||||
#include "../gpu/GPU_texture.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -72,12 +73,6 @@ struct GSet;
|
||||
struct ImageFormatData;
|
||||
struct Stereo3dFormat;
|
||||
|
||||
/**
|
||||
*
|
||||
* \attention defined in GPU_texture.h
|
||||
*/
|
||||
struct GPUTexture;
|
||||
|
||||
/**
|
||||
*
|
||||
* \attention Defined in allocimbuf.c
|
||||
@ -933,22 +928,25 @@ const char *IMB_ffmpeg_last_error(void);
|
||||
*
|
||||
* \attention defined in util_gpu.c
|
||||
*/
|
||||
struct GPUTexture *IMB_create_gpu_texture(const char *name,
|
||||
GPUTexture *IMB_create_gpu_texture(const char *name,
|
||||
struct ImBuf *ibuf,
|
||||
bool use_high_bitdepth,
|
||||
bool use_premult);
|
||||
|
||||
eGPUTextureFormat IMB_gpu_get_texture_format(const struct ImBuf *ibuf, bool high_bitdepth);
|
||||
|
||||
/**
|
||||
* The `ibuf` is only here to detect the storage type. The produced texture will have undefined
|
||||
* content. It will need to be populated by using #IMB_update_gpu_texture_sub().
|
||||
*/
|
||||
struct GPUTexture *IMB_touch_gpu_texture(
|
||||
GPUTexture *IMB_touch_gpu_texture(
|
||||
const char *name, struct ImBuf *ibuf, int w, int h, int layers, bool use_high_bitdepth);
|
||||
/**
|
||||
* Will update a #GPUTexture using the content of the #ImBuf. Only one layer will be updated.
|
||||
* Will resize the ibuf if needed.
|
||||
* Z is the layer to update. Unused if the texture is 2D.
|
||||
*/
|
||||
void IMB_update_gpu_texture_sub(struct GPUTexture *tex,
|
||||
void IMB_update_gpu_texture_sub(GPUTexture *tex,
|
||||
struct ImBuf *ibuf,
|
||||
int x,
|
||||
int y,
|
||||
|
@ -290,3 +290,13 @@ GPUTexture *IMB_create_gpu_texture(const char *name,
|
||||
|
||||
return tex;
|
||||
}
|
||||
|
||||
eGPUTextureFormat IMB_gpu_get_texture_format(const ImBuf *ibuf, bool high_bitdepth)
|
||||
{
|
||||
eGPUTextureFormat gpu_texture_format;
|
||||
eGPUDataFormat gpu_data_format;
|
||||
|
||||
imb_gpu_get_format(ibuf, high_bitdepth, &gpu_data_format, &gpu_texture_format);
|
||||
|
||||
return gpu_texture_format;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user