Showing the changes to interface/src/MetavoxelSystem.cpp (1 of 6 files). Show all
Unified · Split
| @@ -760,10 +760,21 @@ void HeightfieldBuffer::render(bool cursor) { · 759 unmodified lines | ||
| 760 | 760 | glBindTexture(GL_TEXTURE_2D, _heightTextureID); |
| 761 | 761 | |
| 762 | 762 | if (!cursor) { |
| 763 | − DefaultMetavoxelRendererImplementation::getHeightfieldProgram().setUniformValue( | |
| 764 | − DefaultMetavoxelRendererImplementation::getHeightScaleLocation(), 1.0f / _heightSize); | |
| 765 | − DefaultMetavoxelRendererImplementation::getHeightfieldProgram().setUniformValue( | |
| 766 | − DefaultMetavoxelRendererImplementation::getColorScaleLocation(), (float)_heightSize / innerSize); | |
| 763 | + int heightScaleLocation = DefaultMetavoxelRendererImplementation::getHeightScaleLocation(); | |
| 764 | + int colorScaleLocation = DefaultMetavoxelRendererImplementation::getColorScaleLocation(); | |
| 765 | + ProgramObject* program = &DefaultMetavoxelRendererImplementation::getHeightfieldProgram(); | |
| 766 | + if (Menu::getInstance()->isOptionChecked(MenuOption::SimpleShadows)) { | |
| 767 | + heightScaleLocation = DefaultMetavoxelRendererImplementation::getShadowMapHeightScaleLocation(); | |
| 768 | + colorScaleLocation = DefaultMetavoxelRendererImplementation::getShadowMapColorScaleLocation(); | |
| 769 | + program = &DefaultMetavoxelRendererImplementation::getShadowMapHeightfieldProgram(); | |
| 770 | + | |
| 771 | + } else if (Menu::getInstance()->isOptionChecked(MenuOption::CascadedShadows)) { | |
| 772 | + heightScaleLocation = DefaultMetavoxelRendererImplementation::getCascadedShadowMapHeightScaleLocation(); | |
| 773 | + colorScaleLocation = DefaultMetavoxelRendererImplementation::getCascadedShadowMapColorScaleLocation(); | |
| 774 | + program = &DefaultMetavoxelRendererImplementation::getCascadedShadowMapHeightfieldProgram(); | |
| 775 | + } | |
| 776 | + program->setUniformValue(heightScaleLocation, 1.0f / _heightSize); | |
| 777 | + program->setUniformValue(colorScaleLocation, (float)_heightSize / innerSize); | |
| 767 | 778 | glActiveTexture(GL_TEXTURE1); |
| 768 | 779 | glBindTexture(GL_TEXTURE_2D, _colorTextureID); |
| 769 | 780 | } |
| @@ -858,6 +869,35 @@ void DefaultMetavoxelRendererImplementation::init() { · 88 unmodified lines | ||
| 858 | 869 | _colorScaleLocation = _heightfieldProgram.uniformLocation("colorScale"); |
| 859 | 870 | _heightfieldProgram.release(); |
| 860 | 871 | |
| 872 | + _shadowMapHeightfieldProgram.addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + | |
| 873 | + "shaders/metavoxel_heightfield.vert"); | |
| 874 | + _shadowMapHeightfieldProgram.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + | |
| 875 | + "shaders/metavoxel_heightfield_shadow_map.frag"); | |
| 876 | + _shadowMapHeightfieldProgram.link(); | |
| 877 | + | |
| 878 | + _shadowMapHeightfieldProgram.bind(); | |
| 879 | + _shadowMapHeightfieldProgram.setUniformValue("heightMap", 0); | |
| 880 | + _shadowMapHeightfieldProgram.setUniformValue("diffuseMap", 1); | |
| 881 | + _shadowMapHeightfieldProgram.setUniformValue("shadowMap", 2); | |
| 882 | + _shadowMapHeightScaleLocation = _shadowMapHeightfieldProgram.uniformLocation("heightScale"); | |
| 883 | + _shadowMapColorScaleLocation = _shadowMapHeightfieldProgram.uniformLocation("colorScale"); | |
| 884 | + _shadowMapHeightfieldProgram.release(); | |
| 885 | + | |
| 886 | + _cascadedShadowMapHeightfieldProgram.addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + | |
| 887 | + "shaders/metavoxel_heightfield.vert"); | |
| 888 | + _cascadedShadowMapHeightfieldProgram.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + | |
| 889 | + "shaders/metavoxel_heightfield_cascaded_shadow_map.frag"); | |
| 890 | + _cascadedShadowMapHeightfieldProgram.link(); | |
| 891 | + | |
| 892 | + _cascadedShadowMapHeightfieldProgram.bind(); | |
| 893 | + _cascadedShadowMapHeightfieldProgram.setUniformValue("heightMap", 0); | |
| 894 | + _cascadedShadowMapHeightfieldProgram.setUniformValue("diffuseMap", 1); | |
| 895 | + _cascadedShadowMapHeightfieldProgram.setUniformValue("shadowMap", 2); | |
| 896 | + _cascadedShadowMapHeightScaleLocation = _cascadedShadowMapHeightfieldProgram.uniformLocation("heightScale"); | |
| 897 | + _cascadedShadowMapColorScaleLocation = _cascadedShadowMapHeightfieldProgram.uniformLocation("colorScale"); | |
| 898 | + _shadowDistancesLocation = _cascadedShadowMapHeightfieldProgram.uniformLocation("shadowDistances"); | |
| 899 | + _cascadedShadowMapHeightfieldProgram.release(); | |
| 900 | + | |
| 861 | 901 | _heightfieldCursorProgram.addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + |
| 862 | 902 | "shaders/metavoxel_heightfield_cursor.vert"); |
| 863 | 903 | _heightfieldCursorProgram.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + |
| @@ -1394,15 +1434,34 @@ void DefaultMetavoxelRendererImplementation::render(MetavoxelData& data, Metavox · 530 unmodified lines | ||
| 1394 | 1434 | |
| 1395 | 1435 | glColor4f(1.0f, 1.0f, 1.0f, 1.0f); |
| 1396 | 1436 | |
| 1397 | − _heightfieldProgram.bind(); | |
| 1437 | + ProgramObject* program = &_heightfieldProgram; | |
| 1438 | + if (Menu::getInstance()->getShadowsEnabled()) { | |
| 1439 | + if (Menu::getInstance()->isOptionChecked(MenuOption::CascadedShadows)) { | |
| 1440 | + program = &_cascadedShadowMapHeightfieldProgram; | |
| 1441 | + program->bind(); | |
| 1442 | + program->setUniform(_shadowDistancesLocation, Application::getInstance()->getShadowDistances()); | |
| 1443 | + | |
| 1444 | + } else { | |
| 1445 | + program = &_shadowMapHeightfieldProgram; | |
| 1446 | + } | |
| 1447 | + glActiveTexture(GL_TEXTURE2); | |
| 1448 | + glBindTexture(GL_TEXTURE_2D, Application::getInstance()->getTextureCache()->getShadowDepthTextureID()); | |
| 1449 | + glActiveTexture(GL_TEXTURE0); | |
| 1450 | + } | |
| 1451 | + | |
| 1452 | + program->bind(); | |
| 1398 | 1453 | |
| 1399 | 1454 | glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
| 1400 | 1455 | |
| 1401 | 1456 | BufferRenderVisitor heightfieldRenderVisitor(Application::getInstance()->getMetavoxels()->getHeightfieldBufferAttribute()); |
| 1402 | 1457 | data.guide(heightfieldRenderVisitor); |
| 1403 | 1458 | |
| 1404 | − _heightfieldProgram.release(); | |
| 1459 | + program->release(); | |
| 1405 | 1460 | |
| 1461 | + glActiveTexture(GL_TEXTURE2); | |
| 1462 | + glBindTexture(GL_TEXTURE_2D, 0); | |
| 1463 | + glActiveTexture(GL_TEXTURE0); | |
| 1464 | + | |
| 1406 | 1465 | glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
| 1407 | 1466 | glDisableClientState(GL_VERTEX_ARRAY); |
| 1408 | 1467 | |
| @@ -1416,6 +1475,13 @@ int DefaultMetavoxelRendererImplementation::_pointScaleLocation; · 7 unmodified lines | ||
| 1416 | 1475 | ProgramObject DefaultMetavoxelRendererImplementation::_heightfieldProgram; |
| 1417 | 1476 | int DefaultMetavoxelRendererImplementation::_heightScaleLocation; |
| 1418 | 1477 | int DefaultMetavoxelRendererImplementation::_colorScaleLocation; |
| 1478 | +ProgramObject DefaultMetavoxelRendererImplementation::_shadowMapHeightfieldProgram; | |
| 1479 | +int DefaultMetavoxelRendererImplementation::_shadowMapHeightScaleLocation; | |
| 1480 | +int DefaultMetavoxelRendererImplementation::_shadowMapColorScaleLocation; | |
| 1481 | +ProgramObject DefaultMetavoxelRendererImplementation::_cascadedShadowMapHeightfieldProgram; | |
| 1482 | +int DefaultMetavoxelRendererImplementation::_cascadedShadowMapHeightScaleLocation; | |
| 1483 | +int DefaultMetavoxelRendererImplementation::_cascadedShadowMapColorScaleLocation; | |
| 1484 | +int DefaultMetavoxelRendererImplementation::_shadowDistancesLocation; | |
| 1419 | 1485 | ProgramObject DefaultMetavoxelRendererImplementation::_heightfieldCursorProgram; |
| 1420 | 1486 | |
| 1421 | 1487 | static void enableClipPlane(GLenum plane, float x, float y, float z, float w) { |