Changed a bit the mixing process; source color is adjusted with gamma

RGB, not a global blending color.
This commit is contained in:
brunoherbelin
2020-06-05 21:10:52 +02:00
parent 14f7543f02
commit b287949b4a
4 changed files with 20 additions and 10 deletions

View File

@@ -150,8 +150,8 @@ void ImGuiVisitor::visit(Shader &n)
n.color = glm::vec4(1.f, 1.f, 1.f, 1.f); n.color = glm::vec4(1.f, 1.f, 1.f, 1.f);
} }
ImGui::SameLine(0, 10); ImGui::SameLine(0, 10);
ImGui::ColorEdit3("Color", glm::value_ptr(n.color), ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel ) ; // ImGui::ColorEdit3("Color", glm::value_ptr(n.color), ImGuiColorEditFlags_NoInputs | ImGuiColorEditFlags_NoLabel ) ;
ImGui::SameLine(0, 5); // ImGui::SameLine(0, 5);
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
int mode = n.blending; int mode = n.blending;
if (ImGui::Combo("Blending", &mode, "Normal\0Screen\0Inverse\0Addition\0Subtract\0") ) if (ImGui::Combo("Blending", &mode, "Normal\0Screen\0Inverse\0Addition\0Subtract\0") )
@@ -187,6 +187,17 @@ void ImGuiVisitor::visit(ImageProcessingShader &n)
{ {
ImGui::PushID(n.id()); ImGui::PushID(n.id());
if (ImGuiToolkit::ButtonIcon(4, 0)) n.gamma = glm::vec4(1.f, 1.f, 1.f, 1.f);
float g[3] = { n.gamma.x, n.gamma.y, n.gamma.z};
ImGui::SameLine(0, 10);
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
if ( ImGui::SliderFloat3("RGB", g, 1.0, 10.0) )
{
n.gamma.x = g[0];
n.gamma.y = g[1];
n.gamma.z = g[2];
}
if (ImGuiToolkit::ButtonIcon(4, 1)) { if (ImGuiToolkit::ButtonIcon(4, 1)) {
n.brightness = 0.f; n.brightness = 0.f;
n.contrast = 0.f; n.contrast = 0.f;
@@ -205,6 +216,7 @@ void ImGuiVisitor::visit(ImageProcessingShader &n)
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);
ImGui::SliderFloat("Saturation", &n.saturation, -1.0, 1.0); ImGui::SliderFloat("Saturation", &n.saturation, -1.0, 1.0);
if (ImGuiToolkit::ButtonIcon(12, 4)) n.hueshift = 0.f; if (ImGuiToolkit::ButtonIcon(12, 4)) n.hueshift = 0.f;
ImGui::SameLine(0, 10); ImGui::SameLine(0, 10);
ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN); ImGui::SetNextItemWidth(IMGUI_RIGHT_ALIGN);

View File

@@ -173,7 +173,7 @@ void ShadingProgram::checkLinkingErr()
Shader::Shader() : blending(BLEND_OPACITY) Shader::Shader() : blending(BLEND_OPACITY)
{ {
// create unique id // create unique id
auto duration = std::chrono::system_clock::now().time_since_epoch(); auto duration = std::chrono::high_resolution_clock::now().time_since_epoch();
id_ = std::chrono::duration_cast<std::chrono::nanoseconds>(duration).count() % 100000000; id_ = std::chrono::duration_cast<std::chrono::nanoseconds>(duration).count() % 100000000;
program_ = &simpleShadingProgram; program_ = &simpleShadingProgram;
@@ -204,11 +204,11 @@ void Shader::use()
// Blending Function // Blending Function
if ( blending != BLEND_CUSTOM) { if ( blending != BLEND_CUSTOM) {
glEnable(GL_BLEND); glEnable(GL_BLEND);
// glBlendEquation(blending_equation[blending]); glBlendEquation(blending_equation[blending]);
// glBlendFunc(blending_source_function[blending], blending_destination_function[blending]); glBlendFunc(blending_source_function[blending], blending_destination_function[blending]);
glBlendEquationSeparate(blending_equation[blending], GL_MAX); // glBlendEquationSeparate(blending_equation[blending], GL_FUNC_ADD);
glBlendFuncSeparate(blending_source_function[blending], blending_destination_function[blending], GL_ONE_MINUS_SRC_ALPHA, GL_ZERO); // glBlendFuncSeparate(blending_source_function[blending], blending_destination_function[blending], GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
} }
else else

View File

@@ -44,11 +44,9 @@ Source::Source() : initialized_(false), need_update_(true)
frame->translation_.z = 0.1; frame->translation_.z = 0.1;
frame->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f); frame->color = glm::vec4( COLOR_HIGHLIGHT_SOURCE, 1.f);
overlays_[View::MIXING]->attach(frame); overlays_[View::MIXING]->attach(frame);
Icon *center = new Icon(Icon::GENERIC); Icon *center = new Icon(Icon::GENERIC);
center->translation_.z = 0.1; center->translation_.z = 0.1;
overlays_[View::MIXING]->attach(center); overlays_[View::MIXING]->attach(center);
groups_[View::MIXING]->attach(overlays_[View::MIXING]); groups_[View::MIXING]->attach(overlays_[View::MIXING]);
// default geometry nodes // default geometry nodes

View File

@@ -23,7 +23,7 @@ void main()
float maskIntensity = (maskColor.r + maskColor.g + maskColor.b) / 3.0; float maskIntensity = (maskColor.r + maskColor.g + maskColor.b) / 3.0;
float A = textureColor.a * vertexColor.a * color.a * maskIntensity; float A = textureColor.a * vertexColor.a * color.a * maskIntensity;
A *= int(gl_FragCoord.x + gl_FragCoord.y) % 2 > (1 - int(stipple)) ? 0.0 : 1.0; A *= int(gl_FragCoord.x + gl_FragCoord.y) % 2 > (1 - int(stipple)) ? 0.0 : 0.8;
// output RGBA // output RGBA
FragColor = vec4(RGB, A); FragColor = vec4(RGB, A);