JNIEXPORT void JNICALL Java_org_lwjgl_opengl_EXTShaderImageLoadStore_nglMemoryBarrierEXT(JNIEnv *env, jclass clazz, jint barriers, jlong function_pointer) {
	glMemoryBarrierEXTPROC glMemoryBarrierEXT = (glMemoryBarrierEXTPROC)((intptr_t)function_pointer);
	glMemoryBarrierEXT(barriers);
}
Ejemplo n.º 2
0
void ABufferGeometryGLProcessor::geometryRender() {
    ABUFFER_PROFILE("Total-Time");

    // tempImage_ = new Image(outport_.getDimensions());
    auto tempImage_ = outport_.getEditableData();
    ImageGL* tempImageGL = tempImage_->getEditableRepresentation<ImageGL>();
    ivec2 dim = outport_.getDimensions();

    bool abufferEnabled = abuffer_.settings_.abufferEnable_.get();

    // abuffer initialization
    if (abufferEnabled) {
        ABUFFER_PROFILE("Initialize-abuffer");
        abuffer_.abuffer_initABuffer(dim, updateRequried_);

        LGL_ERROR;
        abuffer_.abuffer_addShaderDefinesAndBuild(&abuffer_.resolveABufferShader_);

        LGL_ERROR;
        ABUFFER_PROFILE("Reset-abuffer");
        abuffer_.aBuffer_resetLinkList(tempImageGL);

        updateRequried_ = false;
    }

    abuffer_.abuffer_addShaderDefinesAndBuild(&abufferGeometryShader_);

    // Rendering
    {
        ABUFFER_PROFILE("Rendering");

        tempImageGL = tempImage_->getEditableRepresentation<ImageGL>();
        utilgl::activateAndClearTarget(outport_);

        // initialize shader
        abufferGeometryShader_.activate();
        // LGL_ERROR;
        utilgl::setShaderUniforms(abufferGeometryShader_, camera_, "camera_");
        // LGL_ERROR;
        utilgl::setShaderUniforms(abufferGeometryShader_, lightingProperty_, "light_");
        // LGL_ERROR;

        if (abufferEnabled) {
            abuffer_.abuffer_addUniforms(&abufferGeometryShader_);
            abufferGeometryShader_.setUniform("globalTransparency_", transparency_.get());
        }

        utilgl::GlBoolState depthTest(GL_DEPTH_TEST, true);
        utilgl::CullFaceState culling(cullFace_.get());
        utilgl::PolygonModeState polygon(polygonMode_.get(), renderLineWidth_, renderPointSize_);

        for (auto& drawer : drawers_) {
            utilgl::setShaderUniforms(abufferGeometryShader_, *(drawer.second->getGeometry()),
                                      "geometry_");
            drawer.second->draw();
        }

        abufferGeometryShader_.deactivate();
        utilgl::deactivateCurrentTarget();

        glMemoryBarrierEXT(GL_ALL_BARRIER_BITS_EXT);
    }

    // abuffer resolve
    if (abufferEnabled) {
        ABUFFER_PROFILE("Resolving-abuffer");
        utilgl::activateAndClearTarget(outport_);
        abuffer_.aBuffer_resolveLinkList(tempImageGL);
        utilgl::deactivateCurrentTarget();
    }
}