gs-vertexbuffer: Slight Refactor to unify code style

This commit is contained in:
Michael Fabian 'Xaymar' Dirks 2018-01-19 02:59:55 +01:00
parent 3a05c08daf
commit fe3186220c
4 changed files with 38 additions and 38 deletions

View File

@ -256,7 +256,7 @@ Filter::Shape::Instance::Instance(obs_data_t *data, obs_source_t *context)
: context(context) { : context(context) {
obs_enter_graphics(); obs_enter_graphics();
m_vertexHelper = new GS::VertexBuffer(maximumPoints); m_vertexHelper = new GS::VertexBuffer(maximumPoints);
m_vertexHelper->set_uv_layers(1); m_vertexHelper->SetUVLayers(1);
m_texRender = gs_texrender_create(GS_RGBA, GS_Z32F); m_texRender = gs_texrender_create(GS_RGBA, GS_Z32F);
obs_leave_graphics(); obs_leave_graphics();
@ -271,9 +271,9 @@ Filter::Shape::Instance::~Instance() {
void Filter::Shape::Instance::update(obs_data_t *data) { void Filter::Shape::Instance::update(obs_data_t *data) {
uint32_t points = (uint32_t)obs_data_get_int(data, P_SHAPE_POINTS); uint32_t points = (uint32_t)obs_data_get_int(data, P_SHAPE_POINTS);
m_vertexHelper->resize(points); m_vertexHelper->Resize(points);
for (uint32_t point = 0; point < points; point++) { for (uint32_t point = 0; point < points; point++) {
GS::Vertex v = m_vertexHelper->at(point); GS::Vertex v = m_vertexHelper->At(point);
{ {
auto strings = cache.find(std::make_pair(point, auto strings = cache.find(std::make_pair(point,
P_SHAPE_POINT_X)); P_SHAPE_POINT_X));
@ -311,7 +311,7 @@ void Filter::Shape::Instance::update(obs_data_t *data) {
} }
drawmode = (gs_draw_mode)obs_data_get_int(data, P_SHAPE_MODE); drawmode = (gs_draw_mode)obs_data_get_int(data, P_SHAPE_MODE);
obs_enter_graphics(); obs_enter_graphics();
m_vertexBuffer = m_vertexHelper->get(); m_vertexBuffer = m_vertexHelper->Update();
obs_leave_graphics(); obs_leave_graphics();
} }
@ -386,7 +386,7 @@ void Filter::Shape::Instance::video_render(gs_effect_t *effect) {
tex); tex);
gs_load_vertexbuffer(m_vertexBuffer); gs_load_vertexbuffer(m_vertexBuffer);
gs_load_indexbuffer(nullptr); gs_load_indexbuffer(nullptr);
gs_draw(drawmode, 0, (uint32_t)m_vertexHelper->size()); gs_draw(drawmode, 0, (uint32_t)m_vertexHelper->Size());
} }
gs_matrix_pop(); gs_matrix_pop();

View File

@ -305,8 +305,8 @@ Filter::Transform::Instance::Instance(obs_data_t *data, obs_source_t *context) :
m_texRender = gs_texrender_create(GS_RGBA, GS_ZS_NONE); m_texRender = gs_texrender_create(GS_RGBA, GS_ZS_NONE);
m_shapeRender = gs_texrender_create(GS_RGBA, GS_ZS_NONE); m_shapeRender = gs_texrender_create(GS_RGBA, GS_ZS_NONE);
m_vertexHelper = new GS::VertexBuffer(4); m_vertexHelper = new GS::VertexBuffer(4);
m_vertexHelper->set_uv_layers(1); m_vertexHelper->SetUVLayers(1);
m_vertexHelper->resize(4); m_vertexHelper->Resize(4);
obs_leave_graphics(); obs_leave_graphics();
update(data); update(data);
@ -465,7 +465,7 @@ void Filter::Transform::Instance::video_render(gs_effect_t *paramEffect) {
/// Generate mesh /// Generate mesh
{ {
GS::Vertex vtx = m_vertexHelper->at(0); GS::Vertex vtx = m_vertexHelper->At(0);
*vtx.color = 0xFFFFFFFF; *vtx.color = 0xFFFFFFFF;
vec4_set(vtx.uv[0], 0, 0, 0, 0); vec4_set(vtx.uv[0], 0, 0, 0, 0);
vec3_set(vtx.position, vec3_set(vtx.position,
@ -474,7 +474,7 @@ void Filter::Transform::Instance::video_render(gs_effect_t *paramEffect) {
vec3_transform(vtx.position, vtx.position, &ident); vec3_transform(vtx.position, vtx.position, &ident);
} }
{ {
GS::Vertex vtx = m_vertexHelper->at(1); GS::Vertex vtx = m_vertexHelper->At(1);
*vtx.color = 0xFFFFFFFF; *vtx.color = 0xFFFFFFFF;
vec4_set(vtx.uv[0], 1, 0, 0, 0); vec4_set(vtx.uv[0], 1, 0, 0, 0);
vec3_set(vtx.position, vec3_set(vtx.position,
@ -483,7 +483,7 @@ void Filter::Transform::Instance::video_render(gs_effect_t *paramEffect) {
vec3_transform(vtx.position, vtx.position, &ident); vec3_transform(vtx.position, vtx.position, &ident);
} }
{ {
GS::Vertex vtx = m_vertexHelper->at(2); GS::Vertex vtx = m_vertexHelper->At(2);
*vtx.color = 0xFFFFFFFF; *vtx.color = 0xFFFFFFFF;
vec4_set(vtx.uv[0], 0, 1, 0, 0); vec4_set(vtx.uv[0], 0, 1, 0, 0);
vec3_set(vtx.position, vec3_set(vtx.position,
@ -492,7 +492,7 @@ void Filter::Transform::Instance::video_render(gs_effect_t *paramEffect) {
vec3_transform(vtx.position, vtx.position, &ident); vec3_transform(vtx.position, vtx.position, &ident);
} }
{ {
GS::Vertex vtx = m_vertexHelper->at(3); GS::Vertex vtx = m_vertexHelper->At(3);
*vtx.color = 0xFFFFFFFF; *vtx.color = 0xFFFFFFFF;
vec4_set(vtx.uv[0], 1, 1, 0, 0); vec4_set(vtx.uv[0], 1, 1, 0, 0);
vec3_set(vtx.position, vec3_set(vtx.position,
@ -501,7 +501,7 @@ void Filter::Transform::Instance::video_render(gs_effect_t *paramEffect) {
vec3_transform(vtx.position, vtx.position, &ident); vec3_transform(vtx.position, vtx.position, &ident);
} }
m_vertexBuffer = m_vertexHelper->get(); m_vertexBuffer = m_vertexHelper->Update();
if (!m_vertexBuffer) { if (!m_vertexBuffer) {
obs_source_skip_video_filter(m_sourceContext); obs_source_skip_video_filter(m_sourceContext);
return; return;

View File

@ -112,7 +112,7 @@ GS::VertexBuffer::VertexBuffer(uint32_t maximumVertices) {
GS::VertexBuffer::VertexBuffer(gs_vertbuffer_t* vb) { GS::VertexBuffer::VertexBuffer(gs_vertbuffer_t* vb) {
gs_vb_data* vbd = gs_vertexbuffer_get_data(vb); gs_vb_data* vbd = gs_vertexbuffer_get_data(vb);
VertexBuffer((uint32_t)vbd->num); VertexBuffer((uint32_t)vbd->num);
this->set_uv_layers((uint32_t)vbd->num_tex); this->SetUVLayers((uint32_t)vbd->num_tex);
if (vbd->points != nullptr) if (vbd->points != nullptr)
std::memcpy(m_positions, vbd->points, vbd->num * sizeof(vec3)); std::memcpy(m_positions, vbd->points, vbd->num * sizeof(vec3));
@ -226,51 +226,47 @@ void GS::VertexBuffer::operator=(VertexBuffer const&& other) {
m_layerdata = other.m_layerdata; m_layerdata = other.m_layerdata;
} }
void GS::VertexBuffer::resize(size_t new_size) { void GS::VertexBuffer::Resize(uint32_t new_size) {
if (new_size > m_capacity) { if (new_size > m_capacity) {
throw std::out_of_range("new_size out of range"); throw std::out_of_range("new_size out of range");
} }
m_size = new_size; m_size = new_size;
} }
size_t GS::VertexBuffer::size() { uint32_t GS::VertexBuffer::Size() {
return m_size; return m_size;
} }
bool GS::VertexBuffer::empty() { bool GS::VertexBuffer::Empty() {
return m_size == 0; return m_size == 0;
} }
const GS::Vertex GS::VertexBuffer::at(size_t idx) { const GS::Vertex GS::VertexBuffer::At(uint32_t idx) {
if ((idx < 0) || (idx >= m_size)) { if ((idx < 0) || (idx >= m_size)) {
throw std::out_of_range("idx out of range"); throw std::out_of_range("idx out of range");
} }
GS::Vertex vtx; GS::Vertex vtx(&m_positions[idx], &m_normals[idx], &m_tangents[idx], &m_colors[idx], nullptr);
vtx.position = &m_positions[idx];
vtx.normal = &m_normals[idx];
vtx.tangent = &m_tangents[idx];
vtx.color = &m_colors[idx];
for (size_t n = 0; n < MAXIMUM_UVW_LAYERS; n++) { for (size_t n = 0; n < MAXIMUM_UVW_LAYERS; n++) {
vtx.uv[n] = &m_uvs[n][idx]; vtx.uv[n] = &m_uvs[n][idx];
} }
return vtx; return vtx;
} }
const GS::Vertex GS::VertexBuffer::operator[](const size_t pos) { const GS::Vertex GS::VertexBuffer::operator[](uint32_t const pos) {
return at(pos); return At(pos);
} }
void GS::VertexBuffer::set_uv_layers(uint32_t layers) { void GS::VertexBuffer::SetUVLayers(uint32_t layers) {
m_layers = layers; m_layers = layers;
} }
uint32_t GS::VertexBuffer::uv_layers() { uint32_t GS::VertexBuffer::GetUVLayers() {
return m_layers; return m_layers;
} }
gs_vertbuffer_t* GS::VertexBuffer::get(bool refreshGPU) { gs_vertbuffer_t* GS::VertexBuffer::Update(bool refreshGPU) {
if (!refreshGPU) if (!refreshGPU)
return m_vertexbuffer; return m_vertexbuffer;
@ -308,6 +304,6 @@ gs_vertbuffer_t* GS::VertexBuffer::get(bool refreshGPU) {
return m_vertexbuffer; return m_vertexbuffer;
} }
gs_vertbuffer_t* GS::VertexBuffer::get() { gs_vertbuffer_t* GS::VertexBuffer::Update() {
return get(true); return Update(true);
} }

View File

@ -98,23 +98,27 @@ namespace GS {
void operator=(VertexBuffer const&& other); void operator=(VertexBuffer const&& other);
#pragma endregion Copy/Move Constructors #pragma endregion Copy/Move Constructors
void resize(size_t new_size);
size_t size();
bool empty(); void Resize(uint32_t new_size);
const GS::Vertex at(size_t idx); uint32_t Size();
const GS::Vertex operator[](const size_t pos); bool Empty();
void set_uv_layers(uint32_t layers); const GS::Vertex At(uint32_t idx);
uint32_t uv_layers(); const GS::Vertex operator[](uint32_t const pos);
gs_vertbuffer_t* get(); void SetUVLayers(uint32_t layers);
gs_vertbuffer_t* get(bool refreshGPU); uint32_t GetUVLayers();
#pragma region Update / Grab GS object
gs_vertbuffer_t* Update();
gs_vertbuffer_t* Update(bool refreshGPU);
#pragma endregion Update / Grab GS object
private: private:
uint32_t m_size; uint32_t m_size;