Blender  V3.3
Namespaces
gpu_texture.cc File Reference
#include "BLI_string.h"
#include "GPU_framebuffer.h"
#include "GPU_texture.h"
#include "gpu_backend.hh"
#include "gpu_context_private.hh"
#include "gpu_framebuffer_private.hh"
#include "gpu_texture_private.hh"

Go to the source code of this file.

Namespaces

 blender
 
 blender::gpu
 

Functions

C-API
uint GPU_texture_memory_usage_get ()
 
static GPUTexturegpu_texture_create (const char *name, const int w, const int h, const int d, const eGPUTextureType type, int mip_len, eGPUTextureFormat tex_format, eGPUDataFormat data_format, const void *pixels)
 
GPUTextureGPU_texture_create_1d (const char *name, int w, int mip_len, eGPUTextureFormat format, const float *data)
 
GPUTextureGPU_texture_create_1d_array (const char *name, int w, int h, int mip_len, eGPUTextureFormat format, const float *data)
 
GPUTextureGPU_texture_create_2d (const char *name, int w, int h, int mip_len, eGPUTextureFormat format, const float *data)
 
GPUTextureGPU_texture_create_2d_array (const char *name, int w, int h, int d, int mip_len, eGPUTextureFormat format, const float *data)
 
GPUTextureGPU_texture_create_3d (const char *name, int w, int h, int d, int mip_len, eGPUTextureFormat texture_format, eGPUDataFormat data_format, const void *data)
 
GPUTextureGPU_texture_create_cube (const char *name, int w, int mip_len, eGPUTextureFormat format, const float *data)
 
GPUTextureGPU_texture_create_cube_array (const char *name, int w, int d, int mip_len, eGPUTextureFormat format, const float *data)
 
GPUTextureGPU_texture_create_compressed_2d (const char *name, int w, int h, int miplen, eGPUTextureFormat tex_format, const void *data)
 
GPUTextureGPU_texture_create_from_vertbuf (const char *name, GPUVertBuf *vert)
 
GPUTextureGPU_texture_create_error (int dimension, bool is_array)
 
GPUTextureGPU_texture_create_view (const char *name, const GPUTexture *src, eGPUTextureFormat format, int mip_start, int mip_len, int layer_start, int layer_len, bool cube_as_array)
 
void GPU_texture_update_mipmap (GPUTexture *tex_, int miplvl, eGPUDataFormat data_format, const void *pixels)
 
void GPU_texture_update_sub (GPUTexture *tex, eGPUDataFormat data_format, const void *pixels, int offset_x, int offset_y, int offset_z, int width, int height, int depth)
 
voidGPU_texture_read (GPUTexture *tex_, eGPUDataFormat data_format, int miplvl)
 
void GPU_texture_clear (GPUTexture *tex, eGPUDataFormat data_format, const void *data)
 
void GPU_texture_update (GPUTexture *tex, eGPUDataFormat data_format, const void *data)
 
void GPU_unpack_row_length_set (uint len)
 
void GPU_texture_bind_ex (GPUTexture *tex_, eGPUSamplerState state, int unit, const bool UNUSED(set_number))
 
void GPU_texture_bind (GPUTexture *tex_, int unit)
 
void GPU_texture_unbind (GPUTexture *tex_)
 
void GPU_texture_unbind_all ()
 
void GPU_texture_image_bind (GPUTexture *tex, int unit)
 
void GPU_texture_image_unbind (GPUTexture *tex)
 
void GPU_texture_image_unbind_all ()
 
void GPU_texture_generate_mipmap (GPUTexture *tex)
 
void GPU_texture_copy (GPUTexture *dst_, GPUTexture *src_)
 
void GPU_texture_compare_mode (GPUTexture *tex_, bool use_compare)
 
void GPU_texture_filter_mode (GPUTexture *tex_, bool use_filter)
 
void GPU_texture_mipmap_mode (GPUTexture *tex_, bool use_mipmap, bool use_filter)
 
void GPU_texture_anisotropic_filter (GPUTexture *tex_, bool use_aniso)
 
void GPU_texture_wrap_mode (GPUTexture *tex_, bool use_repeat, bool use_clamp)
 
void GPU_texture_swizzle_set (GPUTexture *tex, const char swizzle[4])
 
void GPU_texture_stencil_texture_mode_set (GPUTexture *tex, bool use_stencil)
 
void GPU_texture_free (GPUTexture *tex_)
 
void GPU_texture_ref (GPUTexture *tex)
 
int GPU_texture_dimensions (const GPUTexture *tex_)
 
int GPU_texture_width (const GPUTexture *tex)
 
int GPU_texture_height (const GPUTexture *tex)
 
int GPU_texture_layer_count (const GPUTexture *tex)
 
int GPU_texture_mip_count (const GPUTexture *tex)
 
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)
 
bool GPU_texture_depth (const GPUTexture *tex)
 
bool GPU_texture_stencil (const GPUTexture *tex)
 
bool GPU_texture_integer (const GPUTexture *tex)
 
bool GPU_texture_cube (const GPUTexture *tex)
 
bool GPU_texture_array (const GPUTexture *tex)
 
void ** GPU_texture_py_reference_get (GPUTexture *tex)
 
void GPU_texture_py_reference_set (GPUTexture *tex, void **py_ref)
 
int GPU_texture_opengl_bindcode (const GPUTexture *tex)
 
void GPU_texture_get_mipmap_size (GPUTexture *tex, int lvl, int *r_size)
 
GPU Sampler Objects

Simple wrapper around opengl sampler objects. Override texture sampler state for one sampler unit only.

void GPU_samplers_update ()
 
GPU texture utilities
size_t GPU_texture_component_len (eGPUTextureFormat tex_format)
 
size_t GPU_texture_dataformat_size (eGPUDataFormat data_format)
 

Function Documentation

◆ GPU_samplers_update()

void GPU_samplers_update ( void  )

Update user defined sampler states.

Definition at line 702 of file gpu_texture.cc.

References blender::gpu::GPUBackend::get(), and blender::gpu::GPUBackend::samplers_update().

◆ GPU_texture_anisotropic_filter()

void GPU_texture_anisotropic_filter ( GPUTexture tex_,
bool  use_aniso 
)

◆ GPU_texture_array()

bool GPU_texture_array ( const GPUTexture tex)

◆ GPU_texture_bind()

void GPU_texture_bind ( GPUTexture tex_,
int  unit 
)

◆ GPU_texture_bind_ex()

void GPU_texture_bind_ex ( GPUTexture tex_,
eGPUSamplerState  state,
int  unit,
const bool   UNUSEDset_number 
)

◆ GPU_texture_clear()

void GPU_texture_clear ( GPUTexture tex,
eGPUDataFormat  data_format,
const void data 
)

Fills the whole texture with the same data for all pixels.

Warning
Only work for 2D texture for now.
Only clears the MIP 0 of the texture.
Parameters
data_formatdata format of the pixel data.
Note
The format is float for UNORM textures.
Parameters
data1 pixel worth of data to fill the texture with.

Definition at line 438 of file gpu_texture.cc.

References BLI_assert, clear(), data, and tex.

Referenced by blender::draw::Texture::clear(), gpu_viewport_textures_create(), and pygpu_texture_clear().

◆ GPU_texture_compare_mode()

void GPU_texture_compare_mode ( GPUTexture tex_,
bool  use_compare 
)

◆ GPU_texture_component_len()

size_t GPU_texture_component_len ( eGPUTextureFormat  tex_format)

Definition at line 717 of file gpu_texture.cc.

References blender::gpu::to_component_len().

Referenced by pygpu_texture__tp_new(), and pygpu_texture_read().

◆ GPU_texture_copy()

void GPU_texture_copy ( GPUTexture dst,
GPUTexture src 
)

Copy a texture content to a similar texture. Only MIP 0 is copied.

Definition at line 503 of file gpu_texture.cc.

References src.

Referenced by OVERLAY_xray_depth_copy(), OVERLAY_xray_depth_infront_copy(), and workbench_antialiasing_draw_pass().

◆ gpu_texture_create()

static GPUTexture* gpu_texture_create ( const char *  name,
const int  w,
const int  h,
const int  d,
const eGPUTextureType  type,
int  mip_len,
eGPUTextureFormat  tex_format,
eGPUDataFormat  data_format,
const void pixels 
)
inlinestatic

◆ GPU_texture_create_1d()

GPUTexture* GPU_texture_create_1d ( const char *  name,
int  w,
int  mip_len,
eGPUTextureFormat  format,
const float data 
)
Note
data is expected to be float. If the format is not compatible with float data or if the data is not in float format, use GPU_texture_update to upload the data with the right data format. mip_len is the number of mip level to allocate. It must be >= 1.

Definition at line 278 of file gpu_texture.cc.

References data, GPU_DATA_FLOAT, blender::gpu::GPU_TEXTURE_1D, gpu_texture_create(), and w().

Referenced by addGPULut1D2D(), createGPUCurveMapping(), DRW_create_weight_colorramp_texture(), DRW_globals_update(), DRW_texture_create_1d(), GPU_material_sss_profile_get(), pygpu_texture__tp_new(), blender::gpu::tests::test_gpu_shader_compute_1d(), and workbench_volume_engine_init().

◆ GPU_texture_create_1d_array()

GPUTexture* GPU_texture_create_1d_array ( const char *  name,
int  w,
int  h,
int  mip_len,
eGPUTextureFormat  format,
const float data 
)

◆ GPU_texture_create_2d()

GPUTexture* GPU_texture_create_2d ( const char *  name,
int  w,
int  h,
int  mip_len,
eGPUTextureFormat  format,
const float data 
)

◆ GPU_texture_create_2d_array()

GPUTexture* GPU_texture_create_2d_array ( const char *  name,
int  w,
int  h,
int  d,
int  mip_len,
eGPUTextureFormat  format,
const float data 
)

◆ GPU_texture_create_3d()

GPUTexture* GPU_texture_create_3d ( const char *  name,
int  w,
int  h,
int  d,
int  mip_len,
eGPUTextureFormat  texture_format,
eGPUDataFormat  data_format,
const void data 
)

◆ GPU_texture_create_compressed_2d()

GPUTexture* GPU_texture_create_compressed_2d ( const char *  name,
int  w,
int  h,
int  miplen,
eGPUTextureFormat  format,
const void data 
)

data should hold all the data for all mipmaps. DDS texture loading. Return NULL if support is not available.

Definition at line 336 of file gpu_texture.cc.

References data, blender::gpu::GPUBackend::get(), offset, size(), tex, blender::gpu::GPUBackend::texture_alloc(), blender::gpu::to_block_size(), blender::gpu::to_data_format(), and w().

Referenced by IMB_create_gpu_texture().

◆ GPU_texture_create_cube()

GPUTexture* GPU_texture_create_cube ( const char *  name,
int  w,
int  mip_len,
eGPUTextureFormat  format,
const float data 
)

◆ GPU_texture_create_cube_array()

GPUTexture* GPU_texture_create_cube_array ( const char *  name,
int  w,
int  d,
int  mip_len,
eGPUTextureFormat  format,
const float data 
)

◆ GPU_texture_create_error()

GPUTexture* GPU_texture_create_error ( int  dimension,
bool  array 
)

◆ GPU_texture_create_from_vertbuf()

GPUTexture* GPU_texture_create_from_vertbuf ( const char *  name,
GPUVertBuf vert 
)

◆ GPU_texture_create_view()

GPUTexture* GPU_texture_create_view ( const char *  name,
const GPUTexture src,
eGPUTextureFormat  format,
int  mip_start,
int  mip_len,
int  layer_start,
int  layer_len,
bool  cube_as_array 
)

Create an alias of the source texture data. If src is freed, the texture view will continue to be valid. If mip_start or mip_len is bigger than available mips they will be clamped. If cube_as_array is true, then the texture cube (array) becomes a 2D array texture. TODO(@fclem): Target conversion is not implemented yet.

Definition at line 388 of file gpu_texture.cc.

References BLI_assert, blender::gpu::GPUBackend::get(), src, blender::gpu::GPUBackend::texture_alloc(), view, and blender::gpu::wrap().

Referenced by blender::draw::Texture::ensure_layer_views(), blender::draw::Texture::ensure_mip_views(), and blender::draw::Texture::stencil_view().

◆ GPU_texture_cube()

bool GPU_texture_cube ( const GPUTexture tex)

◆ GPU_texture_dataformat_size()

size_t GPU_texture_dataformat_size ( eGPUDataFormat  data_format)

◆ GPU_texture_depth()

bool GPU_texture_depth ( const GPUTexture tex)

◆ GPU_texture_dimensions()

int GPU_texture_dimensions ( const GPUTexture tex)

Return the number of dimensions of the texture ignoring dimension of layers (1, 2 or 3). Cube textures are considered 2D.

Definition at line 583 of file gpu_texture.cc.

References blender::gpu::GPU_TEXTURE_1D, blender::gpu::GPU_TEXTURE_2D, blender::gpu::GPU_TEXTURE_3D, blender::gpu::GPU_TEXTURE_CUBE, and type.

Referenced by createGPUShader().

◆ GPU_texture_filter_mode()

void GPU_texture_filter_mode ( GPUTexture tex_,
bool  use_filter 
)

◆ GPU_texture_format()

eGPUTextureFormat GPU_texture_format ( const GPUTexture tex)

◆ GPU_texture_free()

void GPU_texture_free ( GPUTexture tex_)

◆ GPU_texture_generate_mipmap()

void GPU_texture_generate_mipmap ( GPUTexture tex)

◆ GPU_texture_get_mipmap_size()

void GPU_texture_get_mipmap_size ( GPUTexture tex,
int  lvl,
int *  r_size 
)

◆ GPU_texture_height()

int GPU_texture_height ( const GPUTexture tex)

◆ GPU_texture_image_bind()

void GPU_texture_image_bind ( GPUTexture tex,
int  unit 
)

◆ GPU_texture_image_unbind()

void GPU_texture_image_unbind ( GPUTexture tex)

◆ GPU_texture_image_unbind_all()

void GPU_texture_image_unbind_all ( void  )

◆ GPU_texture_integer()

bool GPU_texture_integer ( const GPUTexture tex)

◆ GPU_texture_layer_count()

int GPU_texture_layer_count ( const GPUTexture tex)

Definition at line 612 of file gpu_texture.cc.

References tex.

Referenced by blender::draw::Texture::ensure_layer_views().

◆ GPU_texture_memory_usage_get()

uint GPU_texture_memory_usage_get ( void  )

Definition at line 227 of file gpu_texture.cc.

Referenced by DRW_stats_draw().

◆ GPU_texture_mip_count()

int GPU_texture_mip_count ( const GPUTexture tex)

Definition at line 617 of file gpu_texture.cc.

References tex.

Referenced by blender::draw::Texture::ensure_mip_views().

◆ GPU_texture_mipmap_mode()

void GPU_texture_mipmap_mode ( GPUTexture tex_,
bool  use_mipmap,
bool  use_filter 
)

◆ GPU_texture_opengl_bindcode()

int GPU_texture_opengl_bindcode ( const GPUTexture tex)

Definition at line 683 of file gpu_texture.cc.

References tex.

Referenced by pygpu_offscreen_color_texture_get().

◆ GPU_texture_orig_height()

int GPU_texture_orig_height ( const GPUTexture tex)

Definition at line 627 of file gpu_texture.cc.

References tex.

Referenced by OVERLAY_image_empty_cache_populate().

◆ GPU_texture_orig_size_set()

void GPU_texture_orig_size_set ( GPUTexture tex_,
int  w,
int  h 
)

Definition at line 632 of file gpu_texture.cc.

References tex, and w().

Referenced by image_get_gpu_texture().

◆ GPU_texture_orig_width()

int GPU_texture_orig_width ( const GPUTexture tex)

Definition at line 622 of file gpu_texture.cc.

References tex.

Referenced by OVERLAY_image_empty_cache_populate().

◆ GPU_texture_py_reference_get()

void** GPU_texture_py_reference_get ( GPUTexture tex)

Definition at line 670 of file gpu_texture.cc.

References tex, and blender::gpu::unwrap().

Referenced by BPyGPUTexture_CreatePyObject().

◆ GPU_texture_py_reference_set()

void GPU_texture_py_reference_set ( GPUTexture tex,
void **  py_ref 
)

Definition at line 675 of file gpu_texture.cc.

References BLI_assert, tex, and blender::gpu::unwrap().

Referenced by BPyGPUTexture__tp_dealloc(), and BPyGPUTexture_CreatePyObject().

◆ GPU_texture_read()

void* GPU_texture_read ( GPUTexture tex_,
eGPUDataFormat  data_format,
int  miplvl 
)

◆ GPU_texture_ref()

void GPU_texture_ref ( GPUTexture tex)

Definition at line 578 of file gpu_texture.cc.

References tex.

Referenced by BPyGPUTexture_CreatePyObject(), and drw_shgroup_material_texture().

◆ GPU_texture_stencil()

bool GPU_texture_stencil ( const GPUTexture tex)

◆ GPU_texture_stencil_texture_mode_set()

void GPU_texture_stencil_texture_mode_set ( GPUTexture tex,
bool  use_stencil 
)

Set depth stencil texture sampling behavior. Can work on texture views. If stencil sampling is enabled, an unsigned integer sampler is required.

Definition at line 558 of file gpu_texture.cc.

References BLI_assert, GPU_texture_stencil(), and tex.

Referenced by blender::draw::Texture::stencil_view().

◆ GPU_texture_swizzle_set()

void GPU_texture_swizzle_set ( GPUTexture tex,
const char  swizzle[4] 
)

Definition at line 553 of file gpu_texture.cc.

References tex.

Referenced by load_tex(), load_tex_cursor(), radial_control_set_tex(), and volume_grid_cache_get().

◆ GPU_texture_unbind()

void GPU_texture_unbind ( GPUTexture tex_)

◆ GPU_texture_unbind_all()

void GPU_texture_unbind_all ( void  )

◆ GPU_texture_update()

void GPU_texture_update ( GPUTexture tex,
eGPUDataFormat  data_format,
const void data 
)

◆ GPU_texture_update_mipmap()

void GPU_texture_update_mipmap ( GPUTexture tex_,
int  miplvl,
eGPUDataFormat  data_format,
const void pixels 
)

◆ GPU_texture_update_sub()

void GPU_texture_update_sub ( GPUTexture tex,
eGPUDataFormat  data_format,
const void pixels,
int  offset_x,
int  offset_y,
int  offset_z,
int  width,
int  height,
int  depth 
)

◆ GPU_texture_width()

int GPU_texture_width ( const GPUTexture tex)

◆ GPU_texture_wrap_mode()

void GPU_texture_wrap_mode ( GPUTexture tex_,
bool  use_repeat,
bool  use_clamp 
)

◆ GPU_unpack_row_length_set()

void GPU_unpack_row_length_set ( uint  len)

Makes data interpretation aware of the source layout. Skipping pixels correctly when changing rows when doing partial update.

Definition at line 449 of file gpu_texture.cc.

References blender::gpu::Context::get(), len, blender::gpu::Context::state_manager, and blender::gpu::StateManager::texture_unpack_row_length_set().

Referenced by gpu_texture_update_unscaled(), and immDrawPixelsTexTiled_scaling_clipping().