void ovalLocatorDrawOverride::draw (const MHWRender::MDrawContext &context, const MUserData *data) { MPointArray vertices =ovalLocator::vertices () ; // get cached data float color [3] ={ 0.0f, 1.0f, 0.0f } ; float multiplier =1.0f ; const ovalLocatorData *ovalData =dynamic_cast<const ovalLocatorData *>(data) ; if ( ovalData ) multiplier =ovalData->multiplier ; // get state data MStatus status ; const MMatrix transform =context.getMatrix (MHWRender::MDrawContext::kWorldViewMtx, &status) ; if ( status !=MStatus::kSuccess ) return ; const MMatrix projection =context.getMatrix (MHWRender::MDrawContext::kProjectionMtx, &status) ; if ( status !=MStatus::kSuccess ) return ; const int displayStyle =context.getDisplayStyle () ; // get renderer MHWRender::MRenderer *theRenderer =MHWRender::MRenderer::theRenderer () ; if ( !theRenderer ) return ; // GL Draw if ( theRenderer->drawAPIIsOpenGL () ) { // set colour glColor3fv (color) ; // set world matrix glMatrixMode (GL_MODELVIEW) ; glPushMatrix () ; glLoadMatrixd (transform.matrix [0]) ; // set projection matrix glMatrixMode (GL_PROJECTION) ; glPushMatrix () ; glLoadMatrixd (projection.matrix [0]) ; if ( displayStyle & MHWRender::MDrawContext::kGouraudShaded ) { // See myShadedDraw glPushAttrib (GL_CURRENT_BIT) ; glBegin (GL_TRIANGLE_FAN) ; glVertex3f (0, 0, 0) ; for ( int i =0 ; i < vertices.length () ; ++i ) glVertex3f (vertices [i].x * multiplier, vertices [i].y * multiplier, vertices [i].z * multiplier) ; glEnd () ; glPopAttrib () ; } if ( displayStyle & MHWRender::MDrawContext::kWireFrame ) { // See myWireFrameDraw glBegin (GL_LINES) ; for ( int i =0 ; i < vertices.length () - 1 ; ++i ) { glVertex3f (vertices [i].x * multiplier, vertices [i].y * multiplier, vertices [i].z * multiplier) ; glVertex3f (vertices [i + 1].x * multiplier, vertices [i + 1].y * multiplier, vertices [i + 1].z * multiplier) ; } glEnd () ; } glPopMatrix () ; glMatrixMode (GL_MODELVIEW) ; glPopMatrix () ; } }
void OpenSubdivDrawOverride::draw(const MHWRender::MDrawContext& context, const MUserData* data) { // get cached data bool isSelected = false; SubdivUserData* mesh = const_cast<SubdivUserData*>(dynamic_cast<const SubdivUserData*>(data)); if (mesh) { isSelected = mesh->fIsSelected; } // set colour static const float colorData[] = {1.0f, 0.0f, 0.0f}; static const float selectedColorData[] = {0.0f, 1.0f, 0.0f}; if(isSelected) glColor3fv(selectedColorData); else glColor3fv(colorData); MStatus status; // set world matrix glMatrixMode(GL_MODELVIEW); glPushMatrix(); MMatrix transform = context.getMatrix(MHWRender::MDrawContext::kWorldViewMtx, &status); if (status) { glLoadMatrixd(transform.matrix[0]); } // set projection matrix glMatrixMode(GL_PROJECTION); glPushMatrix(); MMatrix projection = context.getMatrix(MHWRender::MDrawContext::kProjectionMtx, &status); if (status) { glLoadMatrixd(projection.matrix[0]); } const int displayStyle = context.getDisplayStyle(); glPushAttrib( GL_CURRENT_BIT ); glPushAttrib( GL_ENABLE_BIT); if(displayStyle & MHWRender::MDrawContext::kGouraudShaded) { glEnable(GL_LIGHTING); glEnable(GL_LIGHT0); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); }else if(displayStyle & MHWRender::MDrawContext::kWireFrame){ glDisable(GL_LIGHTING); glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); } { int vertexStride = mesh->GetVertexStride(); // int varyingStride = mesh->GetVaryingStride(); //printf("Draw. stride = %d\n", stride); glBindBuffer(GL_ARRAY_BUFFER, mesh->GetVertexBuffer()); glVertexPointer(3, GL_FLOAT, vertexStride, ((char*)(0))); glEnableClientState(GL_VERTEX_ARRAY); glBindBuffer(GL_ARRAY_BUFFER, mesh->GetVertexBuffer()); glNormalPointer(GL_FLOAT, vertexStride, ((char*)(12))); // glBindBuffer(GL_ARRAY_BUFFER, mesh->GetVaryingBuffer()); // glNormalPointer(GL_FLOAT, varyingStride, ((char*)(0))); glEnableClientState(GL_NORMAL_ARRAY); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, mesh->GetElementBuffer()); glDrawElements(mesh->GetPrimType(), mesh->GetNumIndices(), GL_UNSIGNED_INT, NULL); glBindBuffer(GL_ARRAY_BUFFER, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); } glPopAttrib(); glPopAttrib(); glPopMatrix(); glMatrixMode(GL_MODELVIEW); glPopMatrix(); glColor3f(1, 1, 1); }
void UsdMayaGLHdRenderer::RenderVp2( const RequestDataArray &requests, const MHWRender::MDrawContext& context, UsdImagingGLRenderParams params) const { using namespace MHWRender; MStatus status; MHWRender::MRenderer* theRenderer = MHWRender::MRenderer::theRenderer(); if (!theRenderer) return; MHWRender::MStateManager* stateMgr = context.getStateManager(); if (!stateMgr) return; const int displayStyle = context.getDisplayStyle(); if (displayStyle == 0) return; if (displayStyle & MDrawContext::kXray) { // Viewport 2.0 will call draw() twice when drawing transparent objects // (X-Ray mode). We skip the first draw() call. const MRasterizerState* rasterState = stateMgr->getRasterizerState(); if (rasterState && rasterState->desc().cullMode == MRasterizerState::kCullFront) { return; } } if (!theRenderer->drawAPIIsOpenGL()) return; glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT); const MMatrix worldView = context.getMatrix(MHWRender::MDrawContext::kWorldViewMtx, &status); GfMatrix4d modelViewMatrix(worldView.matrix); const MMatrix projection = context.getMatrix(MHWRender::MDrawContext::kProjectionMtx, &status); GfMatrix4d projectionMatrix(projection.matrix); // get root matrix MMatrix root = context.getMatrix(MHWRender::MDrawContext::kWorldMtx, &status); GfMatrix4d rootMatrix(root.matrix); // Extract camera settings from maya view int viewX, viewY, viewWidth, viewHeight; context.getViewportDimensions(viewX, viewY, viewWidth, viewHeight); GfVec4d viewport(viewX, viewY, viewWidth, viewHeight); M3dView::DisplayStyle viewDisplayStyle = displayStyle & MDrawContext::kWireFrame ? M3dView::kWireFrame : M3dView::kGouraudShaded; if(viewDisplayStyle == M3dView::kGouraudShaded) { px_vp20Utils::setupLightingGL(context); glEnable(GL_LIGHTING); } _renderer->SetCameraState(modelViewMatrix, projectionMatrix, viewport); _renderer->SetLightingStateFromOpenGL(); TF_FOR_ALL(it, requests) { RequestData request = *it; if(viewDisplayStyle == M3dView::kWireFrame && request.drawRequest.displayStyle() == M3dView::kGouraudShaded) { request.drawRequest.setDisplayStyle(viewDisplayStyle); } switch(request.drawRequest.token()) { case UsdMayaGLHdRenderer::DRAW_WIREFRAME: case UsdMayaGLHdRenderer::DRAW_POINTS: { params.drawMode = request.drawRequest.token() == UsdMayaGLHdRenderer::DRAW_WIREFRAME ? UsdImagingGLDrawMode::DRAW_WIREFRAME : UsdImagingGLDrawMode::DRAW_POINTS; params.enableLighting = false; params.cullStyle = UsdImagingGLCullStyle::CULL_STYLE_NOTHING; params.overrideColor = request.fWireframeColor; // Get and render usdPrim _renderer->Render(_renderedPrim, params); break; } case UsdMayaGLHdRenderer::DRAW_SHADED_FLAT: case UsdMayaGLHdRenderer::DRAW_SHADED_SMOOTH: { params.drawMode = ((request.drawRequest.token() == UsdMayaGLHdRenderer::DRAW_SHADED_FLAT) ? UsdImagingGLDrawMode::DRAW_GEOM_FLAT : UsdImagingGLDrawMode::DRAW_GEOM_SMOOTH); params.enableLighting = true; params.cullStyle = UsdImagingGLCullStyle::CULL_STYLE_BACK_UNLESS_DOUBLE_SIDED; _renderer->Render(_renderedPrim, params); break; } case UsdMayaGLHdRenderer::DRAW_BOUNDING_BOX: { px_vp20Utils::RenderBoundingBox(request.bounds, request.fWireframeColor, worldView, projection); break; } } }