gs: Rename to snake_case instead of PascalCase

This should prevent mishaps with upper/lowercase typos and fits in better with the C++ standard code, which is also in snake_case.
This commit is contained in:
Michael Fabian 'Xaymar' Dirks 2018-03-20 12:43:37 +01:00
parent 9f518764b6
commit 2adfa5765c
27 changed files with 428 additions and 428 deletions

View file

@ -50,8 +50,8 @@ enum ColorFormat : uint64_t {
// Global Data // Global Data
const size_t MaxKernelSize = 25; const size_t MaxKernelSize = 25;
std::map<std::string, std::shared_ptr<GS::Effect>> g_effects; std::map<std::string, std::shared_ptr<gs::effect>> g_effects;
std::vector<std::shared_ptr<GS::Texture>> g_gaussianKernels; std::vector<std::shared_ptr<gs::texture>> g_gaussianKernels;
double_t bilateral(double_t x, double_t o) { double_t bilateral(double_t x, double_t o) {
return 0.39894 * exp(-0.5 * (x * x) / (o * o)) / o; return 0.39894 * exp(-0.5 * (x * x) / (o * o)) / o;
@ -85,7 +85,7 @@ static void GenerateGaussianKernelTextures() {
const uint8_t** pdata = const_cast<const uint8_t**>(&data); const uint8_t** pdata = const_cast<const uint8_t**>(&data);
try { try {
std::shared_ptr<GS::Texture> tex = std::make_shared<GS::Texture>((uint32_t)textureBufferSize, 1, std::shared_ptr<gs::texture> tex = std::make_shared<gs::texture>((uint32_t)textureBufferSize, 1,
gs_color_format::GS_R32F, 1, pdata, 0); gs_color_format::GS_R32F, 1, pdata, 0);
g_gaussianKernels[n] = tex; g_gaussianKernels[n] = tex;
} catch (std::runtime_error ex) { } catch (std::runtime_error ex) {
@ -121,7 +121,7 @@ Filter::Blur::Blur() {
}; };
for (auto& kv : effects) { for (auto& kv : effects) {
try { try {
std::shared_ptr<GS::Effect> effect = std::make_shared<GS::Effect>(kv.second); std::shared_ptr<gs::effect> effect = std::make_shared<gs::effect>(kv.second);
g_effects.insert(std::make_pair(kv.first, effect)); g_effects.insert(std::make_pair(kv.first, effect));
} catch (std::runtime_error ex) { } catch (std::runtime_error ex) {
P_LOG_ERROR("<filter-blur> Loading effect '%s' (path: '%s') failed with error(s): %s", P_LOG_ERROR("<filter-blur> Loading effect '%s' (path: '%s') failed with error(s): %s",
@ -623,7 +623,7 @@ bool Filter::Blur::Instance::apply_gaussian_param() {
if (m_type != Type::Gaussian) if (m_type != Type::Gaussian)
return false; return false;
std::shared_ptr<GS::Texture> tex; std::shared_ptr<gs::texture> tex;
if ((m_size - 1) < MaxKernelSize) { if ((m_size - 1) < MaxKernelSize) {
tex = g_gaussianKernels[size_t(m_size - 1)]; tex = g_gaussianKernels[size_t(m_size - 1)];
result = result && gs_set_param_texture(m_effect->GetObject(), "kernel", tex->GetObject()); result = result && gs_set_param_texture(m_effect->GetObject(), "kernel", tex->GetObject());

View file

@ -93,7 +93,7 @@ namespace Filter {
obs_source_t *m_source; obs_source_t *m_source;
gs_texrender_t *m_primaryRT, *m_secondaryRT; gs_texrender_t *m_primaryRT, *m_secondaryRT;
gs_texrender_t *m_rtHorizontal, *m_rtVertical; gs_texrender_t *m_rtHorizontal, *m_rtVertical;
std::shared_ptr<GS::Effect> m_effect; std::shared_ptr<gs::effect> m_effect;
// Blur // Blur
Type m_type; Type m_type;

View file

@ -147,7 +147,7 @@ bool Filter::CustomShader::modified_properties(obs_properties_t *pr, obs_propert
Instance* ptr = static_cast<Instance*>(obs_properties_get_param(pr)); Instance* ptr = static_cast<Instance*>(obs_properties_get_param(pr));
for (Instance::Parameter& prm : ptr->m_effectParameters) { for (Instance::Parameter& prm : ptr->m_effectParameters) {
switch (prm.type) { switch (prm.type) {
case GS::EffectParameter::Type::Texture: case gs::effect_parameter::type::Texture:
bool isSource = obs_data_get_int(data, prm.uiNames[0].c_str()) == 1; bool isSource = obs_data_get_int(data, prm.uiNames[0].c_str()) == 1;
obs_property_set_visible(obs_properties_get(pr, prm.uiNames[1].c_str()), isSource); obs_property_set_visible(obs_properties_get(pr, prm.uiNames[1].c_str()), isSource);
obs_property_set_visible(obs_properties_get(pr, prm.uiNames[2].c_str()), !isSource); obs_property_set_visible(obs_properties_get(pr, prm.uiNames[2].c_str()), !isSource);
@ -205,7 +205,7 @@ Filter::CustomShader::Instance::Instance(obs_data_t *data, obs_source_t *source)
m_effect.lastCheck = 0; m_effect.lastCheck = 0;
m_effect.effect = nullptr; m_effect.effect = nullptr;
m_renderTarget = std::make_unique<GS::RenderTarget>(GS_RGBA, GS_ZS_NONE); m_renderTarget = std::make_unique<gs::rendertarget>(GS_RGBA, GS_ZS_NONE);
m_activeTime = 0.0f; m_activeTime = 0.0f;
m_renderTime = 0.0f; m_renderTime = 0.0f;
@ -220,7 +220,7 @@ void Filter::CustomShader::Instance::update(obs_data_t *data) {
if (shaderType == ShaderType::Text) { if (shaderType == ShaderType::Text) {
const char* shaderText = obs_data_get_string(data, S_CONTENT_TEXT); const char* shaderText = obs_data_get_string(data, S_CONTENT_TEXT);
try { try {
m_effect.effect = std::make_unique<GS::Effect>(shaderText, "Text Shader"); m_effect.effect = std::make_unique<gs::effect>(shaderText, "Text Shader");
} catch (std::runtime_error& ex) { } catch (std::runtime_error& ex) {
const char* filterName = obs_source_get_name(m_source); const char* filterName = obs_source_get_name(m_source);
P_LOG_ERROR("[%s] Shader loading failed with error(s): %s", filterName, ex.what()); P_LOG_ERROR("[%s] Shader loading failed with error(s): %s", filterName, ex.what());
@ -230,81 +230,81 @@ void Filter::CustomShader::Instance::update(obs_data_t *data) {
} }
m_effectParameters.clear(); m_effectParameters.clear();
if (m_effect.effect && m_effect.effect->CountParameters() > 0) { if (m_effect.effect && m_effect.effect->count_parameters() > 0) {
for (auto p : m_effect.effect->GetParameters()) { for (auto p : m_effect.effect->get_parameters()) {
std::string p_name = p.GetName(); std::string p_name = p.get_name();
std::string p_desc = p_name; std::string p_desc = p_name;
if (IsSpecialParameter(p_name, p.GetType())) if (IsSpecialParameter(p_name, p.get_type()))
continue; continue;
Parameter prm; Parameter prm;
prm.name = p_name; prm.name = p_name;
prm.type = p.GetType(); prm.type = p.get_type();
switch (p.GetType()) { switch (p.get_type()) {
case GS::EffectParameter::Type::Boolean: case gs::effect_parameter::type::Boolean:
{ {
prm.uiNames.push_back(p_name); prm.uiNames.push_back(p_name);
prm.uiDescriptions.push_back(p_desc); prm.uiDescriptions.push_back(p_desc);
prm.value.b = obs_data_get_bool(data, p_name.c_str()); prm.value.b = obs_data_get_bool(data, p_name.c_str());
break; break;
} }
case GS::EffectParameter::Type::Float: case gs::effect_parameter::type::Float:
case GS::EffectParameter::Type::Float2: case gs::effect_parameter::type::Float2:
case GS::EffectParameter::Type::Float3: case gs::effect_parameter::type::Float3:
case GS::EffectParameter::Type::Float4: case gs::effect_parameter::type::Float4:
{ {
{ {
prm.uiNames.push_back(p_name + "0"); prm.uiNames.push_back(p_name + "0");
prm.uiDescriptions.push_back(p_desc + "[0]"); prm.uiDescriptions.push_back(p_desc + "[0]");
prm.value.f[0] = (float_t)obs_data_get_double(data, prm.uiNames.back().c_str()); prm.value.f[0] = (float_t)obs_data_get_double(data, prm.uiNames.back().c_str());
} }
if (p.GetType() >= GS::EffectParameter::Type::Float2) { if (p.get_type() >= gs::effect_parameter::type::Float2) {
prm.uiNames.push_back(p_name + "1"); prm.uiNames.push_back(p_name + "1");
prm.uiDescriptions.push_back(p_desc + "[1]"); prm.uiDescriptions.push_back(p_desc + "[1]");
prm.value.f[1] = (float_t)obs_data_get_double(data, prm.uiNames.back().c_str()); prm.value.f[1] = (float_t)obs_data_get_double(data, prm.uiNames.back().c_str());
} }
if (p.GetType() >= GS::EffectParameter::Type::Float3) { if (p.get_type() >= gs::effect_parameter::type::Float3) {
prm.uiNames.push_back(p_name + "2"); prm.uiNames.push_back(p_name + "2");
prm.uiDescriptions.push_back(p_desc + "[2]"); prm.uiDescriptions.push_back(p_desc + "[2]");
prm.value.f[2] = (float_t)obs_data_get_double(data, prm.uiNames.back().c_str()); prm.value.f[2] = (float_t)obs_data_get_double(data, prm.uiNames.back().c_str());
} }
if (p.GetType() >= GS::EffectParameter::Type::Float4) { if (p.get_type() >= gs::effect_parameter::type::Float4) {
prm.uiNames.push_back(p_name + "3"); prm.uiNames.push_back(p_name + "3");
prm.uiDescriptions.push_back(p_desc + "[3]"); prm.uiDescriptions.push_back(p_desc + "[3]");
prm.value.f[3] = (float_t)obs_data_get_double(data, prm.uiNames.back().c_str()); prm.value.f[3] = (float_t)obs_data_get_double(data, prm.uiNames.back().c_str());
} }
break; break;
} }
case GS::EffectParameter::Type::Integer: case gs::effect_parameter::type::Integer:
case GS::EffectParameter::Type::Integer2: case gs::effect_parameter::type::Integer2:
case GS::EffectParameter::Type::Integer3: case gs::effect_parameter::type::Integer3:
case GS::EffectParameter::Type::Integer4: case gs::effect_parameter::type::Integer4:
{ {
{ {
prm.uiNames.push_back(p_name + "0"); prm.uiNames.push_back(p_name + "0");
prm.uiDescriptions.push_back(p_desc + "[0]"); prm.uiDescriptions.push_back(p_desc + "[0]");
prm.value.i[0] = (int32_t)obs_data_get_int(data, prm.uiNames.back().c_str()); prm.value.i[0] = (int32_t)obs_data_get_int(data, prm.uiNames.back().c_str());
} }
if (p.GetType() >= GS::EffectParameter::Type::Integer2) { if (p.get_type() >= gs::effect_parameter::type::Integer2) {
prm.uiNames.push_back(p_name + "1"); prm.uiNames.push_back(p_name + "1");
prm.uiDescriptions.push_back(p_desc + "[1]"); prm.uiDescriptions.push_back(p_desc + "[1]");
prm.value.i[1] = (int32_t)obs_data_get_int(data, prm.uiNames.back().c_str()); prm.value.i[1] = (int32_t)obs_data_get_int(data, prm.uiNames.back().c_str());
} }
if (p.GetType() >= GS::EffectParameter::Type::Integer3) { if (p.get_type() >= gs::effect_parameter::type::Integer3) {
prm.uiNames.push_back(p_name + "2"); prm.uiNames.push_back(p_name + "2");
prm.uiDescriptions.push_back(p_desc + "[2]"); prm.uiDescriptions.push_back(p_desc + "[2]");
prm.value.i[2] = (int32_t)obs_data_get_int(data, prm.uiNames.back().c_str()); prm.value.i[2] = (int32_t)obs_data_get_int(data, prm.uiNames.back().c_str());
} }
if (p.GetType() >= GS::EffectParameter::Type::Integer4) { if (p.get_type() >= gs::effect_parameter::type::Integer4) {
prm.uiNames.push_back(p_name + "3"); prm.uiNames.push_back(p_name + "3");
prm.uiDescriptions.push_back(p_desc + "[3]"); prm.uiDescriptions.push_back(p_desc + "[3]");
prm.value.i[3] = (int32_t)obs_data_get_int(data, prm.uiNames.back().c_str()); prm.value.i[3] = (int32_t)obs_data_get_int(data, prm.uiNames.back().c_str());
} }
break; break;
} }
case GS::EffectParameter::Type::Texture: case gs::effect_parameter::type::Texture:
{ {
prm.uiNames.push_back(p_name + "_type"); prm.uiNames.push_back(p_name + "_type");
prm.uiDescriptions.push_back(p_desc + " Type"); prm.uiDescriptions.push_back(p_desc + " Type");
@ -328,28 +328,28 @@ void Filter::CustomShader::Instance::update(obs_data_t *data) {
for (Parameter& prm : m_effectParameters) { for (Parameter& prm : m_effectParameters) {
switch (prm.type) { switch (prm.type) {
case GS::EffectParameter::Type::Boolean: case gs::effect_parameter::type::Boolean:
prm.value.b = obs_data_get_bool(data, prm.uiNames[0].c_str()); prm.value.b = obs_data_get_bool(data, prm.uiNames[0].c_str());
break; break;
case GS::EffectParameter::Type::Float4: case gs::effect_parameter::type::Float4:
prm.value.f[3] = (float_t)obs_data_get_double(data, prm.uiNames[3].c_str()); prm.value.f[3] = (float_t)obs_data_get_double(data, prm.uiNames[3].c_str());
case GS::EffectParameter::Type::Float3: case gs::effect_parameter::type::Float3:
prm.value.f[2] = (float_t)obs_data_get_double(data, prm.uiNames[2].c_str()); prm.value.f[2] = (float_t)obs_data_get_double(data, prm.uiNames[2].c_str());
case GS::EffectParameter::Type::Float2: case gs::effect_parameter::type::Float2:
prm.value.f[1] = (float_t)obs_data_get_double(data, prm.uiNames[1].c_str()); prm.value.f[1] = (float_t)obs_data_get_double(data, prm.uiNames[1].c_str());
case GS::EffectParameter::Type::Float: case gs::effect_parameter::type::Float:
prm.value.f[0] = (float_t)obs_data_get_double(data, prm.uiNames[0].c_str()); prm.value.f[0] = (float_t)obs_data_get_double(data, prm.uiNames[0].c_str());
break; break;
case GS::EffectParameter::Type::Integer4: case gs::effect_parameter::type::Integer4:
prm.value.i[3] = (int32_t)obs_data_get_int(data, prm.uiNames[3].c_str()); prm.value.i[3] = (int32_t)obs_data_get_int(data, prm.uiNames[3].c_str());
case GS::EffectParameter::Type::Integer3: case gs::effect_parameter::type::Integer3:
prm.value.i[2] = (int32_t)obs_data_get_int(data, prm.uiNames[2].c_str()); prm.value.i[2] = (int32_t)obs_data_get_int(data, prm.uiNames[2].c_str());
case GS::EffectParameter::Type::Integer2: case gs::effect_parameter::type::Integer2:
prm.value.i[1] = (int32_t)obs_data_get_int(data, prm.uiNames[1].c_str()); prm.value.i[1] = (int32_t)obs_data_get_int(data, prm.uiNames[1].c_str());
case GS::EffectParameter::Type::Integer: case gs::effect_parameter::type::Integer:
prm.value.i[0] = (int32_t)obs_data_get_int(data, prm.uiNames[0].c_str()); prm.value.i[0] = (int32_t)obs_data_get_int(data, prm.uiNames[0].c_str());
break; break;
case GS::EffectParameter::Type::Texture: case gs::effect_parameter::type::Texture:
prm.value.textureIsSource = obs_data_get_int(data, prm.uiNames[0].c_str()) == 1; prm.value.textureIsSource = obs_data_get_int(data, prm.uiNames[0].c_str()) == 1;
std::string nName = obs_data_get_string(data, prm.uiNames[1].c_str()); std::string nName = obs_data_get_string(data, prm.uiNames[1].c_str());
if (nName != prm.value.source.name) { if (nName != prm.value.source.name) {
@ -413,7 +413,7 @@ void Filter::CustomShader::Instance::video_render(gs_effect_t *effect) {
// Render original source to texture. // Render original source to texture.
{ {
auto op = m_renderTarget->Render(baseW, baseH); auto op = m_renderTarget->render(baseW, baseH);
vec4 black; vec4_zero(&black); vec4 black; vec4_zero(&black);
gs_ortho(0, (float_t)baseW, 0, (float_t)baseH, 0, 1); gs_ortho(0, (float_t)baseW, 0, (float_t)baseH, 0, 1);
gs_clear(GS_CLEAR_COLOR, &black, 0, 0); gs_clear(GS_CLEAR_COLOR, &black, 0, 0);
@ -422,7 +422,7 @@ void Filter::CustomShader::Instance::video_render(gs_effect_t *effect) {
effect ? effect : obs_get_base_effect(OBS_EFFECT_DEFAULT), baseW, baseH); effect ? effect : obs_get_base_effect(OBS_EFFECT_DEFAULT), baseW, baseH);
} }
} }
gs_texture_t* sourceTexture = m_renderTarget->GetTextureObject(); gs_texture_t* sourceTexture = m_renderTarget->get_object();
if (!sourceTexture) { if (!sourceTexture) {
obs_source_skip_video_filter(m_source); obs_source_skip_video_filter(m_source);
return; return;
@ -430,54 +430,54 @@ void Filter::CustomShader::Instance::video_render(gs_effect_t *effect) {
// Apply Parameters // Apply Parameters
try { try {
if (m_effect.effect->HasParameter("ViewSize", GS::EffectParameter::Type::Float2)) if (m_effect.effect->has_parameter("ViewSize", gs::effect_parameter::type::Float2))
m_effect.effect->GetParameter("ViewSize").SetFloat2(float_t(baseW), float_t(baseH)); m_effect.effect->get_parameter("ViewSize").set_float2(float_t(baseW), float_t(baseH));
if (m_effect.effect->HasParameter("ViewSizeI", GS::EffectParameter::Type::Integer2)) if (m_effect.effect->has_parameter("ViewSizeI", gs::effect_parameter::type::Integer2))
m_effect.effect->GetParameter("ViewSizeI").SetInteger2(baseW, baseH); m_effect.effect->get_parameter("ViewSizeI").set_int2(baseW, baseH);
if (m_effect.effect->HasParameter("Time", GS::EffectParameter::Type::Float)) if (m_effect.effect->has_parameter("Time", gs::effect_parameter::type::Float))
m_effect.effect->GetParameter("Time").SetFloat(m_renderTime); m_effect.effect->get_parameter("Time").set_float(m_renderTime);
if (m_effect.effect->HasParameter("TimeActive", GS::EffectParameter::Type::Float)) if (m_effect.effect->has_parameter("TimeActive", gs::effect_parameter::type::Float))
m_effect.effect->GetParameter("TimeActive").SetFloat(m_activeTime); m_effect.effect->get_parameter("TimeActive").set_float(m_activeTime);
/// "image" Specials /// "image" Specials
if (m_effect.effect->HasParameter("image_Size", GS::EffectParameter::Type::Float2)) if (m_effect.effect->has_parameter("image_Size", gs::effect_parameter::type::Float2))
m_effect.effect->GetParameter("image_Size").SetFloat2(float_t(baseW), float_t(baseH)); m_effect.effect->get_parameter("image_Size").set_float2(float_t(baseW), float_t(baseH));
if (m_effect.effect->HasParameter("image_SizeI", GS::EffectParameter::Type::Float2)) if (m_effect.effect->has_parameter("image_SizeI", gs::effect_parameter::type::Float2))
m_effect.effect->GetParameter("image_SizeI").SetInteger2(baseW, baseH); m_effect.effect->get_parameter("image_SizeI").set_int2(baseW, baseH);
if (m_effect.effect->HasParameter("image_Texel", GS::EffectParameter::Type::Float2)) if (m_effect.effect->has_parameter("image_Texel", gs::effect_parameter::type::Float2))
m_effect.effect->GetParameter("image_Texel").SetFloat2(1.0f / float_t(baseW), 1.0f / float_t(baseH)); m_effect.effect->get_parameter("image_Texel").set_float2(1.0f / float_t(baseW), 1.0f / float_t(baseH));
for (Parameter& prm : m_effectParameters) { for (Parameter& prm : m_effectParameters) {
GS::EffectParameter eprm = m_effect.effect->GetParameter(prm.name); gs::effect_parameter eprm = m_effect.effect->get_parameter(prm.name);
switch (prm.type) { switch (prm.type) {
case GS::EffectParameter::Type::Boolean: case gs::effect_parameter::type::Boolean:
eprm.SetBoolean(prm.value.b); eprm.set_bool(prm.value.b);
break; break;
case GS::EffectParameter::Type::Integer: case gs::effect_parameter::type::Integer:
eprm.SetInteger(prm.value.i[0]); eprm.set_int(prm.value.i[0]);
break; break;
case GS::EffectParameter::Type::Integer2: case gs::effect_parameter::type::Integer2:
eprm.SetInteger2(prm.value.i[0], prm.value.i[1]); eprm.set_int2(prm.value.i[0], prm.value.i[1]);
break; break;
case GS::EffectParameter::Type::Integer3: case gs::effect_parameter::type::Integer3:
eprm.SetInteger3(prm.value.i[0], prm.value.i[1], prm.value.i[2]); eprm.set_int3(prm.value.i[0], prm.value.i[1], prm.value.i[2]);
break; break;
case GS::EffectParameter::Type::Integer4: case gs::effect_parameter::type::Integer4:
eprm.SetInteger4(prm.value.i[0], prm.value.i[1], prm.value.i[2], prm.value.i[3]); eprm.set_int4(prm.value.i[0], prm.value.i[1], prm.value.i[2], prm.value.i[3]);
break; break;
case GS::EffectParameter::Type::Float: case gs::effect_parameter::type::Float:
eprm.SetFloat(prm.value.f[0]); eprm.set_float(prm.value.f[0]);
break; break;
case GS::EffectParameter::Type::Float2: case gs::effect_parameter::type::Float2:
eprm.SetFloat2(prm.value.f[0], prm.value.f[1]); eprm.set_float2(prm.value.f[0], prm.value.f[1]);
break; break;
case GS::EffectParameter::Type::Float3: case gs::effect_parameter::type::Float3:
eprm.SetFloat3(prm.value.f[0], prm.value.f[1], prm.value.f[2]); eprm.set_float3(prm.value.f[0], prm.value.f[1], prm.value.f[2]);
break; break;
case GS::EffectParameter::Type::Float4: case gs::effect_parameter::type::Float4:
eprm.SetFloat4(prm.value.f[0], prm.value.f[1], prm.value.f[2], prm.value.f[3]); eprm.set_float4(prm.value.f[0], prm.value.f[1], prm.value.f[2], prm.value.f[3]);
break; break;
case GS::EffectParameter::Type::Texture: case gs::effect_parameter::type::Texture:
if (prm.value.textureIsSource) { if (prm.value.textureIsSource) {
if (prm.value.source.rendertarget && prm.value.source.source) { if (prm.value.source.rendertarget && prm.value.source.source) {
uint32_t w, h; uint32_t w, h;
@ -490,11 +490,11 @@ void Filter::CustomShader::Instance::video_render(gs_effect_t *effect) {
gs_clear(GS_CLEAR_COLOR, &black, 0, 0); gs_clear(GS_CLEAR_COLOR, &black, 0, 0);
obs_source_video_render(prm.value.source.source); obs_source_video_render(prm.value.source.source);
} }
eprm.SetTexture(prm.value.source.rendertarget->GetTextureObject()); eprm.set_texture(prm.value.source.rendertarget->GetTextureObject());
} }
} else { } else {
if (prm.value.file.texture) { if (prm.value.file.texture) {
eprm.SetTexture(prm.value.file.texture); eprm.set_texture(prm.value.file.texture);
} }
} }
break; break;
@ -508,7 +508,7 @@ void Filter::CustomShader::Instance::video_render(gs_effect_t *effect) {
gs_reset_blend_state(); gs_reset_blend_state();
gs_enable_depth_test(false); gs_enable_depth_test(false);
while (gs_effect_loop(m_effect.effect->GetObject(), "Draw")) { while (gs_effect_loop(m_effect.effect->get_object(), "Draw")) {
obs_source_draw(sourceTexture, 0, 0, baseW, baseH, false); obs_source_draw(sourceTexture, 0, 0, baseW, baseH, false);
} }
} }
@ -530,34 +530,34 @@ void Filter::CustomShader::Instance::get_properties(obs_properties_t *pr) {
for (Parameter& prm : m_effectParameters) { for (Parameter& prm : m_effectParameters) {
switch (prm.type) { switch (prm.type) {
case GS::EffectParameter::Type::Boolean: case gs::effect_parameter::type::Boolean:
obs_properties_add_bool(pr, prm.uiNames[0].c_str(), prm.uiDescriptions[0].c_str()); obs_properties_add_bool(pr, prm.uiNames[0].c_str(), prm.uiDescriptions[0].c_str());
break; break;
case GS::EffectParameter::Type::Float: case gs::effect_parameter::type::Float:
case GS::EffectParameter::Type::Float2: case gs::effect_parameter::type::Float2:
case GS::EffectParameter::Type::Float3: case gs::effect_parameter::type::Float3:
case GS::EffectParameter::Type::Float4: case gs::effect_parameter::type::Float4:
obs_properties_add_float(pr, prm.uiNames[0].c_str(), prm.uiDescriptions[0].c_str(), FLT_MIN, FLT_MAX, FLT_EPSILON); obs_properties_add_float(pr, prm.uiNames[0].c_str(), prm.uiDescriptions[0].c_str(), FLT_MIN, FLT_MAX, FLT_EPSILON);
if (prm.type >= GS::EffectParameter::Type::Float2) if (prm.type >= gs::effect_parameter::type::Float2)
obs_properties_add_float(pr, prm.uiNames[1].c_str(), prm.uiDescriptions[1].c_str(), FLT_MIN, FLT_MAX, FLT_EPSILON); obs_properties_add_float(pr, prm.uiNames[1].c_str(), prm.uiDescriptions[1].c_str(), FLT_MIN, FLT_MAX, FLT_EPSILON);
if (prm.type >= GS::EffectParameter::Type::Float3) if (prm.type >= gs::effect_parameter::type::Float3)
obs_properties_add_float(pr, prm.uiNames[2].c_str(), prm.uiDescriptions[2].c_str(), FLT_MIN, FLT_MAX, FLT_EPSILON); obs_properties_add_float(pr, prm.uiNames[2].c_str(), prm.uiDescriptions[2].c_str(), FLT_MIN, FLT_MAX, FLT_EPSILON);
if (prm.type >= GS::EffectParameter::Type::Float4) if (prm.type >= gs::effect_parameter::type::Float4)
obs_properties_add_float(pr, prm.uiNames[3].c_str(), prm.uiDescriptions[3].c_str(), FLT_MIN, FLT_MAX, FLT_EPSILON); obs_properties_add_float(pr, prm.uiNames[3].c_str(), prm.uiDescriptions[3].c_str(), FLT_MIN, FLT_MAX, FLT_EPSILON);
break; break;
case GS::EffectParameter::Type::Integer: case gs::effect_parameter::type::Integer:
case GS::EffectParameter::Type::Integer2: case gs::effect_parameter::type::Integer2:
case GS::EffectParameter::Type::Integer3: case gs::effect_parameter::type::Integer3:
case GS::EffectParameter::Type::Integer4: case gs::effect_parameter::type::Integer4:
obs_properties_add_int(pr, prm.uiNames[0].c_str(), prm.uiDescriptions[0].c_str(), INT_MIN, INT_MAX, 1); obs_properties_add_int(pr, prm.uiNames[0].c_str(), prm.uiDescriptions[0].c_str(), INT_MIN, INT_MAX, 1);
if (prm.type >= GS::EffectParameter::Type::Integer2) if (prm.type >= gs::effect_parameter::type::Integer2)
obs_properties_add_int(pr, prm.uiNames[1].c_str(), prm.uiDescriptions[1].c_str(), INT_MIN, INT_MAX, 1); obs_properties_add_int(pr, prm.uiNames[1].c_str(), prm.uiDescriptions[1].c_str(), INT_MIN, INT_MAX, 1);
if (prm.type >= GS::EffectParameter::Type::Integer3) if (prm.type >= gs::effect_parameter::type::Integer3)
obs_properties_add_int(pr, prm.uiNames[2].c_str(), prm.uiDescriptions[2].c_str(), INT_MIN, INT_MAX, 1); obs_properties_add_int(pr, prm.uiNames[2].c_str(), prm.uiDescriptions[2].c_str(), INT_MIN, INT_MAX, 1);
if (prm.type >= GS::EffectParameter::Type::Integer4) if (prm.type >= gs::effect_parameter::type::Integer4)
obs_properties_add_int(pr, prm.uiNames[3].c_str(), prm.uiDescriptions[3].c_str(), INT_MIN, INT_MAX, 1); obs_properties_add_int(pr, prm.uiNames[3].c_str(), prm.uiDescriptions[3].c_str(), INT_MIN, INT_MAX, 1);
break; break;
case GS::EffectParameter::Type::Texture: case gs::effect_parameter::type::Texture:
obs_property * pt = obs_properties_add_list(pr, obs_property * pt = obs_properties_add_list(pr,
prm.uiNames[0].c_str(), prm.uiNames[0].c_str(),
prm.uiDescriptions[0].c_str(), prm.uiDescriptions[0].c_str(),
@ -635,7 +635,7 @@ void Filter::CustomShader::Instance::CheckShaderFile(std::string file, float_t t
shaderContent[sz] = '\0'; shaderContent[sz] = '\0';
} }
m_effect.effect = std::make_unique<GS::Effect>(shaderContent.data(), m_effect.path); m_effect.effect = std::make_unique<gs::effect>(shaderContent.data(), m_effect.path);
} catch (std::runtime_error& ex) { } catch (std::runtime_error& ex) {
const char* filterName = obs_source_get_name(m_source); const char* filterName = obs_source_get_name(m_source);
P_LOG_ERROR("[%s] Shader loading failed with error(s): %s", filterName, ex.what()); P_LOG_ERROR("[%s] Shader loading failed with error(s): %s", filterName, ex.what());
@ -650,7 +650,7 @@ std::string Filter::CustomShader::Instance::GetShaderFile() {
void Filter::CustomShader::Instance::CheckTextures(float_t time) { void Filter::CustomShader::Instance::CheckTextures(float_t time) {
for (Parameter& prm : m_effectParameters) { for (Parameter& prm : m_effectParameters) {
if (prm.type != GS::EffectParameter::Type::Texture) if (prm.type != gs::effect_parameter::type::Texture)
continue; continue;
if (prm.value.textureIsSource) { if (prm.value.textureIsSource) {
@ -664,7 +664,7 @@ void Filter::CustomShader::Instance::CheckTextures(float_t time) {
// Ensure that a render target exists. // Ensure that a render target exists.
if (!prm.value.source.rendertarget) if (!prm.value.source.rendertarget)
prm.value.source.rendertarget = std::make_shared<GS::RenderTarget>(GS_RGBA, GS_ZS_NONE); prm.value.source.rendertarget = std::make_shared<gs::rendertarget>(GS_RGBA, GS_ZS_NONE);
// Finally check if the source property was modified or is empty. // Finally check if the source property was modified or is empty.
if (prm.value.source.dirty || !prm.value.source.source) { if (prm.value.source.dirty || !prm.value.source.source) {
@ -711,7 +711,7 @@ void Filter::CustomShader::Instance::CheckTextures(float_t time) {
if (doRefresh) { if (doRefresh) {
prm.value.file.dirty = false; prm.value.file.dirty = false;
try { try {
prm.value.file.texture = std::make_shared<GS::Texture>(prm.value.file.path); prm.value.file.texture = std::make_shared<gs::texture>(prm.value.file.path);
} catch (std::runtime_error& ex) { } catch (std::runtime_error& ex) {
const char* filterName = obs_source_get_name(m_source); const char* filterName = obs_source_get_name(m_source);
P_LOG_ERROR("[%s] Loading texture file '%s' failed with error(s): %s", P_LOG_ERROR("[%s] Loading texture file '%s' failed with error(s): %s",
@ -722,19 +722,19 @@ void Filter::CustomShader::Instance::CheckTextures(float_t time) {
} }
} }
bool Filter::CustomShader::Instance::IsSpecialParameter(std::string name, GS::EffectParameter::Type type) { bool Filter::CustomShader::Instance::IsSpecialParameter(std::string name, gs::effect_parameter::type type) {
std::pair<std::string, GS::EffectParameter::Type> reservedParameters[] = { std::pair<std::string, gs::effect_parameter::type> reservedParameters[] = {
{ "ViewProj", GS::EffectParameter::Type::Matrix }, { "ViewProj", gs::effect_parameter::type::Matrix },
{ "ViewSize", GS::EffectParameter::Type::Float2 }, { "ViewSize", gs::effect_parameter::type::Float2 },
{ "ViewSizeI", GS::EffectParameter::Type::Integer2 }, { "ViewSizeI", gs::effect_parameter::type::Integer2 },
{ "Time", GS::EffectParameter::Type::Float }, { "Time", gs::effect_parameter::type::Float },
{ "TimeActive", GS::EffectParameter::Type::Float }, { "TimeActive", gs::effect_parameter::type::Float },
{ "image", GS::EffectParameter::Type::Texture } { "image", gs::effect_parameter::type::Texture }
}; };
std::pair<std::string, GS::EffectParameter::Type> textureParameters[] = { std::pair<std::string, gs::effect_parameter::type> textureParameters[] = {
{ "Size", GS::EffectParameter::Type::Float2 }, { "Size", gs::effect_parameter::type::Float2 },
{ "SizeI", GS::EffectParameter::Type::Integer2 }, { "SizeI", gs::effect_parameter::type::Integer2 },
{ "Texel", GS::EffectParameter::Type::Float2 } { "Texel", gs::effect_parameter::type::Float2 }
}; };
for (auto& kv : reservedParameters) { for (auto& kv : reservedParameters) {
@ -750,8 +750,8 @@ bool Filter::CustomShader::Instance::IsSpecialParameter(std::string name, GS::Ef
secondPart = name.substr(posUnderscore + 1); secondPart = name.substr(posUnderscore + 1);
try { try {
GS::EffectParameter prm = m_effect.effect->GetParameter(firstPart); gs::effect_parameter prm = m_effect.effect->get_parameter(firstPart);
if (prm.GetType() == GS::EffectParameter::Type::Texture) { if (prm.get_type() == gs::effect_parameter::type::Texture) {
for (auto& kv : reservedParameters) { for (auto& kv : reservedParameters) {
if ((secondPart == kv.first) && (type == kv.second)) if ((secondPart == kv.first) && (type == kv.second))
return true; return true;

View file

@ -70,12 +70,12 @@ namespace Filter {
std::string GetShaderFile(); std::string GetShaderFile();
void CheckTextures(float_t time); void CheckTextures(float_t time);
bool IsSpecialParameter(std::string name, GS::EffectParameter::Type type); bool IsSpecialParameter(std::string name, gs::effect_parameter::type type);
private: private:
obs_source_t * m_source; obs_source_t * m_source;
bool m_isActive = true; bool m_isActive = true;
std::unique_ptr<GS::RenderTarget> m_renderTarget; std::unique_ptr<gs::rendertarget> m_renderTarget;
float_t m_activeTime, m_renderTime; float_t m_activeTime, m_renderTime;
@ -85,12 +85,12 @@ namespace Filter {
time_t createTime, modifiedTime; time_t createTime, modifiedTime;
size_t size; size_t size;
float_t lastCheck; float_t lastCheck;
std::unique_ptr<GS::Effect> effect; std::unique_ptr<gs::effect> effect;
} m_effect; } m_effect;
struct Parameter { struct Parameter {
std::string name; std::string name;
GS::EffectParameter::Type type; gs::effect_parameter::type type;
std::vector<std::string> uiNames; std::vector<std::string> uiNames;
std::vector<std::string> uiDescriptions; std::vector<std::string> uiDescriptions;
@ -106,7 +106,7 @@ namespace Filter {
bool dirty = false; bool dirty = false;
std::string name; std::string name;
obs_source_t* source = nullptr; obs_source_t* source = nullptr;
std::shared_ptr<GS::RenderTarget> rendertarget; std::shared_ptr<gs::rendertarget> rendertarget;
} source; } source;
struct File { struct File {
bool dirty = false; bool dirty = false;
@ -114,7 +114,7 @@ namespace Filter {
time_t createTime, modifiedTime; time_t createTime, modifiedTime;
size_t fileSize; size_t fileSize;
float_t lastCheck; float_t lastCheck;
std::shared_ptr<GS::Texture> texture; std::shared_ptr<gs::texture> texture;
} file; } file;
} value; } value;
}; };

View file

@ -255,8 +255,8 @@ void Filter::Shape::video_render(void *ptr, gs_effect_t *effect) {
Filter::Shape::Instance::Instance(obs_data_t *data, obs_source_t *context) 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::vertex_buffer(maximumPoints);
m_vertexHelper->SetUVLayers(1); m_vertexHelper->set_uv_layers(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->Update(); 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

@ -78,7 +78,7 @@ namespace Filter {
private: private:
obs_source_t *context; obs_source_t *context;
gs_effect_t *customEffect; gs_effect_t *customEffect;
GS::VertexBuffer *m_vertexHelper; gs::vertex_buffer *m_vertexHelper;
gs_vertbuffer_t *m_vertexBuffer; gs_vertbuffer_t *m_vertexBuffer;
gs_draw_mode drawmode; gs_draw_mode drawmode;
gs_texrender_t *m_texRender; gs_texrender_t *m_texRender;

View file

@ -304,9 +304,9 @@ Filter::Transform::Instance::Instance(obs_data_t *data, obs_source_t *context) :
obs_enter_graphics(); obs_enter_graphics();
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::vertex_buffer(4);
m_vertexHelper->SetUVLayers(1); m_vertexHelper->set_uv_layers(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->Update(); 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

@ -65,7 +65,7 @@ namespace Filter {
private: private:
obs_source_t *m_sourceContext; obs_source_t *m_sourceContext;
GS::VertexBuffer *m_vertexHelper; gs::vertex_buffer *m_vertexHelper;
gs_vertbuffer_t *m_vertexBuffer; gs_vertbuffer_t *m_vertexBuffer;
gs_texrender_t *m_texRender, *m_shapeRender; gs_texrender_t *m_texRender, *m_shapeRender;

View file

@ -26,7 +26,7 @@ gfx::SourceTexture::~SourceTexture() {
} }
gfx::SourceTexture::SourceTexture() { gfx::SourceTexture::SourceTexture() {
m_rt = std::make_shared<GS::RenderTarget>(GS_RGBA, GS_ZS_NONE); m_rt = std::make_shared<gs::rendertarget>(GS_RGBA, GS_ZS_NONE);
} }
obs_source_t* gfx::SourceTexture::GetObject() { obs_source_t* gfx::SourceTexture::GetObject() {
@ -49,7 +49,7 @@ gfx::SourceTexture::SourceTexture(obs_source_t* src) : SourceTexture() {
} }
} }
std::shared_ptr<GS::Texture> gfx::SourceTexture::Render(size_t width, size_t height) { std::shared_ptr<gs::texture> gfx::SourceTexture::Render(size_t width, size_t height) {
if (!m_source) { if (!m_source) {
throw std::invalid_argument("Missing source to render."); throw std::invalid_argument("Missing source to render.");
} }
@ -68,7 +68,7 @@ std::shared_ptr<GS::Texture> gfx::SourceTexture::Render(size_t width, size_t hei
obs_source_video_render(m_source); obs_source_video_render(m_source);
} }
std::shared_ptr<GS::Texture> tex; std::shared_ptr<gs::texture> tex;
m_rt->GetTexture(tex); m_rt->GetTexture(tex);
return tex; return tex;
} }

View file

@ -25,7 +25,7 @@
namespace gfx { namespace gfx {
class SourceTexture { class SourceTexture {
obs_source_t* m_source; obs_source_t* m_source;
std::shared_ptr<GS::RenderTarget> m_rt; std::shared_ptr<gs::rendertarget> m_rt;
SourceTexture(); SourceTexture();
public: public:
@ -36,6 +36,6 @@ namespace gfx {
obs_source_t* GetObject(); obs_source_t* GetObject();
std::shared_ptr<GS::Texture> Render(size_t width, size_t height); std::shared_ptr<gs::texture> Render(size_t width, size_t height);
}; };
} }

View file

@ -26,11 +26,11 @@ extern "C" {
#pragma warning( pop ) #pragma warning( pop )
} }
GS::Effect::Effect() { gs::effect::effect() {
m_effect = nullptr; m_effect = nullptr;
} }
GS::Effect::Effect(std::string file) { gs::effect::effect(std::string file) {
obs_enter_graphics(); obs_enter_graphics();
char* errorMessage = nullptr; char* errorMessage = nullptr;
m_effect = gs_effect_create_from_file(file.c_str(), &errorMessage); m_effect = gs_effect_create_from_file(file.c_str(), &errorMessage);
@ -46,7 +46,7 @@ GS::Effect::Effect(std::string file) {
obs_leave_graphics(); obs_leave_graphics();
} }
GS::Effect::Effect(std::string code, std::string name) { gs::effect::effect(std::string code, std::string name) {
obs_enter_graphics(); obs_enter_graphics();
char* errorMessage = nullptr; char* errorMessage = nullptr;
m_effect = gs_effect_create(code.c_str(), name.c_str(), &errorMessage); m_effect = gs_effect_create(code.c_str(), name.c_str(), &errorMessage);
@ -62,57 +62,57 @@ GS::Effect::Effect(std::string code, std::string name) {
obs_leave_graphics(); obs_leave_graphics();
} }
GS::Effect::~Effect() { gs::effect::~effect() {
obs_enter_graphics(); obs_enter_graphics();
gs_effect_destroy(m_effect); gs_effect_destroy(m_effect);
obs_leave_graphics(); obs_leave_graphics();
} }
gs_effect_t* GS::Effect::GetObject() { gs_effect_t* gs::effect::get_object() {
return m_effect; return m_effect;
} }
size_t GS::Effect::CountParameters() { size_t gs::effect::count_parameters() {
return (size_t)gs_effect_get_num_params(m_effect); return (size_t)gs_effect_get_num_params(m_effect);
} }
std::list<GS::EffectParameter> GS::Effect::GetParameters() { std::list<gs::effect_parameter> gs::effect::get_parameters() {
size_t num = gs_effect_get_num_params(m_effect); size_t num = gs_effect_get_num_params(m_effect);
std::list<GS::EffectParameter> ps; std::list<gs::effect_parameter> ps;
for (size_t idx = 0; idx < num; idx++) { for (size_t idx = 0; idx < num; idx++) {
ps.emplace_back(GetParameter(idx)); ps.emplace_back(get_parameter(idx));
} }
return ps; return ps;
} }
GS::EffectParameter GS::Effect::GetParameter(size_t idx) { gs::effect_parameter gs::effect::get_parameter(size_t idx) {
gs_eparam_t* param = gs_effect_get_param_by_idx(m_effect, idx); gs_eparam_t* param = gs_effect_get_param_by_idx(m_effect, idx);
if (!param) if (!param)
throw std::invalid_argument("parameter with index not found"); throw std::invalid_argument("parameter with index not found");
return EffectParameter(param); return effect_parameter(param);
} }
bool GS::Effect::HasParameter(std::string name) { bool gs::effect::has_parameter(std::string name) {
gs_eparam_t* param = gs_effect_get_param_by_name(m_effect, name.c_str()); gs_eparam_t* param = gs_effect_get_param_by_name(m_effect, name.c_str());
return (param != nullptr); return (param != nullptr);
} }
bool GS::Effect::HasParameter(std::string name, EffectParameter::Type type) { bool gs::effect::has_parameter(std::string name, effect_parameter::type type) {
gs_eparam_t* param = gs_effect_get_param_by_name(m_effect, name.c_str()); gs_eparam_t* param = gs_effect_get_param_by_name(m_effect, name.c_str());
if (param == nullptr) if (param == nullptr)
return false; return false;
GS::EffectParameter eprm(param); gs::effect_parameter eprm(param);
return eprm.GetType() == type; return eprm.get_type() == type;
} }
GS::EffectParameter GS::Effect::GetParameter(std::string name) { gs::effect_parameter gs::effect::get_parameter(std::string name) {
gs_eparam_t* param = gs_effect_get_param_by_name(m_effect, name.c_str()); gs_eparam_t* param = gs_effect_get_param_by_name(m_effect, name.c_str());
if (!param) if (!param)
throw std::invalid_argument("parameter with name not found"); throw std::invalid_argument("parameter with name not found");
return EffectParameter(param); return effect_parameter(param);
} }
GS::EffectParameter::EffectParameter(gs_eparam_t* param) { gs::effect_parameter::effect_parameter(gs_eparam_t* param) {
if (!param) if (!param)
throw std::invalid_argument("param is null"); throw std::invalid_argument("param is null");
@ -120,164 +120,164 @@ GS::EffectParameter::EffectParameter(gs_eparam_t* param) {
gs_effect_get_param_info(m_param, &m_paramInfo); gs_effect_get_param_info(m_param, &m_paramInfo);
} }
std::string GS::EffectParameter::GetName() { std::string gs::effect_parameter::get_name() {
return m_paramInfo.name; return m_paramInfo.name;
} }
GS::EffectParameter::Type GS::EffectParameter::GetType() { gs::effect_parameter::type gs::effect_parameter::get_type() {
switch (m_paramInfo.type) { switch (m_paramInfo.type) {
case GS_SHADER_PARAM_BOOL: case GS_SHADER_PARAM_BOOL:
return Type::Boolean; return type::Boolean;
case GS_SHADER_PARAM_FLOAT: case GS_SHADER_PARAM_FLOAT:
return Type::Float; return type::Float;
case GS_SHADER_PARAM_VEC2: case GS_SHADER_PARAM_VEC2:
return Type::Float2; return type::Float2;
case GS_SHADER_PARAM_VEC3: case GS_SHADER_PARAM_VEC3:
return Type::Float3; return type::Float3;
case GS_SHADER_PARAM_VEC4: case GS_SHADER_PARAM_VEC4:
return Type::Float4; return type::Float4;
case GS_SHADER_PARAM_INT: case GS_SHADER_PARAM_INT:
return Type::Integer; return type::Integer;
case GS_SHADER_PARAM_INT2: case GS_SHADER_PARAM_INT2:
return Type::Integer2; return type::Integer2;
case GS_SHADER_PARAM_INT3: case GS_SHADER_PARAM_INT3:
return Type::Integer3; return type::Integer3;
case GS_SHADER_PARAM_INT4: case GS_SHADER_PARAM_INT4:
return Type::Integer4; return type::Integer4;
case GS_SHADER_PARAM_MATRIX4X4: case GS_SHADER_PARAM_MATRIX4X4:
return Type::Matrix; return type::Matrix;
case GS_SHADER_PARAM_TEXTURE: case GS_SHADER_PARAM_TEXTURE:
return Type::Texture; return type::Texture;
//case GS_SHADER_PARAM_STRING: //case GS_SHADER_PARAM_STRING:
// return Type::String; // return Type::String;
default: default:
case GS_SHADER_PARAM_UNKNOWN: case GS_SHADER_PARAM_UNKNOWN:
return Type::Unknown; return type::Unknown;
} }
} }
void GS::EffectParameter::SetBoolean(bool v) { void gs::effect_parameter::set_bool(bool v) {
if (GetType() != Type::Boolean) if (get_type() != type::Boolean)
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_bool(m_param, v); gs_effect_set_bool(m_param, v);
} }
void GS::EffectParameter::SetBooleanArray(bool v[], size_t sz) { void gs::effect_parameter::set_bool_array(bool v[], size_t sz) {
if (GetType() != Type::Boolean) if (get_type() != type::Boolean)
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_val(m_param, v, sz); gs_effect_set_val(m_param, v, sz);
} }
void GS::EffectParameter::SetFloat(float_t x) { void gs::effect_parameter::set_float(float_t x) {
if (GetType() != Type::Float) if (get_type() != type::Float)
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_float(m_param, x); gs_effect_set_float(m_param, x);
} }
void GS::EffectParameter::SetFloat2(vec2& v) { void gs::effect_parameter::set_float2(vec2& v) {
if (GetType() != Type::Float2) if (get_type() != type::Float2)
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_vec2(m_param, &v); gs_effect_set_vec2(m_param, &v);
} }
void GS::EffectParameter::SetFloat2(float_t x, float_t y) { void gs::effect_parameter::set_float2(float_t x, float_t y) {
if (GetType() != Type::Float2) if (get_type() != type::Float2)
throw std::bad_cast(); throw std::bad_cast();
vec2 v = { x, y }; vec2 v = { x, y };
gs_effect_set_vec2(m_param, &v); gs_effect_set_vec2(m_param, &v);
} }
void GS::EffectParameter::SetFloat3(vec3& v) { void gs::effect_parameter::set_float3(vec3& v) {
if (GetType() != Type::Float3) if (get_type() != type::Float3)
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_vec3(m_param, &v); gs_effect_set_vec3(m_param, &v);
} }
void GS::EffectParameter::SetFloat3(float_t x, float_t y, float_t z) { void gs::effect_parameter::set_float3(float_t x, float_t y, float_t z) {
if (GetType() != Type::Float3) if (get_type() != type::Float3)
throw std::bad_cast(); throw std::bad_cast();
vec3 v = { x, y, z }; vec3 v = { x, y, z };
gs_effect_set_vec3(m_param, &v); gs_effect_set_vec3(m_param, &v);
} }
void GS::EffectParameter::SetFloat4(vec4& v) { void gs::effect_parameter::set_float4(vec4& v) {
if (GetType() != Type::Float4) if (get_type() != type::Float4)
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_vec4(m_param, &v); gs_effect_set_vec4(m_param, &v);
} }
void GS::EffectParameter::SetFloat4(float_t x, float_t y, float_t z, float_t w) { void gs::effect_parameter::set_float4(float_t x, float_t y, float_t z, float_t w) {
if (GetType() != Type::Float4) if (get_type() != type::Float4)
throw std::bad_cast(); throw std::bad_cast();
vec4 v = { x, y, z, w }; vec4 v = { x, y, z, w };
gs_effect_set_vec4(m_param, &v); gs_effect_set_vec4(m_param, &v);
} }
void GS::EffectParameter::SetFloatArray(float_t v[], size_t sz) { void gs::effect_parameter::set_float_array(float_t v[], size_t sz) {
if ((GetType() != Type::Float) && (GetType() != Type::Float2) && (GetType() != Type::Float3) && (GetType() != Type::Float4)) if ((get_type() != type::Float) && (get_type() != type::Float2) && (get_type() != type::Float3) && (get_type() != type::Float4))
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_val(m_param, v, sizeof(float_t) * sz); gs_effect_set_val(m_param, v, sizeof(float_t) * sz);
} }
void GS::EffectParameter::SetInteger(int32_t x) { void gs::effect_parameter::set_int(int32_t x) {
if (GetType() != Type::Integer) if (get_type() != type::Integer)
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_int(m_param, x); gs_effect_set_int(m_param, x);
} }
void GS::EffectParameter::SetInteger2(int32_t x, int32_t y) { void gs::effect_parameter::set_int2(int32_t x, int32_t y) {
if (GetType() != Type::Integer2) if (get_type() != type::Integer2)
throw std::bad_cast(); throw std::bad_cast();
int32_t v[] = { x, y }; int32_t v[] = { x, y };
gs_effect_set_val(m_param, v, sizeof(int) * 2); gs_effect_set_val(m_param, v, sizeof(int) * 2);
} }
void GS::EffectParameter::SetInteger3(int32_t x, int32_t y, int32_t z) { void gs::effect_parameter::set_int3(int32_t x, int32_t y, int32_t z) {
if (GetType() != Type::Integer3) if (get_type() != type::Integer3)
throw std::bad_cast(); throw std::bad_cast();
int32_t v[] = { x, y, z }; int32_t v[] = { x, y, z };
gs_effect_set_val(m_param, v, sizeof(int) * 3); gs_effect_set_val(m_param, v, sizeof(int) * 3);
} }
void GS::EffectParameter::SetInteger4(int32_t x, int32_t y, int32_t z, int32_t w) { void gs::effect_parameter::set_int4(int32_t x, int32_t y, int32_t z, int32_t w) {
if (GetType() != Type::Integer4) if (get_type() != type::Integer4)
throw std::bad_cast(); throw std::bad_cast();
int32_t v[] = { x, y, z, w }; int32_t v[] = { x, y, z, w };
gs_effect_set_val(m_param, v, sizeof(int) * 4); gs_effect_set_val(m_param, v, sizeof(int) * 4);
} }
void GS::EffectParameter::SetIntegerArray(int32_t v[], size_t sz) { void gs::effect_parameter::set_int_array(int32_t v[], size_t sz) {
if ((GetType() != Type::Integer) && (GetType() != Type::Integer2) && (GetType() != Type::Integer3) && (GetType() != Type::Integer4)) if ((get_type() != type::Integer) && (get_type() != type::Integer2) && (get_type() != type::Integer3) && (get_type() != type::Integer4))
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_val(m_param, v, sizeof(int) * sz); gs_effect_set_val(m_param, v, sizeof(int) * sz);
} }
void GS::EffectParameter::SetMatrix(matrix4& v) { void gs::effect_parameter::set_matrix(matrix4& v) {
if (GetType() != Type::Matrix) if (get_type() != type::Matrix)
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_matrix4(m_param, &v); gs_effect_set_matrix4(m_param, &v);
} }
void GS::EffectParameter::SetTexture(std::shared_ptr<GS::Texture> v) { void gs::effect_parameter::set_texture(std::shared_ptr<gs::texture> v) {
if (GetType() != Type::Texture) if (get_type() != type::Texture)
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_texture(m_param, v->GetObject()); gs_effect_set_texture(m_param, v->GetObject());
} }
void GS::EffectParameter::SetTexture(gs_texture_t* v) { void gs::effect_parameter::set_texture(gs_texture_t* v) {
if (GetType() != Type::Texture) if (get_type() != type::Texture)
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_texture(m_param, v); gs_effect_set_texture(m_param, v);
} }
void GS::EffectParameter::SetSampler(std::shared_ptr<GS::Sampler> v) { void gs::effect_parameter::set_sampler(std::shared_ptr<gs::sampler> v) {
if (GetType() != Type::Texture) if (get_type() != type::Texture)
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_next_sampler(m_param, v->GetObject()); gs_effect_set_next_sampler(m_param, v->GetObject());
} }
void GS::EffectParameter::SetSampler(gs_sampler_state* v) { void gs::effect_parameter::set_sampler(gs_sampler_state* v) {
if (GetType() != Type::Texture) if (get_type() != type::Texture)
throw std::bad_cast(); throw std::bad_cast();
gs_effect_set_next_sampler(m_param, v); gs_effect_set_next_sampler(m_param, v);
} }

View file

@ -35,10 +35,10 @@ extern "C" {
#pragma warning( pop ) #pragma warning( pop )
} }
namespace GS { namespace gs {
class EffectParameter { class effect_parameter {
public: public:
enum class Type : uint8_t { enum class type : uint8_t {
Unknown, Unknown,
Boolean, Boolean,
Float, Float,
@ -55,52 +55,52 @@ namespace GS {
}; };
public: public:
EffectParameter(gs_eparam_t* param); effect_parameter(gs_eparam_t* param);
std::string GetName(); std::string get_name();
Type GetType(); type get_type();
void SetBoolean(bool v); void set_bool(bool v);
void SetBooleanArray(bool v[], size_t sz); void set_bool_array(bool v[], size_t sz);
void SetFloat(float_t x); void set_float(float_t x);
void SetFloat2(vec2& v); void set_float2(vec2& v);
void SetFloat2(float_t x, float_t y); void set_float2(float_t x, float_t y);
void SetFloat3(vec3& v); void set_float3(vec3& v);
void SetFloat3(float_t x, float_t y, float_t z); void set_float3(float_t x, float_t y, float_t z);
void SetFloat4(vec4& v); void set_float4(vec4& v);
void SetFloat4(float_t x, float_t y, float_t z, float_t w); void set_float4(float_t x, float_t y, float_t z, float_t w);
void SetFloatArray(float_t v[], size_t sz); void set_float_array(float_t v[], size_t sz);
void SetInteger(int32_t x); void set_int(int32_t x);
void SetInteger2(int32_t x, int32_t y); void set_int2(int32_t x, int32_t y);
void SetInteger3(int32_t x, int32_t y, int32_t z); void set_int3(int32_t x, int32_t y, int32_t z);
void SetInteger4(int32_t x, int32_t y, int32_t z, int32_t w); void set_int4(int32_t x, int32_t y, int32_t z, int32_t w);
void SetIntegerArray(int32_t v[], size_t sz); void set_int_array(int32_t v[], size_t sz);
void SetMatrix(matrix4& v); void set_matrix(matrix4& v);
void SetTexture(std::shared_ptr<GS::Texture> v); void set_texture(std::shared_ptr<gs::texture> v);
void SetTexture(gs_texture_t* v); void set_texture(gs_texture_t* v);
void SetSampler(std::shared_ptr<GS::Sampler> v); void set_sampler(std::shared_ptr<gs::sampler> v);
void SetSampler(gs_sampler_state* v); void set_sampler(gs_sampler_state* v);
private: private:
gs_eparam_t* m_param; gs_eparam_t* m_param;
gs_effect_param_info m_paramInfo; gs_effect_param_info m_paramInfo;
}; };
class Effect { class effect {
public: public:
Effect(); effect();
Effect(std::string file); effect(std::string file);
Effect(std::string code, std::string name); effect(std::string code, std::string name);
virtual ~Effect(); virtual ~effect();
gs_effect_t* GetObject(); gs_effect_t* get_object();
size_t CountParameters(); size_t count_parameters();
std::list<EffectParameter> GetParameters(); std::list<effect_parameter> get_parameters();
EffectParameter GetParameter(size_t idx); effect_parameter get_parameter(size_t idx);
EffectParameter GetParameter(std::string name); effect_parameter get_parameter(std::string name);
bool HasParameter(std::string name); bool has_parameter(std::string name);
bool HasParameter(std::string name, EffectParameter::Type type); bool has_parameter(std::string name, effect_parameter::type type);
protected: protected:
gs_effect_t* m_effect; gs_effect_t* m_effect;

View file

@ -26,7 +26,7 @@ extern "C" {
#pragma warning( pop ) #pragma warning( pop )
} }
GS::IndexBuffer::IndexBuffer(uint32_t maximumVertices) { gs::index_buffer::index_buffer(uint32_t maximumVertices) {
this->reserve(maximumVertices); this->reserve(maximumVertices);
obs_enter_graphics(); obs_enter_graphics();
@ -34,27 +34,27 @@ GS::IndexBuffer::IndexBuffer(uint32_t maximumVertices) {
obs_leave_graphics(); obs_leave_graphics();
} }
GS::IndexBuffer::IndexBuffer() : IndexBuffer(MAXIMUM_VERTICES) {} gs::index_buffer::index_buffer() : index_buffer(MAXIMUM_VERTICES) {}
GS::IndexBuffer::IndexBuffer(IndexBuffer& other) : IndexBuffer((uint32_t)other.size()) { gs::index_buffer::index_buffer(index_buffer& other) : index_buffer((uint32_t)other.size()) {
std::copy(other.begin(), other.end(), this->end()); std::copy(other.begin(), other.end(), this->end());
} }
GS::IndexBuffer::IndexBuffer(std::vector<uint32_t>& other) : IndexBuffer((uint32_t)other.size()) { gs::index_buffer::index_buffer(std::vector<uint32_t>& other) : index_buffer((uint32_t)other.size()) {
std::copy(other.begin(), other.end(), this->end()); std::copy(other.begin(), other.end(), this->end());
} }
GS::IndexBuffer::~IndexBuffer() { gs::index_buffer::~index_buffer() {
obs_enter_graphics(); obs_enter_graphics();
gs_indexbuffer_destroy(m_indexBuffer); gs_indexbuffer_destroy(m_indexBuffer);
obs_leave_graphics(); obs_leave_graphics();
} }
gs_indexbuffer_t* GS::IndexBuffer::get() { gs_indexbuffer_t* gs::index_buffer::get() {
return get(true); return get(true);
} }
gs_indexbuffer_t* GS::IndexBuffer::get(bool refreshGPU) { gs_indexbuffer_t* gs::index_buffer::get(bool refreshGPU) {
if (refreshGPU) { if (refreshGPU) {
obs_enter_graphics(); obs_enter_graphics();
gs_indexbuffer_flush(m_indexBuffer); gs_indexbuffer_flush(m_indexBuffer);

View file

@ -27,14 +27,14 @@ extern "C" {
#pragma warning( pop ) #pragma warning( pop )
} }
namespace GS { namespace gs {
class IndexBuffer : public std::vector<uint32_t> { class index_buffer : public std::vector<uint32_t> {
public: public:
IndexBuffer(uint32_t maximumVertices); index_buffer(uint32_t maximumVertices);
IndexBuffer(); index_buffer();
IndexBuffer(IndexBuffer& other); index_buffer(index_buffer& other);
IndexBuffer(std::vector<uint32_t>& other); index_buffer(std::vector<uint32_t>& other);
virtual ~IndexBuffer(); virtual ~index_buffer();
gs_indexbuffer_t* get(); gs_indexbuffer_t* get();

View file

@ -20,7 +20,7 @@
#pragma once #pragma once
#include <inttypes.h> #include <inttypes.h>
namespace GS { namespace gs {
static const uint32_t MAXIMUM_VERTICES = 0xFFFFFFu; static const uint32_t MAXIMUM_VERTICES = 0xFFFFFFu;
static const uint32_t MAXIMUM_UVW_LAYERS = 8u; static const uint32_t MAXIMUM_UVW_LAYERS = 8u;
} }

View file

@ -26,43 +26,43 @@ extern "C" {
#pragma warning( pop ) #pragma warning( pop )
} }
GS::RenderTarget::RenderTarget(gs_color_format colorFormat, gs_zstencil_format zsFormat) { gs::rendertarget::rendertarget(gs_color_format colorFormat, gs_zstencil_format zsFormat) {
m_isBeingRendered = false; m_isBeingRendered = false;
obs_enter_graphics(); obs_enter_graphics();
m_renderTarget = gs_texrender_create(colorFormat, zsFormat); m_renderTarget = gs_texrender_create(colorFormat, zsFormat);
obs_leave_graphics(); obs_leave_graphics();
} }
GS::RenderTarget::~RenderTarget() { gs::rendertarget::~rendertarget() {
obs_enter_graphics(); obs_enter_graphics();
gs_texrender_destroy(m_renderTarget); gs_texrender_destroy(m_renderTarget);
obs_leave_graphics(); obs_leave_graphics();
} }
GS::RenderTargetOp GS::RenderTarget::Render(uint32_t width, uint32_t height) { gs::rendertarget_op gs::rendertarget::render(uint32_t width, uint32_t height) {
return { this, width, height }; return { this, width, height };
} }
gs_texture_t* GS::RenderTarget::GetTextureObject() { gs_texture_t* gs::rendertarget::get_object() {
obs_enter_graphics(); obs_enter_graphics();
gs_texture_t* tex = gs_texrender_get_texture(m_renderTarget); gs_texture_t* tex = gs_texrender_get_texture(m_renderTarget);
obs_leave_graphics(); obs_leave_graphics();
return tex; return tex;
} }
void GS::RenderTarget::GetTexture(GS::Texture& tex) { void gs::rendertarget::get_texture(gs::texture& tex) {
tex = GS::Texture(GetTextureObject(), false); tex = gs::texture(get_object(), false);
} }
void GS::RenderTarget::GetTexture(std::shared_ptr<GS::Texture>& tex) { void gs::rendertarget::get_texture(std::shared_ptr<gs::texture>& tex) {
tex = std::make_shared<GS::Texture>(GetTextureObject(), false); tex = std::make_shared<gs::texture>(get_object(), false);
} }
void GS::RenderTarget::GetTexture(std::unique_ptr<GS::Texture>& tex) { void gs::rendertarget::get_texture(std::unique_ptr<gs::texture>& tex) {
tex = std::make_unique<GS::Texture>(GetTextureObject(), false); tex = std::make_unique<gs::texture>(get_object(), false);
} }
GS::RenderTargetOp::RenderTargetOp(GS::RenderTarget* rt, uint32_t width, uint32_t height) : m_renderTarget(rt) { gs::rendertarget_op::rendertarget_op(gs::rendertarget* rt, uint32_t width, uint32_t height) : m_renderTarget(rt) {
if (m_renderTarget == nullptr) if (m_renderTarget == nullptr)
throw std::invalid_argument("rt"); throw std::invalid_argument("rt");
if (m_renderTarget->m_isBeingRendered) if (m_renderTarget->m_isBeingRendered)
@ -77,12 +77,12 @@ GS::RenderTargetOp::RenderTargetOp(GS::RenderTarget* rt, uint32_t width, uint32_
m_renderTarget->m_isBeingRendered = true; m_renderTarget->m_isBeingRendered = true;
} }
GS::RenderTargetOp::RenderTargetOp(GS::RenderTargetOp&& r) { gs::rendertarget_op::rendertarget_op(gs::rendertarget_op&& r) {
this->m_renderTarget = r.m_renderTarget; this->m_renderTarget = r.m_renderTarget;
r.m_renderTarget = nullptr; r.m_renderTarget = nullptr;
} }
GS::RenderTargetOp::~RenderTargetOp() { gs::rendertarget_op::~rendertarget_op() {
if (m_renderTarget == nullptr) if (m_renderTarget == nullptr)
return; return;
obs_enter_graphics(); obs_enter_graphics();

View file

@ -28,38 +28,38 @@ extern "C" {
#pragma warning( pop ) #pragma warning( pop )
} }
namespace GS { namespace gs {
class RenderTarget { class rendertarget {
friend class RenderTargetOp; friend class rendertarget_op;
public: public:
RenderTarget(gs_color_format colorFormat, gs_zstencil_format zsFormat); rendertarget(gs_color_format colorFormat, gs_zstencil_format zsFormat);
virtual ~RenderTarget(); virtual ~rendertarget();
gs_texture_t* GetTextureObject(); gs_texture_t* get_object();
void GetTexture(GS::Texture& tex); void get_texture(gs::texture& tex);
void GetTexture(std::shared_ptr<GS::Texture>& tex); void get_texture(std::shared_ptr<gs::texture>& tex);
void GetTexture(std::unique_ptr<GS::Texture>& tex); void get_texture(std::unique_ptr<gs::texture>& tex);
GS::RenderTargetOp Render(uint32_t width, uint32_t height); gs::rendertarget_op render(uint32_t width, uint32_t height);
protected: protected:
gs_texrender_t* m_renderTarget; gs_texrender_t* m_renderTarget;
bool m_isBeingRendered; bool m_isBeingRendered;
}; };
class RenderTargetOp { class rendertarget_op {
public: public:
RenderTargetOp(GS::RenderTarget* rt, uint32_t width, uint32_t height); rendertarget_op(gs::rendertarget* rt, uint32_t width, uint32_t height);
virtual ~RenderTargetOp(); virtual ~rendertarget_op();
// Move Constructor // Move Constructor
RenderTargetOp(GS::RenderTargetOp&&); rendertarget_op(gs::rendertarget_op&&);
// Copy Constructor // Copy Constructor
RenderTargetOp(const GS::RenderTargetOp&) = delete; rendertarget_op(const gs::rendertarget_op&) = delete;
RenderTargetOp& operator=(const GS::RenderTargetOp& r) = delete; rendertarget_op& operator=(const gs::rendertarget_op& r) = delete;
protected: protected:
GS::RenderTarget* m_renderTarget; gs::rendertarget* m_renderTarget;
}; };
} }

View file

@ -19,77 +19,77 @@
#include "gs-sampler.h" #include "gs-sampler.h"
GS::Sampler::Sampler() { gs::sampler::sampler() {
m_dirty = true; m_dirty = true;
m_samplerInfo = { GS_FILTER_LINEAR, GS_ADDRESS_WRAP, GS_ADDRESS_WRAP, GS_ADDRESS_WRAP, 1, 0 }; m_samplerInfo = { GS_FILTER_LINEAR, GS_ADDRESS_WRAP, GS_ADDRESS_WRAP, GS_ADDRESS_WRAP, 1, 0 };
m_samplerState = nullptr; m_samplerState = nullptr;
} }
GS::Sampler::~Sampler() { gs::sampler::~sampler() {
if (m_samplerState) if (m_samplerState)
gs_samplerstate_destroy(m_samplerState); gs_samplerstate_destroy(m_samplerState);
} }
void GS::Sampler::SetSampleFilter(gs_sample_filter v) { void gs::sampler::set_filter(gs_sample_filter v) {
m_dirty = true; m_dirty = true;
m_samplerInfo.filter = v; m_samplerInfo.filter = v;
} }
gs_sample_filter GS::Sampler::GetSampleFilter() { gs_sample_filter gs::sampler::get_filter() {
return m_samplerInfo.filter; return m_samplerInfo.filter;
} }
void GS::Sampler::SetAddressModeU(gs_address_mode v) { void gs::sampler::set_address_mode_u(gs_address_mode v) {
m_dirty = true; m_dirty = true;
m_samplerInfo.address_u = v; m_samplerInfo.address_u = v;
} }
gs_address_mode GS::Sampler::GetAddressModeU() { gs_address_mode gs::sampler::get_address_mode_u() {
return m_samplerInfo.address_u; return m_samplerInfo.address_u;
} }
void GS::Sampler::SetAddressModeV(gs_address_mode v) { void gs::sampler::set_address_mode_v(gs_address_mode v) {
m_dirty = true; m_dirty = true;
m_samplerInfo.address_v = v; m_samplerInfo.address_v = v;
} }
gs_address_mode GS::Sampler::GetAddressModeV() { gs_address_mode gs::sampler::get_address_mode_v() {
return m_samplerInfo.address_v; return m_samplerInfo.address_v;
} }
void GS::Sampler::SetAddressModeW(gs_address_mode v) { void gs::sampler::set_address_mode_w(gs_address_mode v) {
m_dirty = true; m_dirty = true;
m_samplerInfo.address_w = v; m_samplerInfo.address_w = v;
} }
gs_address_mode GS::Sampler::GetAddressModeW() { gs_address_mode gs::sampler::get_address_mode_w() {
return m_samplerInfo.address_w; return m_samplerInfo.address_w;
} }
void GS::Sampler::SetMaxAnisotropy(int v) { void gs::sampler::set_max_anisotropy(int v) {
m_dirty = true; m_dirty = true;
m_samplerInfo.max_anisotropy = v; m_samplerInfo.max_anisotropy = v;
} }
int GS::Sampler::GetMaxAnisotropy() { int gs::sampler::get_max_anisotropy() {
return m_samplerInfo.max_anisotropy; return m_samplerInfo.max_anisotropy;
} }
void GS::Sampler::SetBorderColor(uint32_t v) { void gs::sampler::set_border_color(uint32_t v) {
m_dirty = true; m_dirty = true;
m_samplerInfo.border_color = v; m_samplerInfo.border_color = v;
} }
void GS::Sampler::SetBorderColor(uint8_t r, uint8_t g, uint8_t b, uint8_t a) { void gs::sampler::set_border_color(uint8_t r, uint8_t g, uint8_t b, uint8_t a) {
m_dirty = true; m_dirty = true;
m_samplerInfo.border_color = a << 24 | r << 16 | g << 8 | b; m_samplerInfo.border_color = a << 24 | r << 16 | g << 8 | b;
} }
uint32_t GS::Sampler::GetBorderColor() { uint32_t gs::sampler::get_border_color() {
return m_samplerInfo.border_color; return m_samplerInfo.border_color;
} }
uint8_t GS::Sampler::GetBorderColor(bool r, bool g, bool b, bool a) { uint8_t gs::sampler::get_border_color(bool r, bool g, bool b, bool a) {
if (a) if (a)
return (m_samplerInfo.border_color >> 24) & 0xFF; return (m_samplerInfo.border_color >> 24) & 0xFF;
if (r) if (r)
@ -101,15 +101,15 @@ uint8_t GS::Sampler::GetBorderColor(bool r, bool g, bool b, bool a) {
return 0; return 0;
} }
gs_sampler_state* GS::Sampler::Refresh() { gs_sampler_state* gs::sampler::refresh() {
gs_samplerstate_destroy(m_samplerState); gs_samplerstate_destroy(m_samplerState);
m_samplerState = gs_samplerstate_create(&m_samplerInfo); m_samplerState = gs_samplerstate_create(&m_samplerInfo);
m_dirty = false; m_dirty = false;
return m_samplerState; return m_samplerState;
} }
gs_sampler_state* GS::Sampler::GetObject() { gs_sampler_state* gs::sampler::get_object() {
if (m_dirty) if (m_dirty)
return Refresh(); return refresh();
return m_samplerState; return m_samplerState;
} }

View file

@ -26,35 +26,35 @@ extern "C" {
#pragma warning( pop ) #pragma warning( pop )
} }
namespace GS { namespace gs {
class Sampler { class sampler {
public: public:
Sampler(); sampler();
~Sampler(); ~sampler();
void SetSampleFilter(gs_sample_filter v); void set_filter(gs_sample_filter v);
gs_sample_filter GetSampleFilter(); gs_sample_filter get_filter();
void SetAddressModeU(gs_address_mode v); void set_address_mode_u(gs_address_mode v);
gs_address_mode GetAddressModeU(); gs_address_mode get_address_mode_u();
void SetAddressModeV(gs_address_mode v); void set_address_mode_v(gs_address_mode v);
gs_address_mode GetAddressModeV(); gs_address_mode get_address_mode_v();
void SetAddressModeW(gs_address_mode v); void set_address_mode_w(gs_address_mode v);
gs_address_mode GetAddressModeW(); gs_address_mode get_address_mode_w();
void SetMaxAnisotropy(int v); void set_max_anisotropy(int v);
int GetMaxAnisotropy(); int get_max_anisotropy();
void SetBorderColor(uint32_t v); void set_border_color(uint32_t v);
void SetBorderColor(uint8_t r, uint8_t g, uint8_t b, uint8_t a); void set_border_color(uint8_t r, uint8_t g, uint8_t b, uint8_t a);
uint32_t GetBorderColor(); uint32_t get_border_color();
uint8_t GetBorderColor(bool r, bool g, bool b, bool a); uint8_t get_border_color(bool r, bool g, bool b, bool a);
gs_sampler_state* Refresh(); gs_sampler_state* refresh();
gs_sampler_state* GetObject(); gs_sampler_state* get_object();
private: private:
bool m_dirty; bool m_dirty;

View file

@ -29,7 +29,7 @@ extern "C" {
#pragma warning( pop ) #pragma warning( pop )
} }
GS::Texture::Texture(uint32_t width, uint32_t height, gs_color_format format, uint32_t mip_levels, const uint8_t **mip_data, uint32_t flags) { gs::texture::texture(uint32_t width, uint32_t height, gs_color_format format, uint32_t mip_levels, const uint8_t **mip_data, uint32_t flags) {
if (width == 0) if (width == 0)
throw std::logic_error("width must be at least 1"); throw std::logic_error("width must be at least 1");
if (height == 0) if (height == 0)
@ -39,7 +39,7 @@ GS::Texture::Texture(uint32_t width, uint32_t height, gs_color_format format, ui
if (!mip_data) if (!mip_data)
throw std::logic_error("mip_data is invalid"); throw std::logic_error("mip_data is invalid");
if (mip_levels > 1 || flags & Flags::BuildMipMaps) { if (mip_levels > 1 || flags & flags::BuildMipMaps) {
bool isPOT = (pow(2, (int64_t)floor(log(width) / log(2))) == width) bool isPOT = (pow(2, (int64_t)floor(log(width) / log(2))) == width)
&& (pow(2, (int64_t)floor(log(height) / log(2))) == height); && (pow(2, (int64_t)floor(log(height) / log(2))) == height);
if (!isPOT) if (!isPOT)
@ -47,14 +47,14 @@ GS::Texture::Texture(uint32_t width, uint32_t height, gs_color_format format, ui
} }
obs_enter_graphics(); obs_enter_graphics();
m_texture = gs_texture_create(width, height, format, mip_levels, mip_data, (flags & Flags::Dynamic) ? GS_DYNAMIC : 0 | (flags & Flags::BuildMipMaps) ? GS_BUILD_MIPMAPS : 0); m_texture = gs_texture_create(width, height, format, mip_levels, mip_data, (flags & flags::Dynamic) ? GS_DYNAMIC : 0 | (flags & flags::BuildMipMaps) ? GS_BUILD_MIPMAPS : 0);
obs_leave_graphics(); obs_leave_graphics();
if (!m_texture) if (!m_texture)
throw std::runtime_error("Failed to create texture."); throw std::runtime_error("Failed to create texture.");
} }
GS::Texture::Texture(uint32_t width, uint32_t height, uint32_t depth, gs_color_format format, uint32_t mip_levels, const uint8_t **mip_data, uint32_t flags) { gs::texture::texture(uint32_t width, uint32_t height, uint32_t depth, gs_color_format format, uint32_t mip_levels, const uint8_t **mip_data, uint32_t flags) {
if (width == 0) if (width == 0)
throw std::logic_error("width must be at least 1"); throw std::logic_error("width must be at least 1");
if (height == 0) if (height == 0)
@ -66,7 +66,7 @@ GS::Texture::Texture(uint32_t width, uint32_t height, uint32_t depth, gs_color_f
if (!mip_data) if (!mip_data)
throw std::logic_error("mip_data is invalid"); throw std::logic_error("mip_data is invalid");
if (mip_levels > 1 || flags & Flags::BuildMipMaps) { if (mip_levels > 1 || flags & flags::BuildMipMaps) {
bool isPOT = (pow(2, (int64_t)floor(log(width) / log(2))) == width) bool isPOT = (pow(2, (int64_t)floor(log(width) / log(2))) == width)
&& (pow(2, (int64_t)floor(log(height) / log(2))) == height) && (pow(2, (int64_t)floor(log(height) / log(2))) == height)
&& (pow(2, (int64_t)floor(log(depth) / log(2))) == depth); && (pow(2, (int64_t)floor(log(depth) / log(2))) == depth);
@ -75,14 +75,14 @@ GS::Texture::Texture(uint32_t width, uint32_t height, uint32_t depth, gs_color_f
} }
obs_enter_graphics(); obs_enter_graphics();
m_texture = gs_voltexture_create(width, height, depth, format, mip_levels, mip_data, (flags & Flags::Dynamic) ? GS_DYNAMIC : 0 | (flags & Flags::BuildMipMaps) ? GS_BUILD_MIPMAPS : 0); m_texture = gs_voltexture_create(width, height, depth, format, mip_levels, mip_data, (flags & flags::Dynamic) ? GS_DYNAMIC : 0 | (flags & flags::BuildMipMaps) ? GS_BUILD_MIPMAPS : 0);
obs_leave_graphics(); obs_leave_graphics();
if (!m_texture) if (!m_texture)
throw std::runtime_error("Failed to create texture."); throw std::runtime_error("Failed to create texture.");
} }
GS::Texture::Texture(uint32_t size, gs_color_format format, uint32_t mip_levels, const uint8_t **mip_data, uint32_t flags) { gs::texture::texture(uint32_t size, gs_color_format format, uint32_t mip_levels, const uint8_t **mip_data, uint32_t flags) {
if (size == 0) if (size == 0)
throw std::logic_error("size must be at least 1"); throw std::logic_error("size must be at least 1");
if (mip_levels == 0) if (mip_levels == 0)
@ -90,21 +90,21 @@ GS::Texture::Texture(uint32_t size, gs_color_format format, uint32_t mip_levels,
if (!mip_data) if (!mip_data)
throw std::logic_error("mip_data is invalid"); throw std::logic_error("mip_data is invalid");
if (mip_levels > 1 || flags & Flags::BuildMipMaps) { if (mip_levels > 1 || flags & flags::BuildMipMaps) {
bool isPOT = (pow(2, (int64_t)floor(log(size) / log(2))) == size); bool isPOT = (pow(2, (int64_t)floor(log(size) / log(2))) == size);
if (!isPOT) if (!isPOT)
throw std::logic_error("mip mapping requires power of two dimensions"); throw std::logic_error("mip mapping requires power of two dimensions");
} }
obs_enter_graphics(); obs_enter_graphics();
m_texture = gs_cubetexture_create(size, format, mip_levels, mip_data, (flags & Flags::Dynamic) ? GS_DYNAMIC : 0 | (flags & Flags::BuildMipMaps) ? GS_BUILD_MIPMAPS : 0); m_texture = gs_cubetexture_create(size, format, mip_levels, mip_data, (flags & flags::Dynamic) ? GS_DYNAMIC : 0 | (flags & flags::BuildMipMaps) ? GS_BUILD_MIPMAPS : 0);
obs_leave_graphics(); obs_leave_graphics();
if (!m_texture) if (!m_texture)
throw std::runtime_error("Failed to create texture."); throw std::runtime_error("Failed to create texture.");
} }
GS::Texture::Texture(std::string file) { gs::texture::texture(std::string file) {
struct stat st; struct stat st;
if (os_stat(file.c_str(), &st) != 0) if (os_stat(file.c_str(), &st) != 0)
throw std::ios_base::failure(file); throw std::ios_base::failure(file);
@ -117,7 +117,7 @@ GS::Texture::Texture(std::string file) {
throw std::runtime_error("Failed to load texture."); throw std::runtime_error("Failed to load texture.");
} }
GS::Texture::Texture(Texture& other) { gs::texture::texture(texture& other) {
throw std::logic_error("not yet implemented"); throw std::logic_error("not yet implemented");
//obs_enter_graphics(); //obs_enter_graphics();
//switch (gs_get_texture_type(other.m_texture)) { //switch (gs_get_texture_type(other.m_texture)) {
@ -177,7 +177,7 @@ GS::Texture::Texture(Texture& other) {
//obs_leave_graphics(); //obs_leave_graphics();
} }
GS::Texture::~Texture() { gs::texture::~texture() {
if (m_isOwner && m_texture) { if (m_isOwner && m_texture) {
obs_enter_graphics(); obs_enter_graphics();
switch (gs_get_texture_type(m_texture)) { switch (gs_get_texture_type(m_texture)) {
@ -196,12 +196,12 @@ GS::Texture::~Texture() {
m_texture = nullptr; m_texture = nullptr;
} }
void GS::Texture::Load(int unit) { void gs::texture::load(int unit) {
obs_enter_graphics(); obs_enter_graphics();
gs_load_texture(m_texture, unit); gs_load_texture(m_texture, unit);
obs_leave_graphics(); obs_leave_graphics();
} }
gs_texture_t* GS::Texture::GetObject() { gs_texture_t* gs::texture::get_object() {
return m_texture; return m_texture;
} }

View file

@ -27,20 +27,20 @@ extern "C" {
#pragma warning( pop ) #pragma warning( pop )
} }
namespace GS { namespace gs {
class Texture { class texture {
protected: protected:
gs_texture_t * m_texture; gs_texture_t * m_texture;
bool m_isOwner = true; bool m_isOwner = true;
public: public:
enum Type : uint8_t { enum type : uint8_t {
Normal, Normal,
Volume, Volume,
Cube Cube
}; };
enum Flags : uint32_t { enum flags : uint32_t {
Dynamic, Dynamic,
BuildMipMaps, BuildMipMaps,
}; };
@ -58,7 +58,7 @@ namespace GS {
* \param mip_data * \param mip_data
* \param flags * \param flags
*/ */
Texture(uint32_t width, uint32_t height, gs_color_format format, uint32_t mip_levels, texture(uint32_t width, uint32_t height, gs_color_format format, uint32_t mip_levels,
const uint8_t **mip_data, uint32_t flags); const uint8_t **mip_data, uint32_t flags);
/*! /*!
@ -74,7 +74,7 @@ namespace GS {
* \param mip_data * \param mip_data
* \param flags * \param flags
*/ */
Texture(uint32_t width, uint32_t height, uint32_t depth, gs_color_format format, uint32_t mip_levels, texture(uint32_t width, uint32_t height, uint32_t depth, gs_color_format format, uint32_t mip_levels,
const uint8_t **mip_data, uint32_t flags); const uint8_t **mip_data, uint32_t flags);
/*! /*!
@ -88,7 +88,7 @@ namespace GS {
* \param mip_data * \param mip_data
* \param flags * \param flags
*/ */
Texture(uint32_t size, gs_color_format format, uint32_t mip_levels, const uint8_t **mip_data, texture(uint32_t size, gs_color_format format, uint32_t mip_levels, const uint8_t **mip_data,
uint32_t flags); uint32_t flags);
/*! /*!
@ -101,12 +101,12 @@ namespace GS {
* *
* \param file File to create the texture from. * \param file File to create the texture from.
*/ */
Texture(std::string file); texture(std::string file);
/*! /*!
* \brief Create a texture from an existing gs_texture_t object. * \brief Create a texture from an existing gs_texture_t object.
*/ */
Texture(gs_texture_t* tex, bool takeOwnership = false) : m_texture(tex), m_isOwner(takeOwnership) {} texture(gs_texture_t* tex, bool takeOwnership = false) : m_texture(tex), m_isOwner(takeOwnership) {}
/*! /*!
* \brief Copy an existing texture * \brief Copy an existing texture
@ -117,12 +117,12 @@ namespace GS {
* \param other * \param other
* \return * \return
*/ */
Texture(Texture& other); texture(texture& other);
/*! /*!
* \brief Default constructor * \brief Default constructor
*/ */
Texture() : m_texture(nullptr) {} texture() : m_texture(nullptr) {}
/*! /*!
* \brief Destructor * \brief Destructor
@ -131,7 +131,7 @@ namespace GS {
* *
* \return * \return
*/ */
virtual ~Texture(); virtual ~texture();
/*! /*!
* \brief * \brief
@ -141,7 +141,7 @@ namespace GS {
* \param unit * \param unit
* \return void * \return void
*/ */
void Load(int unit); void load(int unit);
/*! /*!
* \brief * \brief
@ -150,6 +150,6 @@ namespace GS {
* *
* \return gs_texture_t* * \return gs_texture_t*
*/ */
gs_texture_t* GetObject(); gs_texture_t* get_object();
}; };
} }

View file

@ -20,7 +20,7 @@
#include "gs-vertex.h" #include "gs-vertex.h"
#include "util-memory.h" #include "util-memory.h"
GS::Vertex::Vertex() { gs::vertex::vertex() {
this->hasStore = true; this->hasStore = true;
this->store = util::malloc_aligned(16, sizeof(vec3) * 3 + sizeof(uint32_t) + sizeof(vec4)*MAXIMUM_UVW_LAYERS); this->store = util::malloc_aligned(16, sizeof(vec3) * 3 + sizeof(uint32_t) + sizeof(vec4)*MAXIMUM_UVW_LAYERS);
this->position = reinterpret_cast<vec3*>(store); this->position = reinterpret_cast<vec3*>(store);
@ -32,12 +32,12 @@ GS::Vertex::Vertex() {
this->color = reinterpret_cast<uint32_t*>(reinterpret_cast<char*>(store) + (16 * (3 + MAXIMUM_UVW_LAYERS))); this->color = reinterpret_cast<uint32_t*>(reinterpret_cast<char*>(store) + (16 * (3 + MAXIMUM_UVW_LAYERS)));
} }
GS::Vertex::~Vertex() { gs::vertex::~vertex() {
if (hasStore) if (hasStore)
util::free_aligned(store); util::free_aligned(store);
} }
GS::Vertex::Vertex(vec3* p, vec3* n, vec3* t, uint32_t* col, vec4* uvs[MAXIMUM_UVW_LAYERS]) gs::vertex::vertex(vec3* p, vec3* n, vec3* t, uint32_t* col, vec4* uvs[MAXIMUM_UVW_LAYERS])
: position(p), normal(n), tangent(t), color(col) { : position(p), normal(n), tangent(t), color(col) {
if (uvs != nullptr) { if (uvs != nullptr) {
for (size_t idx = 0; idx < MAXIMUM_UVW_LAYERS; idx++) { for (size_t idx = 0; idx < MAXIMUM_UVW_LAYERS; idx++) {

View file

@ -28,17 +28,17 @@ extern "C" {
#pragma warning( pop ) #pragma warning( pop )
} }
namespace GS { namespace gs {
struct Vertex { struct vertex {
vec3* position; vec3* position;
vec3* normal; vec3* normal;
vec3* tangent; vec3* tangent;
uint32_t* color; uint32_t* color;
vec4* uv[MAXIMUM_UVW_LAYERS]; vec4* uv[MAXIMUM_UVW_LAYERS];
Vertex(); vertex();
Vertex(vec3* p, vec3* n, vec3* t, uint32_t* col, vec4* uv[MAXIMUM_UVW_LAYERS]); vertex(vec3* p, vec3* n, vec3* t, uint32_t* col, vec4* uv[MAXIMUM_UVW_LAYERS]);
~Vertex(); ~vertex();
private: private:
bool hasStore; bool hasStore;

View file

@ -27,7 +27,7 @@ extern "C" {
#pragma warning( pop ) #pragma warning( pop )
} }
GS::VertexBuffer::~VertexBuffer() { gs::vertex_buffer::~vertex_buffer() {
if (m_positions) { if (m_positions) {
util::free_aligned(m_positions); util::free_aligned(m_positions);
m_positions = nullptr; m_positions = nullptr;
@ -69,7 +69,7 @@ GS::VertexBuffer::~VertexBuffer() {
} }
} }
GS::VertexBuffer::VertexBuffer(uint32_t maximumVertices) { gs::vertex_buffer::vertex_buffer(uint32_t maximumVertices) {
if (maximumVertices > MAXIMUM_VERTICES) { if (maximumVertices > MAXIMUM_VERTICES) {
throw std::out_of_range("maximumVertices out of range"); throw std::out_of_range("maximumVertices out of range");
} }
@ -109,10 +109,10 @@ GS::VertexBuffer::VertexBuffer(uint32_t maximumVertices) {
} }
} }
GS::VertexBuffer::VertexBuffer(gs_vertbuffer_t* vb) { gs::vertex_buffer::vertex_buffer(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); vertex_buffer((uint32_t)vbd->num);
this->SetUVLayers((uint32_t)vbd->num_tex); this->set_uv_layers((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));
@ -141,7 +141,7 @@ GS::VertexBuffer::VertexBuffer(gs_vertbuffer_t* vb) {
} }
GS::VertexBuffer::VertexBuffer(VertexBuffer const& other) : VertexBuffer(other.m_capacity) { gs::vertex_buffer::vertex_buffer(vertex_buffer const& other) : vertex_buffer(other.m_capacity) {
// Copy Constructor // Copy Constructor
std::memcpy(m_positions, other.m_positions, m_capacity * sizeof(vec3)); std::memcpy(m_positions, other.m_positions, m_capacity * sizeof(vec3));
std::memcpy(m_normals, other.m_normals, m_capacity * sizeof(vec3)); std::memcpy(m_normals, other.m_normals, m_capacity * sizeof(vec3));
@ -152,7 +152,7 @@ GS::VertexBuffer::VertexBuffer(VertexBuffer const& other) : VertexBuffer(other.m
} }
} }
GS::VertexBuffer::VertexBuffer(VertexBuffer const&& other) { gs::vertex_buffer::vertex_buffer(vertex_buffer const&& other) {
// Move Constructor // Move Constructor
m_capacity = other.m_capacity; m_capacity = other.m_capacity;
m_size = other.m_size; m_size = other.m_size;
@ -168,7 +168,7 @@ GS::VertexBuffer::VertexBuffer(VertexBuffer const&& other) {
m_layerdata = other.m_layerdata; m_layerdata = other.m_layerdata;
} }
void GS::VertexBuffer::operator=(VertexBuffer const&& other) { void gs::vertex_buffer::operator=(vertex_buffer const&& other) {
// Move Assignment // Move Assignment
/// First self-destruct (semi-destruct itself). /// First self-destruct (semi-destruct itself).
if (m_positions) { if (m_positions) {
@ -226,69 +226,69 @@ void GS::VertexBuffer::operator=(VertexBuffer const&& other) {
m_layerdata = other.m_layerdata; m_layerdata = other.m_layerdata;
} }
void GS::VertexBuffer::Resize(uint32_t new_size) { void gs::vertex_buffer::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;
} }
uint32_t GS::VertexBuffer::Size() { uint32_t gs::vertex_buffer::size() {
return m_size; return m_size;
} }
bool GS::VertexBuffer::Empty() { bool gs::vertex_buffer::empty() {
return m_size == 0; return m_size == 0;
} }
const GS::Vertex GS::VertexBuffer::At(uint32_t idx) { const gs::vertex gs::vertex_buffer::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(&m_positions[idx], &m_normals[idx], &m_tangents[idx], &m_colors[idx], nullptr); gs::vertex vtx(&m_positions[idx], &m_normals[idx], &m_tangents[idx], &m_colors[idx], nullptr);
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[](uint32_t const pos) { const gs::vertex gs::vertex_buffer::operator[](uint32_t const pos) {
return At(pos); return at(pos);
} }
void GS::VertexBuffer::SetUVLayers(uint32_t layers) { void gs::vertex_buffer::set_uv_layers(uint32_t layers) {
m_layers = layers; m_layers = layers;
} }
uint32_t GS::VertexBuffer::GetUVLayers() { uint32_t gs::vertex_buffer::get_uv_layers() {
return m_layers; return m_layers;
} }
vec3* GS::VertexBuffer::GetPositions() { vec3* gs::vertex_buffer::get_positions() {
return m_positions; return m_positions;
} }
vec3* GS::VertexBuffer::GetNormals() { vec3* gs::vertex_buffer::get_normals() {
return m_normals; return m_normals;
} }
vec3* GS::VertexBuffer::GetTangents() { vec3* gs::vertex_buffer::get_tangents() {
return m_tangents; return m_tangents;
} }
uint32_t* GS::VertexBuffer::GetColors() { uint32_t* gs::vertex_buffer::get_colors() {
return m_colors; return m_colors;
} }
vec4* GS::VertexBuffer::GetUVLayer(size_t idx) { vec4* gs::vertex_buffer::get_uv_layer(size_t idx) {
if ((idx < 0) || (idx >= m_layers)) { if ((idx < 0) || (idx >= m_layers)) {
throw std::out_of_range("idx out of range"); throw std::out_of_range("idx out of range");
} }
return m_uvs[idx]; return m_uvs[idx];
} }
gs_vertbuffer_t* GS::VertexBuffer::Update(bool refreshGPU) { gs_vertbuffer_t* gs::vertex_buffer::update(bool refreshGPU) {
if (!refreshGPU) if (!refreshGPU)
return m_vertexbuffer; return m_vertexbuffer;
@ -326,6 +326,6 @@ gs_vertbuffer_t* GS::VertexBuffer::Update(bool refreshGPU) {
return m_vertexbuffer; return m_vertexbuffer;
} }
gs_vertbuffer_t* GS::VertexBuffer::Update() { gs_vertbuffer_t* gs::vertex_buffer::update() {
return Update(true); return update(true);
} }

View file

@ -30,25 +30,25 @@ extern "C" {
#pragma warning( pop ) #pragma warning( pop )
} }
namespace GS { namespace gs {
class VertexBuffer { class vertex_buffer {
public: public:
#pragma region Constructor & Destructor #pragma region Constructor & Destructor
virtual ~VertexBuffer(); virtual ~vertex_buffer();
/*! /*!
* \brief Create a Vertex Buffer with a specific number of Vertices. * \brief Create a Vertex Buffer with a specific number of Vertices.
* *
* \param maximumVertices Maximum amount of vertices to store. * \param maximumVertices Maximum amount of vertices to store.
*/ */
VertexBuffer(uint32_t maximumVertices); vertex_buffer(uint32_t maximumVertices);
/*! /*!
* \brief Create a Vertex Buffer with the maximum number of Vertices. * \brief Create a Vertex Buffer with the maximum number of Vertices.
* *
* \param maximumVertices Maximum amount of vertices to store. * \param maximumVertices Maximum amount of vertices to store.
*/ */
VertexBuffer() : VertexBuffer(MAXIMUM_VERTICES) {}; vertex_buffer() : vertex_buffer(MAXIMUM_VERTICES) {};
/*! /*!
* \brief Create a copy of a Vertex Buffer * \brief Create a copy of a Vertex Buffer
@ -56,7 +56,7 @@ namespace GS {
* *
* \param other The Vertex Buffer to copy * \param other The Vertex Buffer to copy
*/ */
VertexBuffer(gs_vertbuffer_t* other); vertex_buffer(gs_vertbuffer_t* other);
#pragma endregion Constructor & Destructor #pragma endregion Constructor & Destructor
@ -69,7 +69,7 @@ namespace GS {
* *
* \param other * \param other
*/ */
VertexBuffer(VertexBuffer const& other); vertex_buffer(vertex_buffer const& other);
/*! /*!
* \brief Copy Assignment * \brief Copy Assignment
@ -77,7 +77,7 @@ namespace GS {
* *
* \param other * \param other
*/ */
void operator=(VertexBuffer const& other) = delete; void operator=(vertex_buffer const& other) = delete;
// Move Constructor & Assignments // Move Constructor & Assignments
@ -87,7 +87,7 @@ namespace GS {
* *
* \param other * \param other
*/ */
VertexBuffer(VertexBuffer const&& other); vertex_buffer(vertex_buffer const&& other);
/*! /*!
* \brief Move Assignment * \brief Move Assignment
@ -95,24 +95,24 @@ namespace GS {
* *
* \param other * \param other
*/ */
void operator=(VertexBuffer const&& other); void operator=(vertex_buffer const&& other);
#pragma endregion Copy/Move Constructors #pragma endregion Copy/Move Constructors
void Resize(uint32_t new_size); void resize(uint32_t new_size);
uint32_t Size(); uint32_t size();
bool Empty(); bool empty();
const GS::Vertex At(uint32_t idx); const gs::vertex at(uint32_t idx);
const GS::Vertex operator[](uint32_t const pos); const gs::vertex operator[](uint32_t const pos);
void SetUVLayers(uint32_t layers); void set_uv_layers(uint32_t layers);
uint32_t GetUVLayers(); uint32_t get_uv_layers();
/*! /*!
* \brief Directly access the positions buffer * \brief Directly access the positions buffer
@ -120,7 +120,7 @@ namespace GS {
* *
* \return A <vec3*> that points at the first vertex's position. * \return A <vec3*> that points at the first vertex's position.
*/ */
vec3* GetPositions(); vec3* get_positions();
/*! /*!
* \brief Directly access the normals buffer * \brief Directly access the normals buffer
@ -128,7 +128,7 @@ namespace GS {
* *
* \return A <vec3*> that points at the first vertex's normal. * \return A <vec3*> that points at the first vertex's normal.
*/ */
vec3* GetNormals(); vec3* get_normals();
/*! /*!
* \brief Directly access the tangents buffer * \brief Directly access the tangents buffer
@ -136,7 +136,7 @@ namespace GS {
* *
* \return A <vec3*> that points at the first vertex's tangent. * \return A <vec3*> that points at the first vertex's tangent.
*/ */
vec3* GetTangents(); vec3* get_tangents();
/*! /*!
* \brief Directly access the colors buffer * \brief Directly access the colors buffer
@ -144,7 +144,7 @@ namespace GS {
* *
* \return A <uint32_t*> that points at the first vertex's color. * \return A <uint32_t*> that points at the first vertex's color.
*/ */
uint32_t* GetColors(); uint32_t* get_colors();
/*! /*!
* \brief Directly access the uv buffer * \brief Directly access the uv buffer
@ -152,12 +152,12 @@ namespace GS {
* *
* \return A <vec4*> that points at the first vertex's uv. * \return A <vec4*> that points at the first vertex's uv.
*/ */
vec4* GetUVLayer(size_t idx); vec4* get_uv_layer(size_t idx);
#pragma region Update / Grab GS object #pragma region Update / Grab GS object
gs_vertbuffer_t* Update(); gs_vertbuffer_t* update();
gs_vertbuffer_t* Update(bool refreshGPU); gs_vertbuffer_t* update(bool refreshGPU);
#pragma endregion Update / Grab GS object #pragma endregion Update / Grab GS object
private: private:

View file

@ -203,8 +203,8 @@ Source::Mirror::Mirror(obs_data_t* data, obs_source_t* src) {
m_rescale = false; m_rescale = false;
m_width = m_height = 1; m_width = m_height = 1;
m_renderTargetScale = std::make_unique<GS::RenderTarget>(GS_RGBA, GS_ZS_NONE); m_renderTargetScale = std::make_unique<gs::rendertarget>(GS_RGBA, GS_ZS_NONE);
m_sampler = std::make_shared<GS::Sampler>(); m_sampler = std::make_shared<gs::sampler>();
m_scalingEffect = obs_get_base_effect(obs_base_effect::OBS_EFFECT_DEFAULT); m_scalingEffect = obs_get_base_effect(obs_base_effect::OBS_EFFECT_DEFAULT);
update(data); update(data);
@ -323,7 +323,7 @@ void Source::Mirror::video_render(gs_effect_t* effect) {
sh = obs_source_get_height(m_mirrorSource->GetObject()); sh = obs_source_get_height(m_mirrorSource->GetObject());
// Store original Source Texture // Store original Source Texture
std::shared_ptr<GS::Texture> tex = m_mirrorSource->Render(sw, sh); std::shared_ptr<gs::texture> tex = m_mirrorSource->Render(sw, sh);
gs_eparam_t *scale_param = gs_effect_get_param_by_name(m_scalingEffect, "base_dimension_i"); gs_eparam_t *scale_param = gs_effect_get_param_by_name(m_scalingEffect, "base_dimension_i");
if (scale_param) { if (scale_param) {
@ -337,7 +337,7 @@ void Source::Mirror::video_render(gs_effect_t* effect) {
if (m_keepOriginalSize) { if (m_keepOriginalSize) {
{ {
vec4 black; vec4_zero(&black); vec4 black; vec4_zero(&black);
auto op = m_renderTargetScale->Render(m_width, m_height); auto op = m_renderTargetScale->render(m_width, m_height);
gs_ortho(0, (float_t)m_width, 0, (float_t)m_height, 0, 1); gs_ortho(0, (float_t)m_width, 0, (float_t)m_height, 0, 1);
gs_clear(GS_CLEAR_COLOR, &black, 0, 0); gs_clear(GS_CLEAR_COLOR, &black, 0, 0);
while (gs_effect_loop(m_scalingEffect, "Draw")) { while (gs_effect_loop(m_scalingEffect, "Draw")) {
@ -349,7 +349,7 @@ void Source::Mirror::video_render(gs_effect_t* effect) {
while (gs_effect_loop(obs_get_base_effect(OBS_EFFECT_DEFAULT), "Draw")) { while (gs_effect_loop(obs_get_base_effect(OBS_EFFECT_DEFAULT), "Draw")) {
gs_eparam_t* image = gs_effect_get_param_by_name(obs_get_base_effect(OBS_EFFECT_DEFAULT), "image"); gs_eparam_t* image = gs_effect_get_param_by_name(obs_get_base_effect(OBS_EFFECT_DEFAULT), "image");
gs_effect_set_next_sampler(image, m_sampler->GetObject()); gs_effect_set_next_sampler(image, m_sampler->GetObject());
obs_source_draw(m_renderTargetScale->GetTextureObject(), 0, 0, sw, sh, false); obs_source_draw(m_renderTargetScale->get_object(), 0, 0, sw, sh, false);
} }
} else { } else {
while (gs_effect_loop(m_scalingEffect, "Draw")) { while (gs_effect_loop(m_scalingEffect, "Draw")) {

View file

@ -58,8 +58,8 @@ namespace Source {
bool m_rescale = false; bool m_rescale = false;
bool m_keepOriginalSize = false; bool m_keepOriginalSize = false;
uint32_t m_width, m_height; uint32_t m_width, m_height;
std::unique_ptr<GS::RenderTarget> m_renderTargetScale; std::unique_ptr<gs::rendertarget> m_renderTargetScale;
std::shared_ptr<GS::Sampler> m_sampler; std::shared_ptr<gs::sampler> m_sampler;
gs_effect_t* m_scalingEffect = nullptr; gs_effect_t* m_scalingEffect = nullptr;
std::unique_ptr<gfx::SourceTexture> m_mirrorSource; std::unique_ptr<gfx::SourceTexture> m_mirrorSource;