Skip to content

Commit

Permalink
#5584: Render missing models using a custom texture
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Dec 24, 2021
1 parent 7a9e46a commit d8f284f
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 4 deletions.
Binary file added install/bitmaps/missing_model.tga
Binary file not shown.
2 changes: 1 addition & 1 deletion radiantcore/model/NullModelNode.cpp
Expand Up @@ -67,7 +67,7 @@ void NullModelNode::setRenderSystem(const RenderSystemPtr& renderSystem)
{
if (renderSystem)
{
_fillShader = renderSystem->capture("");
_fillShader = renderSystem->capture("$MISSING_MODEL");
_wireShader = renderSystem->capture("<1.0 0 0>");

_renderableBox.clear();
Expand Down
34 changes: 31 additions & 3 deletions radiantcore/rendersystem/backend/OpenGLShader.cpp
Expand Up @@ -805,9 +805,14 @@ void OpenGLShader::appendBlendLayer(const IShaderLayer::Ptr& layer)
// Construct a normal shader
void OpenGLShader::constructNormalShader()
{
// Obtain the Material
_material = GlobalMaterialManager().getMaterial(_name);
assert(_material);
constructFromMaterial(GlobalMaterialManager().getMaterial(_name));
}

void OpenGLShader::constructFromMaterial(const MaterialPtr& material)
{
assert(material);

_material = material;

_materialChanged = _material->sig_materialChanged().connect(
sigc::mem_fun(this, &OpenGLShader::onMaterialChanged));
Expand Down Expand Up @@ -1273,6 +1278,29 @@ void OpenGLShader::construct()

enableViewType(RenderViewType::Camera);
}
else if (_name == "$MISSING_MODEL")
{
// Render a custom texture
auto imgPath = module::GlobalModuleRegistry().getApplicationContext().getBitmapsPath();
imgPath += "missing_model.tga";

auto editorTex = GlobalMaterialManager().loadTextureFromFile(imgPath);
state.texture0 = editorTex ? editorTex->getGLTexNum() : 0;

state.setRenderFlag(RENDER_FILL);
state.setRenderFlag(RENDER_TEXTURE_2D);
state.setRenderFlag(RENDER_DEPTHTEST);
state.setRenderFlag(RENDER_LIGHTING);
state.setRenderFlag(RENDER_SMOOTH);
state.setRenderFlag(RENDER_DEPTHWRITE);
state.setRenderFlag(RENDER_CULLFACE);

// Set the GL color to white
state.setColour(Colour4::WHITE());
state.setSortPosition(OpenGLState::SORT_FULLBRIGHT);

enableViewType(RenderViewType::Camera);
}
else
{
assert(false);
Expand Down
2 changes: 2 additions & 0 deletions radiantcore/rendersystem/backend/OpenGLShader.h
Expand Up @@ -70,6 +70,8 @@ class OpenGLShader final :
// built-in shader)
void constructNormalShader();

void constructFromMaterial(const MaterialPtr& material);

// Shader pass construction helpers
void appendBlendLayer(const IShaderLayer::Ptr& layer);

Expand Down

0 comments on commit d8f284f

Please sign in to comment.