Listing the "Blender Foundation" as copyright holder implied the Blender Foundation holds copyright to files which may include work from many developers. While keeping copyright on headers makes sense for isolated libraries, Blender's own code may be refactored or moved between files in a way that makes the per file copyright holders less meaningful. Copyright references to the "Blender Foundation" have been replaced with "Blender Authors", with the exception of `./extern/` since these this contains libraries which are more isolated, any changed to license headers there can be handled on a case-by-case basis. Some directories in `./intern/` have also been excluded: - `./intern/cycles/` it's own `AUTHORS` file is planned. - `./intern/opensubdiv/`. An "AUTHORS" file has been added, using the chromium projects authors file as a template. Design task: #110784 Ref !110783.
74 lines
1.6 KiB
C++
74 lines
1.6 KiB
C++
/* SPDX-FileCopyrightText: 2020 Blender Authors
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later */
|
|
|
|
/** \file
|
|
* \ingroup gpu
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "BLI_sys_types.h"
|
|
|
|
struct GPUUniformBuf;
|
|
|
|
namespace blender {
|
|
namespace gpu {
|
|
|
|
#ifdef DEBUG
|
|
# define DEBUG_NAME_LEN 64
|
|
#else
|
|
# define DEBUG_NAME_LEN 8
|
|
#endif
|
|
|
|
/**
|
|
* Implementation of Uniform Buffers.
|
|
* Base class which is then specialized for each implementation (GL, VK, ...).
|
|
*/
|
|
class UniformBuf {
|
|
protected:
|
|
/** Data size in bytes. */
|
|
size_t size_in_bytes_;
|
|
/** Continuous memory block to copy to GPU. This data is owned by the UniformBuf. */
|
|
void *data_ = nullptr;
|
|
/** Debugging name */
|
|
char name_[DEBUG_NAME_LEN];
|
|
|
|
public:
|
|
UniformBuf(size_t size, const char *name);
|
|
virtual ~UniformBuf();
|
|
|
|
virtual void update(const void *data) = 0;
|
|
virtual void clear_to_zero() = 0;
|
|
virtual void bind(int slot) = 0;
|
|
virtual void bind_as_ssbo(int slot) = 0;
|
|
virtual void unbind() = 0;
|
|
|
|
/** Used to defer data upload at drawing time.
|
|
* This is useful if the thread has no context bound.
|
|
* This transfers ownership to this UniformBuf. */
|
|
void attach_data(void *data)
|
|
{
|
|
data_ = data;
|
|
}
|
|
};
|
|
|
|
/* Syntactic sugar. */
|
|
static inline GPUUniformBuf *wrap(UniformBuf *vert)
|
|
{
|
|
return reinterpret_cast<GPUUniformBuf *>(vert);
|
|
}
|
|
static inline UniformBuf *unwrap(GPUUniformBuf *vert)
|
|
{
|
|
return reinterpret_cast<UniformBuf *>(vert);
|
|
}
|
|
static inline const UniformBuf *unwrap(const GPUUniformBuf *vert)
|
|
{
|
|
return reinterpret_cast<const UniformBuf *>(vert);
|
|
}
|
|
|
|
#undef DEBUG_NAME_LEN
|
|
|
|
} // namespace gpu
|
|
} // namespace blender
|