Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions include/polyscope/render_image_quantity_base.h
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ class RenderImageQuantityBase : public FloatingQuantity, public FullscreenArtist
void prepareGeometryBuffers();
void addOptionsPopupEntries();
void preparePick();
void setRenderImageUniforms(render::ShaderProgram& program, bool withTonemap = false);
};


Expand Down
4 changes: 2 additions & 2 deletions src/color_image_quantity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ void ColorImageQuantity::showFullscreen() {
BlendMode::AlphaOver); // WARNING: I never really thought through this, may cause problems

// Set uniforms
fullscreenProgram->setUniform("u_transparency", getTransparency());
fullscreenProgram->setUniform("u_textureTransparency", getTransparency());
render::engine->setTonemapUniforms(*fullscreenProgram);

fullscreenProgram->draw();
Expand Down Expand Up @@ -128,7 +128,7 @@ void ColorImageQuantity::showInBillboard(glm::vec3 center, glm::vec3 upVec, glm:

// set uniforms
parent.setStructureUniforms(*billboardProgram);
billboardProgram->setUniform("u_transparency", getTransparency());
billboardProgram->setUniform("u_textureTransparency", getTransparency());
billboardProgram->setUniform("u_billboardCenter", center);
billboardProgram->setUniform("u_billboardUp", upVec);
billboardProgram->setUniform("u_billboardRight", rightVec);
Expand Down
16 changes: 4 additions & 12 deletions src/color_render_image_quantity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,7 @@ void ColorRenderImageQuantity::drawDelayed() {

if (!program) prepare();

// set uniforms
glm::mat4 P = view::getCameraPerspectiveMatrix();
glm::mat4 Pinv = glm::inverse(P);

program->setUniform("u_projMatrix", glm::value_ptr(P));
program->setUniform("u_invProjMatrix", glm::value_ptr(Pinv));
program->setUniform("u_viewport", render::engine->getCurrentViewport());
program->setUniform("u_transparency", transparency.get());
render::engine->setMaterialUniforms(*program, material.get());
setRenderImageUniforms(*program);

// draw
program->draw();
Expand Down Expand Up @@ -69,13 +61,13 @@ void ColorRenderImageQuantity::prepare() {
// clang-format off
program = render::engine->requestShader("TEXTURE_DRAW_RENDERIMAGE_PLAIN",
render::engine->addMaterialRules(material.get(),
{
parent.addStructureRules({
getImageOriginRule(imageOrigin),
hasNormals ? "SHADE_NORMAL_FROM_TEXTURE" : "SHADE_NORMAL_FROM_VIEWPOS_VAR",
"TEXTURE_SHADE_COLOR"
}
})
),
render::ShaderReplacementDefaults::Process);
render::ShaderReplacementDefaults::SceneObjectNoSlice);
// clang-format on

program->setAttribute("a_position", render::engine->screenTrianglesCoords());
Expand Down
15 changes: 4 additions & 11 deletions src/depth_render_image_quantity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,8 @@ void DepthRenderImageQuantity::drawDelayed() {

if (!program) prepare();

// set uniforms
glm::mat4 P = view::getCameraPerspectiveMatrix();
glm::mat4 Pinv = glm::inverse(P);

program->setUniform("u_projMatrix", glm::value_ptr(P));
program->setUniform("u_invProjMatrix", glm::value_ptr(Pinv));
program->setUniform("u_viewport", render::engine->getCurrentViewport());
setRenderImageUniforms(*program);
program->setUniform("u_baseColor", color.get());
program->setUniform("u_transparency", transparency.get());
render::engine->setMaterialUniforms(*program, material.get());

// draw
Expand Down Expand Up @@ -73,13 +66,13 @@ void DepthRenderImageQuantity::prepare() {
// clang-format off
program = render::engine->requestShader("TEXTURE_DRAW_RENDERIMAGE_PLAIN",
render::engine->addMaterialRules(material.get(),
{
parent.addStructureRules({
getImageOriginRule(imageOrigin),
hasNormals ? "SHADE_NORMAL_FROM_TEXTURE" : "SHADE_NORMAL_FROM_VIEWPOS_VAR",
"SHADE_BASECOLOR",
}
})
),
render::ShaderReplacementDefaults::Process);
render::ShaderReplacementDefaults::SceneObjectNoSlice);
// clang-format on

program->setAttribute("a_position", render::engine->screenTrianglesCoords());
Expand Down
5 changes: 3 additions & 2 deletions src/polyscope.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -606,10 +606,11 @@ void renderScene() {
if (!isRedraw) {
// Only on first pass (kinda weird, but works out, and doesn't really matter)
renderSlicePlanes();
render::engine->applyTransparencySettings();
drawStructuresDelayed();
}

render::engine->applyTransparencySettings();
drawStructuresDelayed();

// Composite the result of this pass in to the result buffer
render::engine->sceneBufferFinal->bind();
render::engine->setDepthMode(DepthMode::Disable);
Expand Down
20 changes: 6 additions & 14 deletions src/raw_color_alpha_render_image_quantity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,7 @@ void RawColorAlphaRenderImageQuantity::drawDelayed() {

if (!program) prepare();

// set uniforms
glm::mat4 P = view::getCameraPerspectiveMatrix();
glm::mat4 Pinv = glm::inverse(P);

program->setUniform("u_projMatrix", glm::value_ptr(P));
program->setUniform("u_invProjMatrix", glm::value_ptr(Pinv));
program->setUniform("u_viewport", render::engine->getCurrentViewport());
program->setUniform("u_transparency", transparency.get());
render::engine->setTonemapUniforms(*program);

setRenderImageUniforms(*program, true);

// draw
program->draw();
Expand Down Expand Up @@ -72,10 +63,11 @@ void RawColorAlphaRenderImageQuantity::prepare() {
// applied after compositing.

// Create the sourceProgram
program = render::engine->requestShader("TEXTURE_DRAW_RAW_RENDERIMAGE_PLAIN",
{getImageOriginRule(imageOrigin), "TEXTURE_SHADE_COLORALPHA",
"INVERSE_TONEMAP", getIsPremultiplied() ? "" : "TEXTURE_PREMULTIPLY_OUT"},
render::ShaderReplacementDefaults::Process);
program = render::engine->requestShader(
"TEXTURE_DRAW_RAW_RENDERIMAGE_PLAIN",
parent.addStructureRules({getImageOriginRule(imageOrigin), "TEXTURE_SHADE_COLORALPHA", "INVERSE_TONEMAP",
getIsPremultiplied() ? "" : "TEXTURE_PREMULTIPLY_OUT"}),
render::ShaderReplacementDefaults::SceneObjectNoSlice);

program->setAttribute("a_position", render::engine->screenTrianglesCoords());
program->setTextureFromBuffer("t_depth", depths.getRenderTextureBuffer().get());
Expand Down
19 changes: 6 additions & 13 deletions src/raw_color_render_image_quantity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,7 @@ void RawColorRenderImageQuantity::drawDelayed() {

if (!program) prepare();

// set uniforms
glm::mat4 P = view::getCameraPerspectiveMatrix();
glm::mat4 Pinv = glm::inverse(P);

program->setUniform("u_projMatrix", glm::value_ptr(P));
program->setUniform("u_invProjMatrix", glm::value_ptr(Pinv));
program->setUniform("u_viewport", render::engine->getCurrentViewport());
program->setUniform("u_transparency", transparency.get());
render::engine->setTonemapUniforms(*program);
setRenderImageUniforms(*program, true);

// draw
program->draw();
Expand Down Expand Up @@ -66,10 +58,11 @@ void RawColorRenderImageQuantity::refresh() {
void RawColorRenderImageQuantity::prepare() {

// Create the sourceProgram
program = render::engine->requestShader(
"TEXTURE_DRAW_RAW_RENDERIMAGE_PLAIN",
{getImageOriginRule(imageOrigin), "TEXTURE_SHADE_COLOR", "INVERSE_TONEMAP", "PREMULTIPLY_LIT_COLOR"},
render::ShaderReplacementDefaults::Process);
program =
render::engine->requestShader("TEXTURE_DRAW_RAW_RENDERIMAGE_PLAIN",
parent.addStructureRules({getImageOriginRule(imageOrigin), "TEXTURE_SHADE_COLOR",
"INVERSE_TONEMAP", "PREMULTIPLY_LIT_COLOR"}),
render::ShaderReplacementDefaults::SceneObjectNoSlice);

program->setAttribute("a_position", render::engine->screenTrianglesCoords());
program->setTextureFromBuffer("t_depth", depths.getRenderTextureBuffer().get());
Expand Down
27 changes: 15 additions & 12 deletions src/render/opengl/shaders/texture_draw_shaders.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ const ShaderStageSpecification PLAIN_RENDERIMAGE_TEXTURE_DRAW_FRAG_SHADER = {
{"u_projMatrix", RenderDataType::Matrix44Float},
{"u_invProjMatrix", RenderDataType::Matrix44Float},
{"u_viewport", RenderDataType::Vector4Float},
{"u_transparency", RenderDataType::Float},
{"u_textureTransparency", RenderDataType::Float},
},

// attributes
Expand All @@ -151,7 +151,7 @@ R"(
uniform mat4 u_projMatrix;
uniform mat4 u_invProjMatrix;
uniform vec4 u_viewport;
uniform float u_transparency;
uniform float u_textureTransparency;

in vec2 tCoord;
uniform sampler2D t_depth;
Expand All @@ -167,6 +167,9 @@ R"(

// Fetch values from texture
float depth = texture(t_depth, tCoord).r;

${ GLOBAL_FRAGMENT_FILTER_PREP }$
${ GLOBAL_FRAGMENT_FILTER }$

if(depth > LARGE_FLOAT()) {
discard;
Expand All @@ -192,7 +195,7 @@ R"(
${ GENERATE_LIT_COLOR }$

// Set alpha
float alphaOut = u_transparency;
float alphaOut = u_textureTransparency;
${ GENERATE_ALPHA }$

${ PERTURB_LIT_COLOR }$
Expand All @@ -215,7 +218,7 @@ const ShaderStageSpecification PLAIN_RAW_RENDERIMAGE_TEXTURE_DRAW_FRAG_SHADER =
{"u_projMatrix", RenderDataType::Matrix44Float},
{"u_invProjMatrix", RenderDataType::Matrix44Float},
{"u_viewport", RenderDataType::Vector4Float},
{"u_transparency", RenderDataType::Float},
{"u_textureTransparency", RenderDataType::Float},
},

// attributes
Expand All @@ -233,7 +236,7 @@ R"(
uniform mat4 u_projMatrix;
uniform mat4 u_invProjMatrix;
uniform vec4 u_viewport;
uniform float u_transparency;
uniform float u_textureTransparency;

in vec2 tCoord;
uniform sampler2D t_depth;
Expand Down Expand Up @@ -275,7 +278,7 @@ R"(
${ GENERATE_LIT_COLOR }$

// Set alpha
float alphaOut = u_transparency;
float alphaOut = u_textureTransparency;
${ GENERATE_ALPHA }$

${ PERTURB_LIT_COLOR }$
Expand Down Expand Up @@ -608,14 +611,14 @@ const ShaderReplacementRule TEXTURE_SET_TRANSPARENCY(
/* rule name */ "TEXTURE_SET_TRANSPARENCY",
{ /* replacement sources */
{"FRAG_DECLARATIONS", R"(
uniform float u_transparency;
uniform float u_textureTransparency;
)" },
{"TEXTURE_OUT_ADJUST", R"(
textureOut = vec4(textureOut.rgb, textureOut.a * u_transparency);
textureOut = vec4(textureOut.rgb, textureOut.a * u_textureTransparency);
)"}
},
/* uniforms */ {
{"u_transparency", RenderDataType::Float},
{"u_textureTransparency", RenderDataType::Float},
},
/* attributes */ {},
/* textures */ {}
Expand All @@ -625,14 +628,14 @@ const ShaderReplacementRule TEXTURE_SET_TRANSPARENCY_PREMULTIPLIED(
/* rule name */ "TEXTURE_SET_TRANSPARENCY_PREMULTIPLIED",
{ /* replacement sources */
{"FRAG_DECLARATIONS", R"(
uniform float u_transparency;
uniform float u_textureTransparency;
)" },
{"TEXTURE_OUT_ADJUST", R"(
textureOut *= u_transparency;
textureOut *= u_textureTransparency;
)"}
},
/* uniforms */ {
{"u_transparency", RenderDataType::Float},
{"u_textureTransparency", RenderDataType::Float},
},
/* attributes */ {},
/* textures */ {}
Expand Down
35 changes: 26 additions & 9 deletions src/render_image_quantity_base.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,24 @@ void RenderImageQuantityBase::updateBaseBuffers(const std::vector<float>& newDep
requestRedraw();
}

void RenderImageQuantityBase::setRenderImageUniforms(render::ShaderProgram& program, bool withTonemap) {
parent.setStructureUniforms(program);

glm::mat4 P = view::getCameraPerspectiveMatrix();
glm::mat4 Pinv = glm::inverse(P);

program.setUniform("u_projMatrix", glm::value_ptr(P));
program.setUniform("u_invProjMatrix", glm::value_ptr(Pinv));
program.setUniform("u_viewport", render::engine->getCurrentViewport());
program.setUniform("u_textureTransparency", transparency.get());
if (program.hasUniform("u_transparency")) {
program.setUniform("u_transparency", 1.0f);
}

if (withTonemap) {
render::engine->setTonemapUniforms(program);
}
}

void RenderImageQuantityBase::drawPickDelayed() {
if (!isEnabled()) return;
Expand All @@ -77,19 +95,13 @@ void RenderImageQuantityBase::drawPickDelayed() {
pickProgram->setUniform("u_projMatrix", glm::value_ptr(P));
pickProgram->setUniform("u_invProjMatrix", glm::value_ptr(Pinv));
pickProgram->setUniform("u_viewport", render::engine->getCurrentViewport());
pickProgram->setUniform("u_transparency", 1.0);
pickProgram->setUniform("u_textureTransparency", 1.0);
pickProgram->setUniform("u_color", pickColor);

// draw
pickProgram->draw();
}

void RenderImageQuantityBase::refresh() {
pickProgram = nullptr;
Quantity::refresh();
}


void RenderImageQuantityBase::preparePick() {

// Request pick indices
Expand All @@ -100,10 +112,10 @@ void RenderImageQuantityBase::preparePick() {
// Create the sourceProgram
// clang-format off
pickProgram = render::engine->requestShader("TEXTURE_DRAW_RENDERIMAGE_PLAIN",
{
parent.addStructureRules({
getImageOriginRule(imageOrigin),
"SHADECOLOR_FROM_UNIFORM",
},
}),
render::ShaderReplacementDefaults::Pick
);
// clang-format on
Expand All @@ -112,6 +124,11 @@ void RenderImageQuantityBase::preparePick() {
pickProgram->setTextureFromBuffer("t_depth", depths.getRenderTextureBuffer().get());
}

void RenderImageQuantityBase::refresh() {
pickProgram = nullptr;
Quantity::refresh();
}

void RenderImageQuantityBase::disableFullscreenDrawing() {
if (isEnabled()) {
setEnabled(false);
Expand Down
6 changes: 3 additions & 3 deletions src/scalar_image_quantity.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,7 @@ void ScalarImageQuantity::showFullscreen() {

// Set uniforms
this->setScalarUniforms(*fullscreenProgram);
fullscreenProgram->setUniform("u_transparency", getTransparency());
fullscreenProgram->setUniform("u_textureTransparency", getTransparency());

fullscreenProgram->draw();

Expand All @@ -90,7 +90,7 @@ void ScalarImageQuantity::renderIntermediate() {

// Set uniforms
this->setScalarUniforms(*fullscreenProgram);
fullscreenProgram->setUniform("u_transparency", getTransparency());
fullscreenProgram->setUniform("u_textureTransparency", getTransparency());

// render to the intermediate texture
render::engine->pushBindFramebufferForRendering(*framebufferIntermediate);
Expand Down Expand Up @@ -133,7 +133,7 @@ void ScalarImageQuantity::showInBillboard(glm::vec3 center, glm::vec3 upVec, glm

// set uniforms
parent.setStructureUniforms(*billboardProgram);
billboardProgram->setUniform("u_transparency", getTransparency());
billboardProgram->setUniform("u_textureTransparency", getTransparency());
billboardProgram->setUniform("u_billboardCenter", center);
billboardProgram->setUniform("u_billboardUp", upVec);
billboardProgram->setUniform("u_billboardRight", rightVec);
Expand Down
Loading
Loading