void Video::renderImpl(RenderContext& ctxt) const { Mutex::Lock l(mutex); if(skipRender()) return; //Video is especially optimized for GL rendering //It needs special treatment for SOFTWARE contextes if(ctxt.contextType != RenderContext::GL) { LOG(LOG_NOT_IMPLEMENTED, "Video::renderImpl on SOFTWARE context is not yet supported"); return; } if(!netStream.isNull() && netStream->lockIfReady()) { //All operations here should be non blocking //Get size videoWidth=netStream->getVideoWidth(); videoHeight=netStream->getVideoHeight(); const MATRIX totalMatrix=getConcatenatedMatrix(); float m[16]; totalMatrix.get4DMatrix(m); ctxt.lsglLoadMatrixf(m); //Enable YUV to RGB conversion //width and height will not change now (the Video mutex is acquired) ctxt.renderTextured(netStream->getTexture(), 0, 0, width, height, clippedAlpha(), RenderContext::YUV_MODE); netStream->unlock(); } }
void MatrixApplier::concat(const MATRIX& m) { float matrix[16]; m.get4DMatrix(matrix); lsglMultMatrixf(matrix); rt->setMatrixUniform(LSGL_MODELVIEW); }
MatrixApplier::MatrixApplier(const MATRIX& m) { //First of all try to preserve current matrix lsglPushMatrix(); float matrix[16]; m.get4DMatrix(matrix); lsglMultMatrixf(matrix); rt->setMatrixUniform(LSGL_MODELVIEW); }
MatrixApplier::MatrixApplier(const MATRIX& m) { //First of all try to preserve current matrix glPushMatrix(); if(glGetError()==GL_STACK_OVERFLOW) { ::abort(); } float matrix[16]; m.get4DMatrix(matrix); glMultMatrixf(matrix); }
void MatrixApplier::concat(const MATRIX& m) { float matrix[16]; m.get4DMatrix(matrix); glMultMatrixf(matrix); }