Skip to content

Commit

Permalink
#5584: Migrating built-in shaders
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Jan 25, 2022
1 parent 5ca7c06 commit d2a56f9
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 7 deletions.
11 changes: 11 additions & 0 deletions include/irender.h
Expand Up @@ -542,6 +542,9 @@ enum class BuiltInShaderType
// A bigger version of "Point"
BigPoint,

// Lines connecting the patch control points
PatchLattice,

// Line shader drawing above regular things
WireframeOverlay,

Expand Down Expand Up @@ -580,6 +583,14 @@ enum class BuiltInShaderType

// Line shader used for drawing the three axes at entity origins
Pivot,

// Coloured merge action highlights (camera)
CameraMergeActionOverlayAdd,
CameraMergeActionOverlayRemove,
CameraMergeActionOverlayChange,
CameraMergeActionOverlayConflict,


};

/**
Expand Down
8 changes: 4 additions & 4 deletions radiant/camera/CamWnd.cpp
Expand Up @@ -971,10 +971,10 @@ void CamWnd::captureStates()
{
_shaders.faceHighlightShader = GlobalRenderSystem().capture(BuiltInShaderType::ColouredPolygonOverlay);
_shaders.primitiveHighlightShader = GlobalRenderSystem().capture(BuiltInShaderType::HighlightedPolygonOutline);
_shaders.mergeActionShaderAdd = GlobalRenderSystem().capture("$MERGE_ACTION_ADD");
_shaders.mergeActionShaderChange = GlobalRenderSystem().capture("$MERGE_ACTION_CHANGE");
_shaders.mergeActionShaderRemove = GlobalRenderSystem().capture("$MERGE_ACTION_REMOVE");
_shaders.mergeActionShaderConflict = GlobalRenderSystem().capture("$MERGE_ACTION_CONFLICT");
_shaders.mergeActionShaderAdd = GlobalRenderSystem().capture(BuiltInShaderType::CameraMergeActionOverlayAdd);
_shaders.mergeActionShaderChange = GlobalRenderSystem().capture(BuiltInShaderType::CameraMergeActionOverlayChange);
_shaders.mergeActionShaderRemove = GlobalRenderSystem().capture(BuiltInShaderType::CameraMergeActionOverlayRemove);
_shaders.mergeActionShaderConflict = GlobalRenderSystem().capture(BuiltInShaderType::CameraMergeActionOverlayConflict);
}

void CamWnd::releaseStates()
Expand Down
2 changes: 1 addition & 1 deletion radiantcore/patch/PatchNode.cpp
Expand Up @@ -387,7 +387,7 @@ void PatchNode::setRenderSystem(const RenderSystemPtr& renderSystem)
if (renderSystem)
{
_ctrlPointShader = renderSystem->capture(BuiltInShaderType::Point);
_ctrlLatticeShader = renderSystem->capture("$LATTICE");
_ctrlLatticeShader = renderSystem->capture(BuiltInShaderType::PatchLattice);
}
else
{
Expand Down
68 changes: 68 additions & 0 deletions radiantcore/rendersystem/backend/BuiltInShader.cpp
Expand Up @@ -234,11 +234,79 @@ void BuiltInShader::construct()
break;
}

case BuiltInShaderType::PatchLattice:
{
pass.setColour(1, 0.5, 0, 1);
pass.setRenderFlag(RENDER_DEPTHWRITE);
pass.setSortPosition(OpenGLState::SORT_POINT_FIRST);

enableViewType(RenderViewType::Camera);
enableViewType(RenderViewType::OrthoView);
break;
}

case BuiltInShaderType::CameraMergeActionOverlayAdd:
{
// render additions over removals
constructCameraMergeActionOverlay(pass, { 0, 0.9f, 0, 0.5f },
OpenGLState::SORT_OVERLAY_THIRD, OpenGLState::SORT_OVERLAY_LAST);
break;
}

case BuiltInShaderType::CameraMergeActionOverlayRemove:
{
constructCameraMergeActionOverlay(pass, { 0.6f, 0.1f, 0, 0.5f },
OpenGLState::SORT_OVERLAY_FIRST, OpenGLState::SORT_OVERLAY_ONE_BEFORE_LAST);
break;
}

case BuiltInShaderType::CameraMergeActionOverlayChange:
{
constructCameraMergeActionOverlay(pass, { 0, 0.4f, 0.9f, 0.5f },
OpenGLState::SORT_OVERLAY_SECOND, OpenGLState::SORT_OVERLAY_LAST);
break;
}

case BuiltInShaderType::CameraMergeActionOverlayConflict:
{
constructCameraMergeActionOverlay(pass, { 0.9f, 0.5f, 0.0f, 0.5f },
OpenGLState::SORT_OVERLAY_ONE_BEFORE_LAST, OpenGLState::SORT_OVERLAY_LAST);
break;
}

default:
throw std::runtime_error("Cannot construct this shader: " + getName());
}
}

void BuiltInShader::constructCameraMergeActionOverlay(OpenGLState& pass, const Colour4& colour,
OpenGLState::SortPosition sortPosition, OpenGLState::SortPosition lineSortPosition)
{
// This is a pass drawing a coloured overlay
// over faces/polys. Its colour is configurable,
// and it has depth test activated.
pass.setRenderFlag(RENDER_FILL);
pass.setRenderFlag(RENDER_DEPTHTEST);
pass.setRenderFlag(RENDER_CULLFACE);
pass.setRenderFlag(RENDER_BLEND);

pass.setColour(colour);
pass.setSortPosition(sortPosition);
pass.polygonOffset = 0.5f;
pass.setDepthFunc(GL_LEQUAL);

// This is the outline pass
auto& linesOverlay = appendDefaultPass();
auto lineOverlayColour = colour;
lineOverlayColour[3] = 0.78f;

linesOverlay.setColour(lineOverlayColour);
linesOverlay.setRenderFlags(RENDER_OFFSETLINE | RENDER_DEPTHTEST | RENDER_BLEND);
linesOverlay.setSortPosition(lineSortPosition);

enableViewType(RenderViewType::Camera);
}

void BuiltInShader::constructPointShader(OpenGLState& pass, float pointSize, OpenGLState::SortPosition sort)
{
pass.setRenderFlag(RENDER_POINT_COLOUR);
Expand Down
2 changes: 2 additions & 0 deletions radiantcore/rendersystem/backend/BuiltInShader.h
Expand Up @@ -20,6 +20,8 @@ class BuiltInShader :
void construct() override;
void constructPointShader(OpenGLState& pass, float pointSize, OpenGLState::SortPosition sort);
void constructWireframeSelectionOverlay(OpenGLState& pass, const std::string& schemeColourKey);
void constructCameraMergeActionOverlay(OpenGLState& pass, const Colour4& colour,
OpenGLState::SortPosition sortPosition, OpenGLState::SortPosition lineSortPosition);
};

}
10 changes: 8 additions & 2 deletions radiantcore/rendersystem/backend/OpenGLShader.cpp
Expand Up @@ -919,6 +919,7 @@ void OpenGLShader::construct()
}
else
#endif
#if 0
if (_name == "$LATTICE")
{
state.setColour(1, 0.5, 0, 1);
Expand All @@ -928,6 +929,7 @@ void OpenGLShader::construct()
enableViewType(RenderViewType::Camera);
enableViewType(RenderViewType::OrthoView);
}
#endif
#if 0
else if (_name == "$WIREFRAME")
{
Expand Down Expand Up @@ -978,8 +980,10 @@ void OpenGLShader::construct()

enableViewType(RenderViewType::Camera);
}
else
#endif
else if (string::starts_with(_name, "$MERGE_ACTION_"))
#if 0
if (string::starts_with(_name, "$MERGE_ACTION_"))
{
Colour4 colour;
auto sortPosition = OpenGLState::SORT_OVERLAY_FIRST;
Expand Down Expand Up @@ -1028,6 +1032,7 @@ void OpenGLShader::construct()

enableViewType(RenderViewType::Camera);
}
#endif
#if 0
else if (_name == "$XY_OVERLAY")
{
Expand Down Expand Up @@ -1059,8 +1064,9 @@ void OpenGLShader::construct()

enableViewType(RenderViewType::OrthoView);
}
else
#endif
else if (string::starts_with(_name, "$XY_MERGE_ACTION_"))
if (string::starts_with(_name, "$XY_MERGE_ACTION_"))
{
Colour4 colour;
auto sortPosition = OpenGLState::SORT_OVERLAY_FIRST;
Expand Down

0 comments on commit d2a56f9

Please sign in to comment.