Skip to content

Commit

Permalink
#5532: Fix depth issues in lighting mode. Hide the testmodel if no ma…
Browse files Browse the repository at this point in the history
…terial is selected. The room texture is defined in the .game file now.
  • Loading branch information
codereader committed Mar 22, 2021
1 parent 4ab09da commit 61510a2
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 3 deletions.
4 changes: 4 additions & 0 deletions install/games/darkmod.game
Expand Up @@ -347,4 +347,8 @@
<string id="#str_03011">Difficult</string>
</difficultyMenuEclass>
</difficulty>

<materialPreview>
<defaultRoomMaterial value="textures/darkmod/stone/brick/blocks_brown" />
</materialPreview>
</game>
2 changes: 1 addition & 1 deletion install/resources/preview/room_cuboid.ase
Expand Up @@ -31,7 +31,7 @@
*MAP_CLASS "Bitmap"
*MAP_SUBNO 1
*MAP_AMOUNT 1.0000
*BITMAP "\\base\textures\material"
*BITMAP "\\base\material"
*MAP_TYPE Screen
*UVW_U_OFFSET 0.0000
*UVW_V_OFFSET 0.0000
Expand Down
1 change: 0 additions & 1 deletion radiant/ui/materials/MaterialEditor.cpp
Expand Up @@ -731,7 +731,6 @@ void MaterialEditor::setupMaterialStageProperties()
[this](const IEditableShaderLayer::Ptr& layer, const std::string& value)
{
layer->setAlphaTestExpressionFromString(value);
getControl<wxCheckBox>("MaterialStageHasAlphaTest")->SetValue(layer->hasAlphaTest());
});

for (const auto& value : { "diffusemap", "bumpmap", "specularmap", "blend", "add", "filter", "modulate", "none" })
Expand Down
25 changes: 24 additions & 1 deletion radiant/ui/materials/MaterialPreview.cpp
Expand Up @@ -3,18 +3,21 @@
#include "ibrush.h"
#include "ientity.h"
#include "ieclass.h"
#include "ishaders.h"
#include "string/convert.h"
#include "math/pi.h"
#include "wxutil/dialog/MessageBox.h"
#include "wxutil/Bitmap.h"
#include <wx/toolbar.h>
#include "gamelib.h"

namespace ui
{

namespace
{
const char* const FUNC_STATIC_CLASS = "func_static";
const char* const GKEY_DEFAULT_ROOM_MATERIAL = "/materialPreview/defaultRoomMaterial";
}

MaterialPreview::MaterialPreview(wxWindow* parent) :
Expand All @@ -29,6 +32,9 @@ MaterialPreview::MaterialPreview(wxWindow* parent) :
GlobalModelSkinCache().addNamedSkin(_testRoomSkin);

setupToolbar();

setViewOrigin(Vector3(1, 1, 1) * 100);
setViewAngles(Vector3(37, 135, 0));
}

MaterialPreview::~MaterialPreview()
Expand Down Expand Up @@ -74,6 +80,9 @@ const MaterialPtr& MaterialPreview::getMaterial()

void MaterialPreview::updateModelSkin()
{
// Hide the model if there's no material to preview
_model->setFiltered(_testModelSkin->isEmpty());

// Let the model update its remaps
auto skinnedModel = std::dynamic_pointer_cast<SkinnedModel>(_model);

Expand All @@ -83,8 +92,16 @@ void MaterialPreview::updateModelSkin()
}
}

std::string MaterialPreview::getRoomMaterial()
{
return game::current::getValue<std::string>(GKEY_DEFAULT_ROOM_MATERIAL);
}

void MaterialPreview::updateRoomSkin()
{
auto roomMaterial = getRoomMaterial();
_testRoomSkin->setRemapMaterial(GlobalMaterialManager().getMaterial(roomMaterial));

// Let the model update its remaps
auto skinnedRoom = std::dynamic_pointer_cast<SkinnedModel>(_room);

Expand Down Expand Up @@ -161,6 +178,11 @@ bool MaterialPreview::canDrawGrid()
return false;
}

RenderStateFlags MaterialPreview::getRenderFlagsFill()
{
return RenderPreview::getRenderFlagsFill() | RENDER_DEPTHWRITE | RENDER_DEPTHTEST;
}

void MaterialPreview::setupSceneGraph()
{
RenderPreview::setupSceneGraph();
Expand Down Expand Up @@ -193,7 +215,7 @@ void MaterialPreview::setupSceneGraph()
double distance = _model->localAABB().getRadius() * _defaultCamDistanceFactor;

setViewOrigin(Vector3(1, 1, 1) * distance);
setViewAngles(Vector3(34, 135, 0));
setViewAngles(Vector3(37, 135, 0));
}
catch (std::runtime_error&)
{
Expand All @@ -212,6 +234,7 @@ void MaterialPreview::setupRoom()
_rootNode->addChildNode(roomEntity);

roomEntity->addChildNode(_room);

updateRoomSkin();
}

Expand Down
2 changes: 2 additions & 0 deletions radiant/ui/materials/MaterialPreview.h
Expand Up @@ -45,6 +45,7 @@ class MaterialPreview :
protected:
bool canDrawGrid() override;
void setupSceneGraph() override;
RenderStateFlags getRenderFlagsFill() override;

private:
bool onPreRender() override;
Expand All @@ -54,6 +55,7 @@ class MaterialPreview :
void setupRoom();
void updateModelSkin();
void updateRoomSkin();
std::string getRoomMaterial();
void onTestModelSelectionChanged(wxCommandEvent& ev);
};

Expand Down
5 changes: 5 additions & 0 deletions radiant/ui/materials/TestModelSkin.h
Expand Up @@ -42,6 +42,11 @@ class TestModelSkin final :
return "__defined_by_darkradiant.skin";
}

bool isEmpty() const
{
return !_material;
}

void clear()
{
_material.reset();
Expand Down

0 comments on commit 61510a2

Please sign in to comment.