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 | glBindTexture(GL_TEXTURE_2D, _heightTextureID); | 760 | glBindTexture(GL_TEXTURE_2D, _heightTextureID); |
| 761 | 761 | ||
| 762 | if (!cursor) { | 762 | if (!cursor) { |
| 763 | DefaultMetavoxelRendererImplementation::getHeightfieldProgram().setUniformValue( | 763 | int heightScaleLocation = DefaultMetavoxelRendererImplementation::getHeightScaleLocation(); |
| 764 | DefaultMetavoxelRendererImplementation::getHeightScaleLocation(), 1.0f / _heightSize); | 764 | int colorScaleLocation = DefaultMetavoxelRendererImplementation::getColorScaleLocation(); |
| 765 | DefaultMetavoxelRendererImplementation::getHeightfieldProgram().setUniformValue( | 765 | ProgramObject* program = &DefaultMetavoxelRendererImplementation::getHeightfieldProgram(); |
| 766 | DefaultMetavoxelRendererImplementation::getColorScaleLocation(), (float)_heightSize / innerSize); | 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 | glActiveTexture(GL_TEXTURE1); | 778 | glActiveTexture(GL_TEXTURE1); |
| 768 | glBindTexture(GL_TEXTURE_2D, _colorTextureID); | 779 | glBindTexture(GL_TEXTURE_2D, _colorTextureID); |
| 769 | } | 780 | } |
| @@ -858,6 +869,35 @@ void DefaultMetavoxelRendererImplementation::init() { · 88 unmodified lines | |||
| 858 | _colorScaleLocation = _heightfieldProgram.uniformLocation("colorScale"); | 869 | _colorScaleLocation = _heightfieldProgram.uniformLocation("colorScale"); |
| 859 | _heightfieldProgram.release(); | 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 | _heightfieldCursorProgram.addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + | 901 | _heightfieldCursorProgram.addShaderFromSourceFile(QGLShader::Vertex, Application::resourcesPath() + |
| 862 | "shaders/metavoxel_heightfield_cursor.vert"); | 902 | "shaders/metavoxel_heightfield_cursor.vert"); |
| 863 | _heightfieldCursorProgram.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + | 903 | _heightfieldCursorProgram.addShaderFromSourceFile(QGLShader::Fragment, Application::resourcesPath() + |
| @@ -1394,15 +1434,34 @@ void DefaultMetavoxelRendererImplementation::render(MetavoxelData& data, Metavox · 530 unmodified lines | |||
| 1394 | 1434 | ||
| 1395 | glColor4f(1.0f, 1.0f, 1.0f, 1.0f); | 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 | glEnableClientState(GL_TEXTURE_COORD_ARRAY); | 1454 | glEnableClientState(GL_TEXTURE_COORD_ARRAY); |
| 1400 | 1455 | ||
| 1401 | BufferRenderVisitor heightfieldRenderVisitor(Application::getInstance()->getMetavoxels()->getHeightfieldBufferAttribute()); | 1456 | BufferRenderVisitor heightfieldRenderVisitor(Application::getInstance()->getMetavoxels()->getHeightfieldBufferAttribute()); |
| 1402 | data.guide(heightfieldRenderVisitor); | 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 | glDisableClientState(GL_TEXTURE_COORD_ARRAY); | 1465 | glDisableClientState(GL_TEXTURE_COORD_ARRAY); |
| 1407 | glDisableClientState(GL_VERTEX_ARRAY); | 1466 | glDisableClientState(GL_VERTEX_ARRAY); |
| 1408 | 1467 | ||
| @@ -1416,6 +1475,13 @@ int DefaultMetavoxelRendererImplementation::_pointScaleLocation; · 7 unmodified lines | |||
| 1416 | ProgramObject DefaultMetavoxelRendererImplementation::_heightfieldProgram; | 1475 | ProgramObject DefaultMetavoxelRendererImplementation::_heightfieldProgram; |
| 1417 | int DefaultMetavoxelRendererImplementation::_heightScaleLocation; | 1476 | int DefaultMetavoxelRendererImplementation::_heightScaleLocation; |
| 1418 | int DefaultMetavoxelRendererImplementation::_colorScaleLocation; | 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 | ProgramObject DefaultMetavoxelRendererImplementation::_heightfieldCursorProgram; | 1485 | ProgramObject DefaultMetavoxelRendererImplementation::_heightfieldCursorProgram; |
| 1420 | 1486 | ||
| 1421 | static void enableClipPlane(GLenum plane, float x, float y, float z, float w) { | 1487 | static void enableClipPlane(GLenum plane, float x, float y, float z, float w) { |