[quote]The VBO implementation in JOGL is check-check-double-checked in Java code, to ensure there is no invalid memory access. It’s even implemented in a HashMap<Integer,Integer>. This is done to ensure that JOGL applets do not need a security dialog.
[/quote]
Ok, I´ve looked at the Implementation and your right, some gl-method calls generate this overhead, i.e. glBindBuffer and glBufferData…
But let’s look at the bindless graphics example code from the nvidia presentation…
INIT (ONLY ONE TIME)
for (i = 0; i < N; ++i) {
BindBuffer(ARRAY_BUFFER, vboNames[i]);
BufferData(ARRAY_BUFFER, size, ptr, STATIC_DRAW);
GetBufferParameterui64vNV(ARRAY_BUFFER, BUFFER_GPU_ADDRESS_NV, &vboAddrs[i]);
MakeBufferResidentNV(ARRAY_BUFFER, READ_ONLY);
}
FORMAT/ENABLED CHANGE (RARE)
EnableClientState(COLOR_ARRAY);
EnableClientState(VERTEX_ARRAY);
ColorFormatNV(4, UNSIGNED_BYTE, 20);
VertexFormatNV(4, FLOAT, 20);
EnableClientState(VERTEX_ATTRIB_ARRAY_UNIFIED_NV);
BUFFER CHANGE (FREQUENT)
for (i = 0; i < N; ++i) {
// point at buffer i
BufferAddressRangeNV(COLOR_ARRAY_ADDRESS_NV, 0, vboAddrs[i], size);
BufferAddressRangeNV(VERTEX_ARRAY_ADDRESS_NV, 0, vboAddrs[i]+4, size-4);
DrawArrays(POINTS, 0, size/20);
}
The above code uses the functions “with overhead”. But they are only called on initialization of the buffer…
All other functions doesn´t have this overhead, have they? Therefore I understand your objection not completely:
[quote]So… the bindless extension allows you access to direct GPU points, to get rid of the conversion step in the driver, from handle to pointer. If this extension would be officially added to JOGL, its advantages would similarly be destroyed by the ‘safe’ JOGL wrapping code, which does even a slower job than the driver would have
[/quote]
Or do I think in the wrong direction?
BTW: When I try to build jogl from source i get some errors, while building one of the nativewindows libraries… I have found a workaround (I removed the “nativewindow-compilation-code” from the build.xml and copied the nativewindow libraries to the build folder) but nevertheless I would like to build the source without this workaround… Maybe someone knows whats going on/wrong here?