drawcall_count += draw_order.size();
for (auto &descriptor : draw_order) {
- scene::IMeshBuffer *buf;
-
- if (descriptor.m_use_partial_buffer) {
- descriptor.m_partial_buffer->beforeDraw();
- buf = descriptor.m_partial_buffer->getBuffer();
- }
- else {
- buf = descriptor.m_buffer;
- }
+ scene::IMeshBuffer *buf = descriptor.getBuffer();
// Check and abort if the machine is swapping a lot
if (draw.getTimerTime() > 2000) {
// Do not enable filter on shadow texture to avoid visual artifacts
// with colored shadows.
// Filtering is done in shader code anyway
+ layer.BilinearFilter = false;
+ layer.AnisotropicFilter = false;
layer.TrilinearFilter = false;
}
driver->setMaterial(material);
m.setTranslation(block_wpos - offset);
driver->setTransform(video::ETS_WORLD, m);
- driver->drawMeshBuffer(buf);
+ descriptor.draw(driver);
vertex_count += buf->getIndexCount();
}
drawcall_count += draw_order.size();
for (auto &descriptor : draw_order) {
- scene::IMeshBuffer *buf;
-
- if (descriptor.m_use_partial_buffer) {
- descriptor.m_partial_buffer->beforeDraw();
- buf = descriptor.m_partial_buffer->getBuffer();
- }
- else {
- buf = descriptor.m_buffer;
- }
+ scene::IMeshBuffer *buf = descriptor.getBuffer();
// Check and abort if the machine is swapping a lot
if (draw.getTimerTime() > 1000) {
m.setTranslation(block_wpos - offset);
driver->setTransform(video::ETS_WORLD, m);
- driver->drawMeshBuffer(buf);
+ descriptor.draw(driver);
vertex_count += buf->getIndexCount();
}
m_needs_update_transparent_meshes = false;
}
+scene::IMeshBuffer* ClientMap::DrawDescriptor::getBuffer()
+{
+ return m_use_partial_buffer ? m_partial_buffer->getBuffer() : m_buffer;
+}
+
+void ClientMap::DrawDescriptor::draw(video::IVideoDriver* driver)
+{
+ if (m_use_partial_buffer) {
+ m_partial_buffer->beforeDraw();
+ driver->drawMeshBuffer(m_partial_buffer->getBuffer());
+ m_partial_buffer->afterDraw();
+ } else {
+ driver->drawMeshBuffer(m_buffer);
+ }
+}