We've reconsidered previous patch in IRC.
It's more useful to completely ignore alpha for display of straight colors. Supporting straight pipeline is possible, but not a topic for bcon4.
This commit is contained in:
@@ -41,7 +41,7 @@ void CompositorNode::convertToOperations(ExecutionSystem *graph, CompositorConte
|
||||
compositorOperation->setSceneName(editorNode->id->name);
|
||||
compositorOperation->setRenderData(context->getRenderData());
|
||||
compositorOperation->setbNodeTree(context->getbNodeTree());
|
||||
compositorOperation->setStraightAlpha(editorNode->custom2 & 1);
|
||||
compositorOperation->setIgnoreAlpha(editorNode->custom2 & 1);
|
||||
imageSocket->relinkConnections(compositorOperation->getInputSocket(0), 0, graph);
|
||||
alphaSocket->relinkConnections(compositorOperation->getInputSocket(1));
|
||||
depthSocket->relinkConnections(compositorOperation->getInputSocket(2));
|
||||
|
||||
@@ -47,7 +47,7 @@ void ViewerNode::convertToOperations(ExecutionSystem *graph, CompositorContext *
|
||||
viewerOperation->setChunkOrder((OrderOfChunks)editorNode->custom1);
|
||||
viewerOperation->setCenterX(editorNode->custom3);
|
||||
viewerOperation->setCenterY(editorNode->custom4);
|
||||
viewerOperation->setStraightAlpha(editorNode->custom2 & 1);
|
||||
viewerOperation->setIgnoreAlpha(editorNode->custom2 & 1);
|
||||
|
||||
viewerOperation->setViewSettings(context->getViewSettings());
|
||||
viewerOperation->setDisplaySettings(context->getDisplaySettings());
|
||||
|
||||
@@ -49,7 +49,7 @@ CompositorOperation::CompositorOperation() : NodeOperation()
|
||||
this->m_alphaInput = NULL;
|
||||
this->m_depthInput = NULL;
|
||||
|
||||
this->m_straightAlpha = false;
|
||||
this->m_ignoreAlpha = false;
|
||||
|
||||
this->m_sceneName[0] = '\0';
|
||||
}
|
||||
@@ -140,12 +140,14 @@ void CompositorOperation::executeRegion(rcti *rect, unsigned int tileNumber)
|
||||
for (y = y1; y < y2 && (!breaked); y++) {
|
||||
for (x = x1; x < x2 && (!breaked); x++) {
|
||||
this->m_imageInput->read(color, x, y, COM_PS_NEAREST);
|
||||
if (this->m_alphaInput != NULL) {
|
||||
this->m_alphaInput->read(&(color[3]), x, y, COM_PS_NEAREST);
|
||||
if (this->m_ignoreAlpha) {
|
||||
color[3] = 1.0f;
|
||||
}
|
||||
else {
|
||||
if (this->m_alphaInput != NULL) {
|
||||
this->m_alphaInput->read(&(color[3]), x, y, COM_PS_NEAREST);
|
||||
}
|
||||
}
|
||||
|
||||
if (this->m_straightAlpha)
|
||||
straight_to_premul_v4(color);
|
||||
|
||||
copy_v4_v4(buffer + offset4, color);
|
||||
|
||||
|
||||
@@ -66,8 +66,8 @@ private:
|
||||
*/
|
||||
SocketReader *m_depthInput;
|
||||
|
||||
/* node input has got straight alpha which shall be premultiplied */
|
||||
bool m_straightAlpha;
|
||||
/* Ignore any alpha input */
|
||||
bool m_ignoreAlpha;
|
||||
|
||||
public:
|
||||
CompositorOperation();
|
||||
@@ -79,6 +79,6 @@ public:
|
||||
void deinitExecution();
|
||||
const CompositorPriority getRenderPriority() const { return COM_PRIORITY_MEDIUM; }
|
||||
void determineResolution(unsigned int resolution[2], unsigned int preferredResolution[2]);
|
||||
void setStraightAlpha(bool value) { this->m_straightAlpha = value; }
|
||||
void setIgnoreAlpha(bool value) { this->m_ignoreAlpha = value; }
|
||||
};
|
||||
#endif
|
||||
|
||||
@@ -48,7 +48,7 @@ ViewerBaseOperation::ViewerBaseOperation() : NodeOperation()
|
||||
this->m_doDepthBuffer = false;
|
||||
this->m_viewSettings = NULL;
|
||||
this->m_displaySettings = NULL;
|
||||
this->m_straightAlpha = false;
|
||||
this->m_ignoreAlpha = false;
|
||||
}
|
||||
|
||||
void ViewerBaseOperation::initExecution()
|
||||
|
||||
@@ -39,7 +39,7 @@ protected:
|
||||
OrderOfChunks m_chunkOrder;
|
||||
bool m_doDepthBuffer;
|
||||
ImBuf *m_ibuf;
|
||||
bool m_straightAlpha;
|
||||
bool m_ignoreAlpha;
|
||||
|
||||
const ColorManagedViewSettings *m_viewSettings;
|
||||
const ColorManagedDisplaySettings *m_displaySettings;
|
||||
@@ -60,7 +60,7 @@ public:
|
||||
OrderOfChunks getChunkOrder() { return this->m_chunkOrder; }
|
||||
const CompositorPriority getRenderPriority() const;
|
||||
bool isViewerOperation() { return true; }
|
||||
void setStraightAlpha(bool value) { this->m_straightAlpha = value; }
|
||||
void setIgnoreAlpha(bool value) { this->m_ignoreAlpha = value; }
|
||||
|
||||
void setViewSettings(const ColorManagedViewSettings *viewSettings) { this->m_viewSettings = viewSettings; }
|
||||
void setDisplaySettings(const ColorManagedDisplaySettings *displaySettings) { this->m_displaySettings = displaySettings; }
|
||||
|
||||
@@ -89,18 +89,20 @@ void ViewerOperation::executeRegion(rcti *rect, unsigned int tileNumber)
|
||||
for (y = y1; y < y2 && (!breaked); y++) {
|
||||
for (x = x1; x < x2; x++) {
|
||||
this->m_imageInput->read(&(buffer[offset4]), x, y, COM_PS_NEAREST);
|
||||
if (this->m_alphaInput != NULL) {
|
||||
this->m_alphaInput->read(alpha, x, y, COM_PS_NEAREST);
|
||||
buffer[offset4 + 3] = alpha[0];
|
||||
if (this->m_ignoreAlpha) {
|
||||
buffer[offset4 + 3] = 1.0f;
|
||||
}
|
||||
else {
|
||||
if (this->m_alphaInput != NULL) {
|
||||
this->m_alphaInput->read(alpha, x, y, COM_PS_NEAREST);
|
||||
buffer[offset4 + 3] = alpha[0];
|
||||
}
|
||||
}
|
||||
if (m_depthInput) {
|
||||
this->m_depthInput->read(depth, x, y, COM_PS_NEAREST);
|
||||
depthbuffer[offset] = depth[0];
|
||||
}
|
||||
|
||||
if (this->m_straightAlpha)
|
||||
straight_to_premul_v4(buffer + offset4);
|
||||
|
||||
offset ++;
|
||||
offset4 += 4;
|
||||
}
|
||||
|
||||
@@ -2656,12 +2656,12 @@ static void node_composit_buts_ellipsemask(uiLayout *layout, bContext *UNUSED(C)
|
||||
|
||||
static void node_composit_buts_composite(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
||||
{
|
||||
uiItemR(layout, ptr, "use_straight_alpha", 0, NULL, ICON_NONE);
|
||||
uiItemR(layout, ptr, "use_alpha", 0, NULL, ICON_NONE);
|
||||
}
|
||||
|
||||
static void node_composit_buts_viewer(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
||||
{
|
||||
uiItemR(layout, ptr, "use_straight_alpha", 0, NULL, ICON_NONE);
|
||||
uiItemR(layout, ptr, "use_alpha", 0, NULL, ICON_NONE);
|
||||
}
|
||||
|
||||
static void node_composit_buts_viewer_but(uiLayout *layout, bContext *UNUSED(C), PointerRNA *ptr)
|
||||
|
||||
@@ -4084,9 +4084,9 @@ static void def_cmp_viewer(StructRNA *srna)
|
||||
RNA_def_property_ui_text(prop, "Y", "");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
|
||||
prop = RNA_def_property(srna, "use_straight_alpha", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "custom2", 1);
|
||||
RNA_def_property_ui_text(prop, "Straight Alpha", "Treat alpha input of this node as straight");
|
||||
prop = RNA_def_property(srna, "use_alpha", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_negative_sdna(prop, NULL, "custom2", 1);
|
||||
RNA_def_property_ui_text(prop, "Use Alpha", "Colors are treated alpha premultiplied, or colors output straight (alpha gets set to 1)");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
}
|
||||
|
||||
@@ -4094,9 +4094,9 @@ static void def_cmp_composite(StructRNA *srna)
|
||||
{
|
||||
PropertyRNA *prop;
|
||||
|
||||
prop = RNA_def_property(srna, "use_straight_alpha", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "custom2", 1);
|
||||
RNA_def_property_ui_text(prop, "Straight Alpha", "Treat alpha input of this node as straight");
|
||||
prop = RNA_def_property(srna, "use_alpha", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_negative_sdna(prop, NULL, "custom2", 1);
|
||||
RNA_def_property_ui_text(prop, "Use Alpha", "Colors are treated alpha premultiplied, or colors output straight (alpha gets set to 1)");
|
||||
RNA_def_property_update(prop, NC_NODE | NA_EDITED, "rna_Node_update");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user