@@ -95,18 +95,6 @@ class RenderingMode {
9595 pbos = [];
9696 pboTarget = 0x88EB ; // GL_PIXEL_PACK_BUFFER
9797
98- // Check if buffer mapping is available
99- #if FV_LIME_FORK
100- var extensions = GL .getSupportedExtensions ();
101- var hasMapBuffer = (extensions != null && extensions .indexOf (" GL_ARB_pixel_buffer_object" ) != - 1 );
102-
103- if (hasMapBuffer ) {
104- Sys .println (" Using PBO with buffer mapping (fast path)" );
105- } else {
106- Sys .println (" Using PBO with getBufferSubData (slow path)" );
107- }
108- #end
109-
11098 for (i in 0 ... PBO_BUFFERS ) {
11199 var buf = GL .createBuffer ();
112100 GL .bindBuffer (pboTarget , buf );
@@ -350,7 +338,7 @@ class RenderingMode {
350338
351339 // PBO readback with double buffering
352340 if (pbos .length == PBO_BUFFERS ) {
353- var readIndex = (pboIndex + 3 ) % PBO_BUFFERS ;
341+ var readIndex = (pboIndex + 4 ) % PBO_BUFFERS ;
354342 var writeIndex = pboIndex ;
355343
356344 // Start async readback to write PBO
@@ -361,46 +349,31 @@ class RenderingMode {
361349 // Try buffer mapping (fastest)
362350 GL .bindBuffer (pboTarget , pbos [readIndex ]);
363351
364- /* #if FV_LIME_FORK
365- var mappedPtr#if cpp :cpp.RawPointer<cpp.UInt8> #else :hl.NativeArray<hl.UI8> #end = @:privateAccess lime._internal.backend.native.NativeCFFI.fv_gl_map_buffer_range_pbo( frameSize);
366- if (mappedPtr != null) {
352+ try {
353+ GL . getBufferSubData ( pboTarget , 0 , frameSize , buffer );
354+
367355 if (useNetworkStreaming ) {
368356 NetworkStreamer .enqueueFrame (buffer );
369357 } else {
370358 enqueueFrame (buffer );
371359 }
360+ } catch (e : Dynamic ) {
361+ Sys .println (" getBufferSubData failed: " + e );
362+
363+ // Ultimate fallback: direct readPixels
372364 GL .bindBuffer (pboTarget , null );
373- pboIndex = (pboIndex + 1) % PBO_BUFFERS;
374- } else
375- #end
376- {*/
377- // Fallback: Use getBufferSubData
378- try {
379- GL .getBufferSubData (pboTarget , 0 , frameSize , buffer );
365+ GL .readPixels (0 , 0 , Main .VARIABLE_WIDTH , Main .VARIABLE_HEIGHT ,
366+ GL .RGB , GL .UNSIGNED_SHORT_5_6_5 , buffer );
380367
381- if (useNetworkStreaming ) {
382- NetworkStreamer .enqueueFrame (buffer );
383- } else {
384- enqueueFrame (buffer );
385- }
386- } catch (e : Dynamic ) {
387- Sys .println (" getBufferSubData failed: " + e );
388-
389- // Ultimate fallback: direct readPixels
390- GL .bindBuffer (pboTarget , null );
391- GL .readPixels (0 , 0 , Main .VARIABLE_WIDTH , Main .VARIABLE_HEIGHT ,
392- GL .RGB , GL .UNSIGNED_SHORT_5_6_5 , buffer );
393-
394- if (useNetworkStreaming ) {
395- NetworkStreamer .enqueueFrame (buffer );
396- } else {
397- enqueueFrame (buffer );
398- }
368+ if (useNetworkStreaming ) {
369+ NetworkStreamer .enqueueFrame (buffer );
370+ } else {
371+ enqueueFrame (buffer );
399372 }
400-
401- GL . bindBuffer ( pboTarget , null );
402- pboIndex = ( pboIndex + 1 ) % PBO_BUFFERS ;
403- // }
373+ }
374+
375+ GL . bindBuffer ( pboTarget , null ) ;
376+ pboIndex = ( pboIndex + 4 ) % PBO_BUFFERS ;
404377 } else {
405378 // Direct synchronous read
406379 GL .readPixels (0 , 0 , Main .VARIABLE_WIDTH , Main .VARIABLE_HEIGHT ,
0 commit comments