मैं वास्तव में एक घन जाल कोडिंग कर रहा हूं जहां सुपर विधि में मुझे घन शिखर पास करने की आवश्यकता है, जो एक फ्लोट [] है, लेकिन मैं इसे "मानव अनुकूल तरीके से" करना चाहता हूं इसलिए मैंने यह किया है:
private static FloatBuffer vertices = MemoryUtil.memAllocFloat(72);
private static final float[] A={0,0,0},B={0,1,0},C={1,1,0},D={1,0,0},E={0,0,0},F={0,1,0},G={1,1,0},H={1,0,0}; //Vertices
public class MyClass extends MyMeshClass
{
public MyClass()
{
super(
vertices
//Front
.put(A).put(B).put(C).put(D)
//Back
.put(E).put(F).put(G).put(H)
//Right
.put(D).put(C).put(G).put(H)
//Left
.put(A).put(B).put(F).put(E)
//Top
.put(B).put(F).put(G).put(C)
//Bottom
.put(A).put(E).put(H).put(D).array(),
Doing other cool stuff here);
}
}
लेकिन सरणी में कनवर्ट करते समय मैं असमर्थित ऑपरेशन अपवाद के साथ समाप्त होता हूं, इसलिए मैंने फ्लोटबफर को इस तरह सरणी में बदलकर अलग-अलग प्रयास किए हैं
public static float[] toArray(FloatBuffer buffer)
{
float[] array = new float[buffer.limit()];
buffer.get(array);
return array;
}
लेकिन मुझे get (सरणी) पर BufferUnderflowException मिलता है।
क्या किसी को पता है कि यह क्यों काम नहीं कर रहा है?
2 जवाब
जावाडोक के अनुसार Buffer.array()
UnsupportedOperationException
को फेंक दिया जाएगा यदि बफर सुलभ सरणी द्वारा समर्थित नहीं है - https://docs.oracle.com/javase/8/docs/api/java/nio/Buffer.html#array--
ऐसी स्थिति तब होगी जब बफर जेवीएम ढेर में नहीं, बल्कि मूल स्मृति में आवंटित सरणी का उपयोग करता है। चूंकि एलडब्ल्यूजेजीएल का MemoryUtil.memAllocFloat
opengl के लिए अनुकूलित है, मुझे लगता है कि यह मूल स्मृति का उपयोग करता है, इसलिए array()
ऐसे बफर पर लागू विधि विफल हो जाती है।
यदि आप ढेर में बफर आवंटित करना चाहते हैं तो आप इसका उपयोग कर सकते हैं यानी।
FloatBuffer vertices = FloatBuffer.allocate(72);
या
FloatBuffer vertices = FloatBuffer.wrap(new float[72]);
``
क्या आपने इसे इस तरह से आजमाया?
FloatBuffer buf = FloatBuffer.allocate(10);
buf.put(1f).put(2f).put(3f).put(new float[]{4,5,6});
System.out.println(Arrays.toString(buf.array()));
प्रिंटों
[1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 0.0, 0.0, 0.0, 0.0]
संबंधित सवाल
नए सवाल
java
जावा एक उच्च स्तरीय प्रोग्रामिंग भाषा है। इस टैग का उपयोग तब करें जब आपको भाषा का उपयोग करने या समझने में समस्या हो। इस टैग का उपयोग शायद ही कभी किया जाता है और इसका उपयोग अक्सर [वसंत], [वसंत-बूट], [जकार्ता-ई], [Android], [javafx], [हडूप], [श्रेणी] और [मावेन] के साथ किया जाता है।