| 100 | } |
| 101 | |
| 102 | void RenderVolumeObject::render_( const ModelBaseRenderParams& renderParams, const ModelRenderParams* nonPickerParams, unsigned geomId ) |
| 103 | { |
| 104 | if ( !getViewerInstance().isGLInitialized() ) |
| 105 | { |
| 106 | objVoxels_->resetDirty(); |
| 107 | return; |
| 108 | } |
| 109 | update_(); |
| 110 | |
| 111 | bool picker = geomId != unsigned( ~0 ); |
| 112 | // Initialize uniform |
| 113 | if ( picker ) |
| 114 | { |
| 115 | GL_EXEC( glViewport( ( GLsizei )0, ( GLsizei )0, |
| 116 | ( GLsizei )renderParams.viewport.z, ( GLsizei )renderParams.viewport.w ) ); |
| 117 | } |
| 118 | else |
| 119 | { |
| 120 | GL_EXEC( glViewport( ( GLsizei )renderParams.viewport.x, ( GLsizei )renderParams.viewport.y, |
| 121 | ( GLsizei )renderParams.viewport.z, ( GLsizei )renderParams.viewport.w ) ); |
| 122 | } |
| 123 | |
| 124 | if ( objVoxels_->getVisualizeProperty( VisualizeMaskType::DepthTest, renderParams.viewportId ) ) |
| 125 | { |
| 126 | GL_EXEC( glEnable( GL_DEPTH_TEST ) ); |
| 127 | } |
| 128 | else |
| 129 | { |
| 130 | GL_EXEC( glDisable( GL_DEPTH_TEST ) ); |
| 131 | } |
| 132 | |
| 133 | GL_EXEC( glEnable( GL_BLEND ) ); |
| 134 | GL_EXEC( glBlendFuncSeparate( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE, GL_ONE_MINUS_SRC_ALPHA ) ); |
| 135 | |
| 136 | bindVolume_( picker ); |
| 137 | auto shader = picker ? GLStaticHolder::getShaderId( GLStaticHolder::VolumePicker ) : |
| 138 | GLStaticHolder::getShaderId( GLStaticHolder::Volume ); |
| 139 | |
| 140 | GL_EXEC( glUniformMatrix4fv( glGetUniformLocation( shader, "model" ), 1, GL_TRUE, renderParams.modelMatrix.data() ) ); |
| 141 | GL_EXEC( glUniformMatrix4fv( glGetUniformLocation( shader, "view" ), 1, GL_TRUE, renderParams.viewMatrix.data() ) ); |
| 142 | GL_EXEC( glUniformMatrix4fv( glGetUniformLocation( shader, "proj" ), 1, GL_TRUE, renderParams.projMatrix.data() ) ); |
| 143 | if ( !picker ) |
| 144 | { |
| 145 | if ( nonPickerParams->normMatrixPtr ) |
| 146 | { |
| 147 | GL_EXEC( glUniformMatrix4fv( glGetUniformLocation( shader, "normal_matrix" ), 1, GL_TRUE, nonPickerParams->normMatrixPtr->data() ) ); |
| 148 | } |
| 149 | GL_EXEC( glUniform3fv( glGetUniformLocation( shader, "ligthPosEye" ), 1, &nonPickerParams->lightPos.x ) ); |
| 150 | GL_EXEC( glUniform1f( glGetUniformLocation( shader, "specExp" ), objVoxels_->getShininess() ) ); |
| 151 | GL_EXEC( glUniform1f( glGetUniformLocation( shader, "specularStrength" ), objVoxels_->getSpecularStrength() ) ); |
| 152 | float ambient = objVoxels_->getAmbientStrength() * ( objVoxels_->isSelected() ? SceneSettings::get( SceneSettings::FloatType::AmbientCoefSelectedObj ) : 1.0f ); |
| 153 | GL_EXEC( glUniform1f( glGetUniformLocation( shader, "ambientStrength" ), ambient ) ); |
| 154 | } |
| 155 | GL_EXEC( glUniform1i( glGetUniformLocation( shader, "useClippingPlane" ), |
| 156 | objVoxels_->globalClippedByPlane( renderParams.viewportId ) ) ); |
| 157 | GL_EXEC( glUniform4f( glGetUniformLocation( shader, "clippingPlane" ), |
| 158 | renderParams.clipPlane.n.x, renderParams.clipPlane.n.y, |
| 159 | renderParams.clipPlane.n.z, renderParams.clipPlane.d ) ); |
nothing calls this directly
no test coverage detected