Unravel Engine C++ Reference
Loading...
Searching...
No Matches
uniform.cpp
Go to the documentation of this file.
1#include "uniform.h"
2
3namespace gfx
4{
5namespace
6{
7 struct ref_counted_handle
8 {
9 gfx::uniform_handle handle = {bgfx::kInvalidHandle};
10 uint64_t ref_count{};
11 };
12 struct uniform_cache
13 {
14 using cache_t = std::unordered_map<std::string, std::unordered_map<gfx::uniform_type, ref_counted_handle>>;
15 cache_t cache;
16 // std::unordered_map<uint16_t, ref_counted_handle*> lut;
17 };
18
19 auto get_uniform_cache() -> uniform_cache&
20 {
21 static uniform_cache cache;
22 return cache;
23 }
24
25 auto aquire(const std::string& _name, gfx::uniform_type _type, std::uint16_t _num) -> gfx::uniform_handle
26 {
27 // auto& cache = get_uniform_cache();
28 // auto& by_name = cache.cache[_name];
29 // BX_ASSERT(by_name.size() <= 1, "Uniform %s has different types in cache", _name.c_str());
30
31 // auto& by_type = by_name[_type];
32 // auto& counted_uniform = by_type;
33
34 // if(counted_uniform.ref_count == 0)
35 // {
36 // counted_uniform.handle = gfx::create_uniform(_name.c_str(), _type, _num);
37 // // cache.lut[counted_uniform.handle.idx] = &counted_uniform;
38 // }
39
40 // counted_uniform.ref_count++;
41
42 // return counted_uniform.handle;
43 return gfx::create_uniform(_name.c_str(), _type, _num);
44 }
45
46 void release(gfx::uniform_handle _handle)
47 {
48 // auto& cache = get_uniform_cache();
49 // auto& counted_uniform = cache.lut[_handle.idx];
50 // counted_uniform->ref_count--;
51 // if(counted_uniform->ref_count == 0)
52 // {
53 // gfx::destroy(counted_uniform->handle);
54 // cache.lut.erase(counted_uniform->handle.idx);
55 // }
56 }
57}
58
60{
61 auto& cache = get_uniform_cache();
62 // BX_ASSERT(cache.lut.empty(), "Uniform cache is not empty");
63 // cache.lut.clear();
64 cache.cache.clear();
65}
66
67uniform::uniform(const std::string& _name, uniform_type _type, std::uint16_t _num /*= 1*/)
68{
69 // handle_ = gfx::create_uniform(_name.c_str(), _type, _num);
70 handle_ = aquire(_name, _type, _num);
72}
73
74uniform::uniform(handle_type_t _handle)
75{
77 // handle_ = gfx::create_uniform(info.name, info.type, info.num);
78 handle_ = aquire(info.name, info.type, info.num);
79}
80
82{
83 if(is_valid())
84 {
85 release(handle_);
86 }
88}
89
90
91void uniform::set_texture(uint8_t _stage,
92 const gfx::frame_buffer* frameBuffer,
93 uint8_t _attachment /*= 0 */,
94 uint32_t _flags /*= std::numeric_limits<uint32_t>::max()*/)
95{
96 if(frameBuffer == nullptr)
97 {
98 return;
99 }
100
101 gfx::set_texture(_stage, native_handle(), frameBuffer->get_texture(_attachment)->native_handle(), _flags);
102}
103
104void uniform::set_texture(uint8_t _stage,
105 const gfx::texture* _texture,
106 uint32_t _flags /*= std::numeric_limits<uint32_t>::max()*/)
107{
108 if(_texture == nullptr)
109 {
110 return;
111 }
112
113 gfx::set_texture(_stage, native_handle(), _texture->native_handle(), _flags);
114}
115
116void uniform::set_uniform(const void* _value, uint16_t _num)
117{
118 gfx::set_uniform(native_handle(), _value, _num);
119}
120} // namespace gfx
static auto invalid_handle() -> uniform_handle
Definition handle_impl.h:45
auto native_handle() const -> uniform_handle
Definition handle_impl.h:40
void get_uniform_info(uniform_handle _handle, uniform_info &_info)
Definition graphics.cpp:457
uniform_handle create_uniform(const char *_name, uniform_type _type, uint16_t _num)
Definition graphics.cpp:652
bgfx::UniformHandle uniform_handle
Definition graphics.h:50
bgfx::UniformType::Enum uniform_type
Definition graphics.h:25
void deinit_uniform_cache()
Definition uniform.cpp:59
void set_uniform(uniform_handle _handle, const void *_value, uint16_t _num)
Definition graphics.cpp:803
void set_texture(uint8_t _stage, uniform_handle _sampler, texture_handle _handle, uint32_t _flags)
Definition graphics.cpp:889
auto get_texture(std::uint32_t index=0) const -> const gfx::texture::ptr &
uniform()=default
void set_texture(uint8_t _stage, const gfx::frame_buffer *_handle, uint8_t _attachment=0, uint32_t _flags=std::numeric_limits< uint32_t >::max())
Definition uniform.cpp:91
uniform_info info
Uniform info.
Definition uniform.h:78
void set_uniform(const void *_value, uint16_t _num=1)
Definition uniform.cpp:116
gfx::uniform_handle handle
Definition uniform.cpp:9
uint64_t ref_count
Definition uniform.cpp:10
cache_t cache
Definition uniform.cpp:15