diff options
Diffstat (limited to 'source/blender/draw')
-rw-r--r-- | source/blender/draw/engines/workbench/workbench_shader.cc | 2 | ||||
-rw-r--r-- | source/blender/draw/intern/DRW_gpu_wrapper.hh | 56 | ||||
-rw-r--r-- | source/blender/draw/intern/DRW_render.h | 8 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager_data.c | 4 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager_exec.c | 4 | ||||
-rw-r--r-- | source/blender/draw/intern/draw_manager_shader.c | 4 |
6 files changed, 40 insertions, 38 deletions
diff --git a/source/blender/draw/engines/workbench/workbench_shader.cc b/source/blender/draw/engines/workbench/workbench_shader.cc index 011a3fd3b13..bbc0bc02b03 100644 --- a/source/blender/draw/engines/workbench/workbench_shader.cc +++ b/source/blender/draw/engines/workbench/workbench_shader.cc @@ -64,7 +64,7 @@ static struct { struct GPUShader *volume_sh[2][2][3][2]; -} e_data = {{{{NULL}}}}; +} e_data = {{{{nullptr}}}}; /* -------------------------------------------------------------------- */ /** \name Conversions diff --git a/source/blender/draw/intern/DRW_gpu_wrapper.hh b/source/blender/draw/intern/DRW_gpu_wrapper.hh index 7a9bdb377fe..af262272577 100644 --- a/source/blender/draw/intern/DRW_gpu_wrapper.hh +++ b/source/blender/draw/intern/DRW_gpu_wrapper.hh @@ -72,10 +72,7 @@ #include "draw_texture_pool.h" -#include "BLI_float4.hh" -#include "BLI_int2.hh" -#include "BLI_int3.hh" -#include "BLI_int4.hh" +#include "BLI_math_vec_types.hh" #include "BLI_span.hh" #include "BLI_utildefines.h" #include "BLI_utility_mixins.hh" @@ -105,7 +102,8 @@ class DataBuffer { T *data_ = nullptr; int64_t len_ = len; - BLI_STATIC_ASSERT((sizeof(T) % 16) == 0, "Type need to be aligned to size of float4."); + BLI_STATIC_ASSERT(((sizeof(T) * len) % 16) == 0, + "Buffer size need to be aligned to size of float4."); public: /** @@ -295,7 +293,7 @@ class UniformArrayBuffer : public detail::UniformCommon<T, len, false> { UniformArrayBuffer() { /* TODO(fclem) We should map memory instead. */ - this->data_ = MEM_mallocN_aligned(this->name_); + this->data_ = (T *)MEM_mallocN_aligned(len * sizeof(T), 16, this->name_); } }; @@ -484,7 +482,7 @@ class Texture : NonCopyable { * Ensure the texture has the correct properties. Recreating it if needed. * Return true if a texture has been created. */ - bool ensure_2d(eGPUTextureFormat format, const int2 &extent, float *data = nullptr, int mips = 1) + bool ensure_2d(eGPUTextureFormat format, int2 extent, float *data = nullptr, int mips = 1) { return ensure_impl(UNPACK2(extent), 0, mips, format, data, false, false); } @@ -493,11 +491,8 @@ class Texture : NonCopyable { * Ensure the texture has the correct properties. Recreating it if needed. * Return true if a texture has been created. */ - bool ensure_2d_array(eGPUTextureFormat format, - const int2 &extent, - int layers, - float *data = nullptr, - int mips = 1) + bool ensure_2d_array( + eGPUTextureFormat format, int2 extent, int layers, float *data = nullptr, int mips = 1) { return ensure_impl(UNPACK2(extent), layers, mips, format, data, true, false); } @@ -506,7 +501,7 @@ class Texture : NonCopyable { * Ensure the texture has the correct properties. Recreating it if needed. * Return true if a texture has been created. */ - bool ensure_3d(eGPUTextureFormat format, const int3 &extent, float *data = nullptr, int mips = 1) + bool ensure_3d(eGPUTextureFormat format, int3 extent, float *data = nullptr, int mips = 1) { return ensure_impl(UNPACK3(extent), mips, format, data, false, false); } @@ -599,14 +594,6 @@ class Texture : NonCopyable { /** * Clear the entirety of the texture using one pixel worth of data. */ - void clear(uchar4 values) - { - GPU_texture_clear(tx_, GPU_DATA_UBYTE, &values[0]); - } - - /** - * Clear the entirety of the texture using one pixel worth of data. - */ void clear(int4 values) { GPU_texture_clear(tx_, GPU_DATA_INT, &values[0]); @@ -634,6 +621,15 @@ class Texture : NonCopyable { GPU_TEXTURE_FREE_SAFE(tx_); } + /** + * Swap the content of the two textures. + */ + static void swap(Texture &a, Texture &b) + { + SWAP(GPUTexture *, a.tx_, b.tx_); + SWAP(const char *, a.name_, b.name_); + } + private: bool ensure_impl(int w, int h = 0, @@ -713,7 +709,7 @@ class TextureFromPool : public Texture, NonMovable { TextureFromPool(const char *name = "gpu::Texture") : Texture(name){}; /* Always use `release()` after rendering. */ - void acquire(int w, int h, eGPUTextureFormat format, void *owner_) + void acquire(int2 extent, eGPUTextureFormat format, void *owner_) { if (this->tx_ == nullptr) { if (tx_tmp_saved_ != nullptr) { @@ -721,7 +717,7 @@ class TextureFromPool : public Texture, NonMovable { return; } DrawEngineType *owner = (DrawEngineType *)owner_; - this->tx_ = DRW_texture_pool_query_2d(w, h, format, owner); + this->tx_ = DRW_texture_pool_query_2d(UNPACK2(extent), format, owner); } } @@ -750,11 +746,6 @@ class TextureFromPool : public Texture, NonMovable { bool ensure_cube_array(int, int, int, eGPUTextureFormat, float *) = delete; void filter_mode(bool) = delete; void free() = delete; - /** - * Forbid the use of DRW_shgroup_uniform_texture. - * Use DRW_shgroup_uniform_texture_ref instead. - */ - operator GPUTexture *() const = delete; }; /** \} */ @@ -805,6 +796,15 @@ class Framebuffer : NonCopyable { { return fb_; } + + /** + * Swap the content of the two framebuffer. + */ + static void swap(Framebuffer &a, Framebuffer &b) + { + SWAP(GPUFrameBuffer *, a.fb_, b.fb_); + SWAP(const char *, a.name_, b.name_); + } }; /** \} */ diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h index b16caf49209..8c56d21746d 100644 --- a/source/blender/draw/intern/DRW_render.h +++ b/source/blender/draw/intern/DRW_render.h @@ -293,7 +293,9 @@ DRWShaderLibrary *DRW_shader_library_create(void); /** * \warning Each library must be added after all its dependencies. */ -void DRW_shader_library_add_file(DRWShaderLibrary *lib, char *lib_code, const char *lib_name); +void DRW_shader_library_add_file(DRWShaderLibrary *lib, + const char *lib_code, + const char *lib_name); #define DRW_SHADER_LIB_ADD(lib, lib_name) \ DRW_shader_library_add_file(lib, datatoc_##lib_name##_glsl, STRINGIFY(lib_name) ".glsl") @@ -696,7 +698,7 @@ const DRWView *DRW_view_default_get(void); /** * MUST only be called once per render and only in render mode. Sets default view. */ -void DRW_view_default_set(DRWView *view); +void DRW_view_default_set(const DRWView *view); /** * \warning Only use in render AND only if you are going to set view_default again. */ @@ -704,7 +706,7 @@ void DRW_view_reset(void); /** * Set active view for rendering. */ -void DRW_view_set_active(DRWView *view); +void DRW_view_set_active(const DRWView *view); const DRWView *DRW_view_get_active(void); /** diff --git a/source/blender/draw/intern/draw_manager_data.c b/source/blender/draw/intern/draw_manager_data.c index ab570667a77..a4d5d6f3c31 100644 --- a/source/blender/draw/intern/draw_manager_data.c +++ b/source/blender/draw/intern/draw_manager_data.c @@ -1904,10 +1904,10 @@ void DRW_view_reset(void) DST.view_previous = NULL; } -void DRW_view_default_set(DRWView *view) +void DRW_view_default_set(const DRWView *view) { BLI_assert(DST.view_default == NULL); - DST.view_default = view; + DST.view_default = (DRWView *)view; } void DRW_view_clip_planes_set(DRWView *view, float (*planes)[4], int plane_len) diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c index 8dd24c01337..2095a8483d6 100644 --- a/source/blender/draw/intern/draw_manager_exec.c +++ b/source/blender/draw/intern/draw_manager_exec.c @@ -354,9 +354,9 @@ static bool draw_call_is_culled(const DRWResourceHandle *handle, DRWView *view) return (culling->mask & view->culling_mask) != 0; } -void DRW_view_set_active(DRWView *view) +void DRW_view_set_active(const DRWView *view) { - DST.view_active = (view) ? view : DST.view_default; + DST.view_active = (view != NULL) ? ((DRWView *)view) : DST.view_default; } const DRWView *DRW_view_get_active(void) diff --git a/source/blender/draw/intern/draw_manager_shader.c b/source/blender/draw/intern/draw_manager_shader.c index 84440a8effe..f8e64041a92 100644 --- a/source/blender/draw/intern/draw_manager_shader.c +++ b/source/blender/draw/intern/draw_manager_shader.c @@ -567,7 +567,7 @@ void DRW_shader_free(GPUShader *shader) #define MAX_LIB_DEPS 8 struct DRWShaderLibrary { - char *libs[MAX_LIB]; + const char *libs[MAX_LIB]; char libs_name[MAX_LIB][MAX_LIB_NAME]; uint32_t libs_deps[MAX_LIB]; }; @@ -629,7 +629,7 @@ static uint32_t drw_shader_dependencies_get(const DRWShaderLibrary *lib, const c return deps; } -void DRW_shader_library_add_file(DRWShaderLibrary *lib, char *lib_code, const char *lib_name) +void DRW_shader_library_add_file(DRWShaderLibrary *lib, const char *lib_code, const char *lib_name) { int index = -1; for (int i = 0; i < MAX_LIB; i++) { |