Optimize ImDrawData memory consumption
This commit is contained in:
1 parent
1dcf2328a4
commit
60cb864fef
1 file changed
+17
-16
@@ -15,12 +15,11 @@ import java.nio.ByteOrder;
|
|||||||
*/
|
*/
|
||||||
public final class ImDrawData extends ImGuiStruct {
|
public final class ImDrawData extends ImGuiStruct {
|
||||||
public static final int SIZEOF_IM_DRAW_IDX = 2;
|
public static final int SIZEOF_IM_DRAW_IDX = 2;
|
||||||
public static final int SIZEOF_IM_DRAW_VERT = (4 + 1) * 4;
|
public static final int SIZEOF_IM_DRAW_VERT = 20;
|
||||||
|
|
||||||
private static final int FACTOR = 5_000;
|
private static final int RESIZE_FACTOR = 5_000;
|
||||||
|
|
||||||
private ByteBuffer idxBuffer = ByteBuffer.allocateDirect(SIZEOF_IM_DRAW_IDX * FACTOR).order(ByteOrder.nativeOrder());
|
private static ByteBuffer dataBuffer = ByteBuffer.allocateDirect(25_000).order(ByteOrder.nativeOrder());
|
||||||
private ByteBuffer vtxBuffer = ByteBuffer.allocateDirect(SIZEOF_IM_DRAW_VERT * FACTOR).order(ByteOrder.nativeOrder());
|
|
||||||
|
|
||||||
public ImDrawData(final long ptr) {
|
public ImDrawData(final long ptr) {
|
||||||
super(ptr);
|
super(ptr);
|
||||||
@@ -91,16 +90,17 @@ public final class ImDrawData extends ImGuiStruct {
|
|||||||
|
|
||||||
public ByteBuffer getCmdListIdxBufferData(final int cmdListIdx) {
|
public ByteBuffer getCmdListIdxBufferData(final int cmdListIdx) {
|
||||||
final int idxBufferCapacity = getCmdListIdxBufferSize(cmdListIdx) * SIZEOF_IM_DRAW_IDX;
|
final int idxBufferCapacity = getCmdListIdxBufferSize(cmdListIdx) * SIZEOF_IM_DRAW_IDX;
|
||||||
if (idxBuffer.capacity() < idxBufferCapacity) {
|
if (dataBuffer.capacity() < idxBufferCapacity) {
|
||||||
idxBuffer = ByteBuffer.allocateDirect(idxBufferCapacity + FACTOR).order(ByteOrder.nativeOrder());
|
dataBuffer.clear();
|
||||||
|
dataBuffer = ByteBuffer.allocateDirect(idxBufferCapacity + RESIZE_FACTOR).order(ByteOrder.nativeOrder());
|
||||||
}
|
}
|
||||||
|
|
||||||
nGetCmdListIdxBufferData(cmdListIdx, idxBuffer, idxBufferCapacity);
|
nGetCmdListIdxBufferData(cmdListIdx, dataBuffer, idxBufferCapacity);
|
||||||
|
|
||||||
idxBuffer.position(0);
|
dataBuffer.position(0);
|
||||||
idxBuffer.limit(idxBufferCapacity);
|
dataBuffer.limit(idxBufferCapacity);
|
||||||
|
|
||||||
return idxBuffer;
|
return dataBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private native void nGetCmdListIdxBufferData(int cmdListIdx, ByteBuffer idxBuffer, int idxBufferCapacity); /*
|
private native void nGetCmdListIdxBufferData(int cmdListIdx, ByteBuffer idxBuffer, int idxBufferCapacity); /*
|
||||||
@@ -116,16 +116,17 @@ public final class ImDrawData extends ImGuiStruct {
|
|||||||
|
|
||||||
public ByteBuffer getCmdListVtxBufferData(final int cmdListIdx) {
|
public ByteBuffer getCmdListVtxBufferData(final int cmdListIdx) {
|
||||||
final int vtxBufferCapacity = getCmdListVtxBufferSize(cmdListIdx) * SIZEOF_IM_DRAW_VERT;
|
final int vtxBufferCapacity = getCmdListVtxBufferSize(cmdListIdx) * SIZEOF_IM_DRAW_VERT;
|
||||||
if (vtxBuffer.capacity() < vtxBufferCapacity) {
|
if (dataBuffer.capacity() < vtxBufferCapacity) {
|
||||||
vtxBuffer = ByteBuffer.allocateDirect(vtxBufferCapacity + FACTOR).order(ByteOrder.nativeOrder());
|
dataBuffer.clear();
|
||||||
|
dataBuffer = ByteBuffer.allocateDirect(vtxBufferCapacity + RESIZE_FACTOR).order(ByteOrder.nativeOrder());
|
||||||
}
|
}
|
||||||
|
|
||||||
nGetCmdListVtxBufferData(cmdListIdx, vtxBuffer, vtxBufferCapacity);
|
nGetCmdListVtxBufferData(cmdListIdx, dataBuffer, vtxBufferCapacity);
|
||||||
|
|
||||||
vtxBuffer.position(0);
|
dataBuffer.position(0);
|
||||||
vtxBuffer.limit(vtxBufferCapacity);
|
dataBuffer.limit(vtxBufferCapacity);
|
||||||
|
|
||||||
return vtxBuffer;
|
return dataBuffer;
|
||||||
}
|
}
|
||||||
|
|
||||||
private native void nGetCmdListVtxBufferData(int cmdListIdx, ByteBuffer vtxBuffer, int vtxBufferCapacity); /*
|
private native void nGetCmdListVtxBufferData(int cmdListIdx, ByteBuffer vtxBuffer, int vtxBufferCapacity); /*
|
||||||
|
|||||||
Reference in new issue
Block a user