Bug 1228

Summary: Allow setting other glBlendFunc in GLRegion renderer
Product: [JogAmp] Jogl Reporter: Alan Sambol <alan.zgb>
Component: graphAssignee: Sven Gothel <sgothel>
Status: RESOLVED WONTFIX    
Severity: enhancement CC: alan.zgb, kdropucic, rami.santina, sgothel
Priority: ---    
Version: tbd   
Hardware: All   
OS: all   
Type: FEATURE SCM Refs:
Workaround: ---
Bug Depends on:    
Bug Blocks: 1064    

Description Alan Sambol 2015-09-23 13:30:01 CEST
For RegionRenderer, blending can currently be set by renderState.setHintMask(RenderState.BITHINT_BLENDING_ENABLED). This always uses gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA) under the hood (hardcoded).

It would be nice to allow setting other blending functions for RenderState / TextRendererUtil, as we use different blending function in our framework - gl.glBlendFunc(GL.ONE, GL.GL_ONE_MINUS_SRC_ALPHA), for premultiplied alpha, which is de facto standard: http://blogs.msdn.com/b/shawnhar/archive/2009/11/06/premultiplied-alpha.aspx

Currently, I found it hardcoded in the following classes (it even mentions possibility of other functions in comments):

VBORegionSPES2, line 234:
        if( renderer.getRenderState().isHintMaskSet(RenderState.BITHINT_BLENDING_ENABLED) ) {
            gl.glBlendFunc(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA);
        }

VBORegion2PVBAAES2, line 607:
VBORegion2PMSAAES2, line 493:

        if( blendingEnabled ) {
            gl.glClearColor(0f, 0f, 0f, 0.0f);
            gl.glClear(GL.GL_COLOR_BUFFER_BIT); // no depth-buffer w/ blending
            // For already pre-multiplied alpha values, use:
            // gl.glBlendFunc(GL.GL_ONE, GL.GL_ONE_MINUS_SRC_ALPHA);

            // Multiply RGB w/ Alpha, preserve alpha for renderFBO(..)
            gl.glBlendFuncSeparate(GL.GL_SRC_ALPHA, GL.GL_ONE_MINUS_SRC_ALPHA, GL.GL_ONE, GL.GL_ONE_MINUS_SRC_ALPHA);
        } else {
            gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
        }
Comment 1 Sven Gothel 2024-02-14 00:50:09 CET
Not for now, perhaps on commission / contract