MCPcopy Create free account
hub / github.com/MeshInspector/MeshLib / render_

Method render_

source/MRViewer/MRRenderVolumeObject.cpp:102–233  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

100}
101
102void 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 ) );

Callers

nothing calls this directly

Calls 12

diagonalFunction · 0.85
getDepthFunctionLessFunction · 0.85
resetDirtyMethod · 0.80
getVisualizePropertyMethod · 0.80
isSelectedMethod · 0.80
bindVertexAttribArrayFunction · 0.70
getFunction · 0.50
dataMethod · 0.45
validMethod · 0.45
loadDataOptMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected