void CompositeProcessorGL::compositePortsToOutport(ImageOutport& outport, ImageType type, ImageInport& inport) { if (inport.isReady() && outport.hasData()) { utilgl::activateTarget(outport, type); shader_.activate(); TextureUnitContainer units; utilgl::bindAndSetUniforms(shader_, units, *inport.getData(), "tex0", ImageType::ColorDepthPicking); utilgl::bindAndSetUniforms(shader_, units, *outport.getData(), "tex1", ImageType::ColorDepthPicking); utilgl::setShaderUniforms(shader_, outport, "outportParameters"); utilgl::singleDrawImagePlaneRect(); shader_.deactivate(); utilgl::deactivateCurrentTarget(); } }
void activateTargetAndCopySource(ImageOutport& outport, ImageInport& inport, ImageType type) { auto outImage = outport.getEditableData(); auto outImageGL = outImage->getEditableRepresentation<ImageGL>(); auto inImage = inport.getData(); auto inImageGL = inImage->getRepresentation<ImageGL>(); inImageGL->copyRepresentationsTo(outImageGL); outImageGL->activateBuffer(type); }
void updateAndActivateTarget(ImageOutport& outport, ImageInport& inport) { auto outImage = outport.getEditableData(); auto outImageGL = outImage->getEditableRepresentation<ImageGL>(); outImageGL->updateFrom(inport.getData()->getRepresentation<ImageGL>()); outImageGL->activateBuffer(); }
void bindAndSetUniforms(Shader& shader, TextureUnitContainer& cont, ImageInport& port, ImageType type) { bindAndSetUniforms(shader, cont, *port.getData(), port.getIdentifier(), type); }
void setShaderUniforms(Shader& shader, const ImageInport& inport, const std::string samplerID) { setShaderUniforms(shader, *inport.getData(), samplerID.empty() ? inport.getIdentifier() + "Parameters" : samplerID); }
void unbindTextures(const ImageInport& inport) { unbindTextures(*inport.getData(), true, true, true); }
void unbindPickingTexture(const ImageInport& inport) { unbindTextures(*inport.getData(), false, false, true); }
void unbindDepthTexture(const ImageInport& inport) { unbindTextures(*inport.getData(), false, true, false); }
void bindTextures(const ImageInport& inport, const TextureUnit& colorTexUnit, const TextureUnit& depthTexUnit, const TextureUnit& pickingTexUnit) { bindTextures(*inport.getData(), true, true, true, colorTexUnit.getEnum(), depthTexUnit.getEnum(), pickingTexUnit.getEnum()); }
void bindPickingTexture(const ImageInport& inport, const TextureUnit& texUnit) { bindTextures(*inport.getData(), false, false, true, 0, 0, texUnit.getEnum()); }
void bindColorTexture(const ImageInport& inport, const TextureUnit& texUnit) { bindTextures(*inport.getData(), true, false, false, texUnit.getEnum(), 0, 0); }
void bindTextures(const ImageInport& inport, GLenum colorTexUnit, GLenum depthTexUnit, GLenum pickingTexUnit) { bindTextures(*inport.getData(), true, true, true, colorTexUnit, depthTexUnit, pickingTexUnit); }
void bindPickingTexture(const ImageInport& inport, GLenum texUnit) { bindTextures(*inport.getData(), false, false, true, 0, 0, texUnit); }
void bindDepthTexture(const ImageInport& inport, GLenum texUnit) { bindTextures(*inport.getData(), false, true, false, 0, texUnit, 0); }