aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/camera.cpp2
-rw-r--r--src/client/content_cao.cpp30
-rw-r--r--src/client/mapblock_mesh.cpp4
-rw-r--r--src/client/mesh.cpp2
-rw-r--r--src/client/render/core.cpp14
-rw-r--r--src/client/renderingengine.cpp2
-rw-r--r--src/client/wieldmesh.cpp20
-rw-r--r--src/client/wieldmesh.h2
-rw-r--r--src/irrlichttypes_extrabloated.h1
9 files changed, 52 insertions, 25 deletions
diff --git a/src/client/camera.cpp b/src/client/camera.cpp
index dce94495b..255ca1238 100644
--- a/src/client/camera.cpp
+++ b/src/client/camera.cpp
@@ -63,7 +63,7 @@ Camera::Camera(MapDrawControl &draw_control, Client *client, RenderingEngine *re
// all other 3D scene nodes and before the GUI.
m_wieldmgr = smgr->createNewSceneManager();
m_wieldmgr->addCameraSceneNode();
- m_wieldnode = new WieldMeshSceneNode(m_wieldmgr, -1, false);
+ m_wieldnode = new WieldMeshSceneNode(m_wieldmgr, -1, true);
m_wieldnode->setItem(ItemStack(), m_client);
m_wieldnode->drop(); // m_wieldmgr grabbed it
diff --git a/src/client/content_cao.cpp b/src/client/content_cao.cpp
index 255eff52a..ff6eeb7bd 100644
--- a/src/client/content_cao.cpp
+++ b/src/client/content_cao.cpp
@@ -251,7 +251,7 @@ void TestCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
u16 indices[] = {0,1,2,2,3,0};
buf->append(vertices, 4, indices, 6);
// Set material
- buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
+ buf->getMaterial().setFlag(video::EMF_LIGHTING, true);
buf->getMaterial().setFlag(video::EMF_BACK_FACE_CULLING, false);
buf->getMaterial().setTexture(0, tsrc->getTextureForMesh("rat.png"));
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
@@ -643,14 +643,14 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
};
auto setSceneNodeMaterial = [this] (scene::ISceneNode *node) {
- node->setMaterialFlag(video::EMF_LIGHTING, false);
+ node->setMaterialFlag(video::EMF_LIGHTING, true);
node->setMaterialFlag(video::EMF_BILINEAR_FILTER, false);
node->setMaterialFlag(video::EMF_FOG_ENABLE, true);
+ node->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true);
node->setMaterialType(m_material_type);
if (m_enable_shaders) {
node->setMaterialFlag(video::EMF_GOURAUD_SHADING, false);
- node->setMaterialFlag(video::EMF_NORMALIZE_NORMALS, true);
}
};
@@ -695,15 +695,15 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
u16 indices[] = {0,1,2,2,3,0};
buf->append(vertices, 4, indices, 6);
// Set material
- buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
+ buf->getMaterial().setFlag(video::EMF_LIGHTING, true);
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
+ buf->getMaterial().setFlag(video::EMF_NORMALIZE_NORMALS, true);
buf->getMaterial().MaterialType = m_material_type;
if (m_enable_shaders) {
buf->getMaterial().EmissiveColor = c;
buf->getMaterial().setFlag(video::EMF_GOURAUD_SHADING, false);
- buf->getMaterial().setFlag(video::EMF_NORMALIZE_NORMALS, true);
}
// Add to mesh
@@ -726,7 +726,8 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
u16 indices[] = {0,1,2,2,3,0};
buf->append(vertices, 4, indices, 6);
// Set material
- buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
+ buf->getMaterial().setFlag(video::EMF_LIGHTING, true);
+ buf->getMaterial().setFlag(video::EMF_NORMALIZE_NORMALS, true);
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
buf->getMaterial().setFlag(video::EMF_FOG_ENABLE, true);
buf->getMaterial().MaterialType = m_material_type;
@@ -734,7 +735,6 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
if (m_enable_shaders) {
buf->getMaterial().EmissiveColor = c;
buf->getMaterial().setFlag(video::EMF_GOURAUD_SHADING, false);
- buf->getMaterial().setFlag(video::EMF_NORMALIZE_NORMALS, true);
}
// Add to mesh
@@ -744,6 +744,10 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
m_meshnode = m_smgr->addMeshSceneNode(mesh, m_matrixnode);
m_meshnode->grab();
mesh->drop();
+
+ //m_meshnode->setAutomaticCulling(scene::EAC_OFF);
+ scene::IShadowVolumeSceneNode *shadVol = m_meshnode->addShadowVolumeSceneNode();
+ if (shadVol) shadVol->setOptimization(scene::ESV_NONE);
} else if (m_prop.visual == "cube") {
grabMatrixNode();
scene::IMesh *mesh = createCubeMesh(v3f(BS,BS,BS));
@@ -756,6 +760,10 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
m_prop.backface_culling);
setSceneNodeMaterial(m_meshnode);
+
+ //m_meshnode->setAutomaticCulling(scene::EAC_OFF);
+ scene::IShadowVolumeSceneNode *shadVol = m_meshnode->addShadowVolumeSceneNode();
+ if (shadVol) shadVol->setOptimization(scene::ESV_NONE);
} else if (m_prop.visual == "mesh") {
grabMatrixNode();
scene::IAnimatedMesh *mesh = m_client->getMesh(m_prop.mesh, true);
@@ -782,6 +790,10 @@ void GenericCAO::addToScene(ITextureSource *tsrc, scene::ISceneManager *smgr)
m_animated_meshnode->setMaterialFlag(video::EMF_BACK_FACE_CULLING,
m_prop.backface_culling);
+
+ //m_animated_meshnode->setAutomaticCulling(scene::EAC_OFF);
+ scene::IShadowVolumeSceneNode *shadVol = m_animated_meshnode->addShadowVolumeSceneNode();
+ if (shadVol) shadVol->setOptimization(scene::ESV_NONE);
} else
errorstream<<"GenericCAO::addToScene(): Could not load mesh "<<m_prop.mesh<<std::endl;
} else if (m_prop.visual == "wielditem" || m_prop.visual == "item") {
@@ -1374,6 +1386,7 @@ void GenericCAO::updateTextures(std::string mod)
material.setFlag(video::EMF_LIGHTING, true);
material.setFlag(video::EMF_BILINEAR_FILTER, false);
material.setFlag(video::EMF_BACK_FACE_CULLING, m_prop.backface_culling);
+ material.setFlag(video::EMF_NORMALIZE_NORMALS, true);
// don't filter low-res textures, makes them look blurry
// player models have a res of 64
@@ -1417,8 +1430,9 @@ void GenericCAO::updateTextures(std::string mod)
video::SMaterial& material = m_meshnode->getMaterial(i);
material.MaterialType = m_material_type;
material.MaterialTypeParam = 0.5f;
- material.setFlag(video::EMF_LIGHTING, false);
+ material.setFlag(video::EMF_LIGHTING, true);
material.setFlag(video::EMF_BILINEAR_FILTER, false);
+ material.setFlag(video::EMF_NORMALIZE_NORMALS, true);
material.setTexture(0,
tsrc->getTextureForMesh(texturestring));
material.getTextureMatrix(0).makeIdentity();
diff --git a/src/client/mapblock_mesh.cpp b/src/client/mapblock_mesh.cpp
index 23db42c55..a4f43425c 100644
--- a/src/client/mapblock_mesh.cpp
+++ b/src/client/mapblock_mesh.cpp
@@ -756,10 +756,12 @@ MapBlockMesh::MapBlockMesh(MeshMakeData *data, v3s16 camera_offset):
// Create material
video::SMaterial material;
- material.setFlag(video::EMF_LIGHTING, false);
+ material.setFlag(video::EMF_LIGHTING, true);
material.setFlag(video::EMF_BACK_FACE_CULLING, true);
material.setFlag(video::EMF_BILINEAR_FILTER, false);
material.setFlag(video::EMF_FOG_ENABLE, true);
+ material.setFlag(video::EMF_GOURAUD_SHADING, true);
+ material.setFlag(video::EMF_NORMALIZE_NORMALS, true);
material.setTexture(0, p.layer.texture);
if (m_enable_shaders) {
diff --git a/src/client/mesh.cpp b/src/client/mesh.cpp
index 4bf07effa..f901566cd 100644
--- a/src/client/mesh.cpp
+++ b/src/client/mesh.cpp
@@ -406,7 +406,7 @@ scene::IMesh* convertNodeboxesToMesh(const std::vector<aabb3f> &boxes,
for (u16 j = 0; j < 6; j++)
{
scene::IMeshBuffer *buf = new scene::SMeshBuffer();
- buf->getMaterial().setFlag(video::EMF_LIGHTING, false);
+ buf->getMaterial().setFlag(video::EMF_LIGHTING, true);
buf->getMaterial().setFlag(video::EMF_BILINEAR_FILTER, false);
dst_mesh->addMeshBuffer(buf);
buf->drop();
diff --git a/src/client/render/core.cpp b/src/client/render/core.cpp
index 5e87f58fc..7bac9192c 100644
--- a/src/client/render/core.cpp
+++ b/src/client/render/core.cpp
@@ -23,11 +23,19 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "client/shadows/dynamicshadowsrender.h"
#include "settings.h"
-RenderingCore::RenderingCore(IrrlichtDevice *_device, Client *_client, Hud *_hud,
+RenderingCore::RenderingCore(IrrlichtDevice *_device, Client *_client, Hud *_hud,
ShadowRenderer *_shadow_renderer, RenderPipeline *_pipeline, v2f _virtual_size_scale)
- : device(_device), client(_client), hud(_hud), shadow_renderer(_shadow_renderer),
+ : device(_device), client(_client), hud(_hud), shadow_renderer(_shadow_renderer),
pipeline(_pipeline), virtual_size_scale(_virtual_size_scale)
{
+ auto light_node = device->getSceneManager()->addLightSceneNode();
+ // FIXME: light should be directional, but when enabled, there are massive z-fighting issues
+ // light_node->getLightData().Type = video::ELT_DIRECTIONAL;
+ // TODO: sun angle
+ // TODO: reasonable values for ambient, diffuse, specular
+ light_node->setPosition(v3f(0, 700, 0));
+ light_node->setRotation(v3f(90, 0, 0));
+ light_node->setRadius(1000);
}
RenderingCore::~RenderingCore()
@@ -55,4 +63,4 @@ void RenderingCore::draw(video::SColor _skycolor, bool _show_hud, bool _show_min
v2u32 RenderingCore::getVirtualSize() const
{
return virtual_size;
-} \ No newline at end of file
+}
diff --git a/src/client/renderingengine.cpp b/src/client/renderingengine.cpp
index 74151423f..da2553fde 100644
--- a/src/client/renderingengine.cpp
+++ b/src/client/renderingengine.cpp
@@ -126,7 +126,7 @@ RenderingEngine::RenderingEngine(IEventReceiver *receiver)
params.WindowSize = core::dimension2d<u32>(screen_w, screen_h);
params.AntiAlias = fsaa;
params.Fullscreen = fullscreen;
- params.Stencilbuffer = false;
+ params.Stencilbuffer = true;
params.Vsync = vsync;
params.EventReceiver = receiver;
params.HighPrecisionFPU = true;
diff --git a/src/client/wieldmesh.cpp b/src/client/wieldmesh.cpp
index 5030ea575..980e3308c 100644
--- a/src/client/wieldmesh.cpp
+++ b/src/client/wieldmesh.cpp
@@ -222,6 +222,9 @@ WieldMeshSceneNode::WieldMeshSceneNode(scene::ISceneManager *mgr, s32 id, bool l
m_meshnode->setVisible(false);
dummymesh->drop(); // m_meshnode grabbed it
+ scene::IShadowVolumeSceneNode *shadVol = m_meshnode->addShadowVolumeSceneNode();
+ if (shadVol) shadVol->setOptimization(scene::ESV_NONE);
+
m_shadow = RenderingEngine::get_shadow_renderer();
if (m_shadow) {
@@ -392,8 +395,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
// overlay is white, if present
m_colors.emplace_back(true, video::SColor(0xFFFFFFFF));
// initialize the color
- if (!m_lighting)
- setColor(video::SColor(0xFFFFFFFF));
+ setColor(video::SColor(0xFFFFFFFF));
return;
}
@@ -467,8 +469,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
}
// initialize the color
- if (!m_lighting)
- setColor(video::SColor(0xFFFFFFFF));
+ setColor(video::SColor(0xFFFFFFFF));
return;
} else {
if (!def.inventory_image.empty()) {
@@ -483,8 +484,7 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
m_colors.emplace_back(true, video::SColor(0xFFFFFFFF));
// initialize the color
- if (!m_lighting)
- setColor(video::SColor(0xFFFFFFFF));
+ setColor(video::SColor(0xFFFFFFFF));
return;
}
@@ -494,7 +494,9 @@ void WieldMeshSceneNode::setItem(const ItemStack &item, Client *client, bool che
void WieldMeshSceneNode::setColor(video::SColor c)
{
- assert(!m_lighting);
+ if (m_lighting)
+ return;
+
scene::IMesh *mesh = m_meshnode->getMesh();
if (!mesh)
return;
@@ -651,7 +653,7 @@ void getItemMesh(Client *client, const ItemStack &item, ItemMesh *result)
material.setFlag(video::EMF_BILINEAR_FILTER, false);
material.setFlag(video::EMF_TRILINEAR_FILTER, false);
material.setFlag(video::EMF_BACK_FACE_CULLING, cull_backface);
- material.setFlag(video::EMF_LIGHTING, false);
+ material.setFlag(video::EMF_LIGHTING, true);
}
rotateMeshXZby(mesh, -45);
@@ -696,7 +698,7 @@ scene::SMesh *getExtrudedMesh(ITextureSource *tsrc,
material.setFlag(video::EMF_BILINEAR_FILTER, false);
material.setFlag(video::EMF_TRILINEAR_FILTER, false);
material.setFlag(video::EMF_BACK_FACE_CULLING, true);
- material.setFlag(video::EMF_LIGHTING, false);
+ material.setFlag(video::EMF_LIGHTING, true);
material.MaterialType = video::EMT_TRANSPARENT_ALPHA_CHANNEL;
material.MaterialTypeParam = 0.5f;
}
diff --git a/src/client/wieldmesh.h b/src/client/wieldmesh.h
index d1eeb64f5..8a3d6d9c2 100644
--- a/src/client/wieldmesh.h
+++ b/src/client/wieldmesh.h
@@ -75,7 +75,7 @@ struct ItemMesh
class WieldMeshSceneNode : public scene::ISceneNode
{
public:
- WieldMeshSceneNode(scene::ISceneManager *mgr, s32 id = -1, bool lighting = false);
+ WieldMeshSceneNode(scene::ISceneManager *mgr, s32 id = -1, bool lighting = true);
virtual ~WieldMeshSceneNode();
void setCube(const ContentFeatures &f, v3f wield_scale);
diff --git a/src/irrlichttypes_extrabloated.h b/src/irrlichttypes_extrabloated.h
index b03ba7955..797497ff8 100644
--- a/src/irrlichttypes_extrabloated.h
+++ b/src/irrlichttypes_extrabloated.h
@@ -26,6 +26,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include <IImage.h>
#include <IrrlichtDevice.h>
#include <IMeshSceneNode.h>
+#include <ILightSceneNode.h>
#include <IDummyTransformationSceneNode.h>
#include <SMesh.h>
#include <ISceneManager.h>