openImplicit
    Michael Hall 
    mik3hall at gmail.com
       
    Fri Apr 21 18:36:33 UTC 2023
    
    
  
Thanks
> On Apr 21, 2023, at 1:14 PM, Maurizio Cimadamore <maurizio.cimadamore at oracle.com> wrote:
> 
> Yes. The semantics of `SegmentScope.auto()` is the same as that of `MemorySession.openImplicit`.
> 
> Maurizio
> 
> On 21/04/2023 19:08, Michael Hall wrote:
>> Would this be the correct jdk20 change?
>> 
>> //textureBufferIds = MemorySegment.allocateNative(1 * 4 * 3, SegmentScope.openImplicit());
>>     textureBufferIds = MemorySegment.allocateNative(1 * 4 * 3, SegmentScope.auto());
I thought this is all I did that would affect this code. Except for pointing at different OS/X dylib’s. 
But on...
   gl.glGenTextures(1, textureBufferIds);
    idTexture = (int) textureBufferIds.get(ValueLayout.JAVA_INT, 0);
    Debug.debug(debug, "FBO: Got texture ID : " + idTexture);
    // Check errors
    if (idTexture == 0) {
      diagnoseError(gl, "texture");
    }
I get this error…
FBO: texture handle=0 but get no OpenGL error. This may happen if the call was not issued from main thread on macOS
This appears to come down to…
    public static MethodHandle glGenTextures$MH() {
        return RuntimeHelper.requireNonNull(constants$86.glGenTextures$MH,"glGenTextures");
    }
    /**
     * {@snippet :
     * void glGenTextures(GLsizei n, GLuint* textures);
     * }
     */
    public static void glGenTextures(int n, MemorySegment textures) {
        var mh$ = glGenTextures$MH();
        try {
        	System.out.println("glut_h_3: glGenTextures n = " + n + " textures = " + textures + " mh$ = " + mh$);
            mh$.invokeExact(n, textures);
        } catch (Throwable ex$) {
            throw new AssertionError("should not reach here", ex$);
        }
    }
    public static MethodHandle glGetBooleanv$MH() {
        return RuntimeHelper.requireNonNull(constants$86.glGetBooleanv$MH,"glGetBooleanv");
    }
Where the println shows…
glut_h_3: glGenTextures n = 1 textures = MemorySegment{ array: Optional.empty address:105553149374912 limit: 12 } mh$ = MethodHandle(int,MemorySegment)void
Does the empty address indicate a problem or does this still appear correct and my replaced native code is the probable problem?
    
    
More information about the panama-dev
mailing list