@@ -4640,44 +4640,23 @@ static void OPENGL_SetVertexBufferData(
46404640
46414641 /* FIXME: Staging buffer for elementSizeInBytes < vertexStride! */
46424642
4643- const GLsizeiptr updateSize = (GLsizeiptr ) (elementCount * vertexStride );
4644-
4645- #ifdef USE_ES3
4646- /* GLES3 optimization: Use glMapBufferRange to avoid CPU-GPU sync overhead.
4647- * GL_MAP_UNSYNCHRONIZED_BIT is critical for NoOverwrite (ring buffer) performance.
4648- * Desktop OpenGL doesn't benefit from this, so keep GLES3-only.
4649- */
4650- if (renderer -> supports_ARB_map_buffer_range && renderer -> glMapBufferRange != NULL )
4643+ if ( options == FNA3D_SETDATAOPTIONS_NOOVERWRITE &&
4644+ renderer -> supports_ARB_map_buffer_range )
46514645 {
4652- GLbitfield mapFlags = GL_MAP_WRITE_BIT ;
4653-
4654- if (options == FNA3D_SETDATAOPTIONS_NOOVERWRITE )
4655- {
4656- mapFlags |= GL_MAP_UNSYNCHRONIZED_BIT ; /* No sync - huge speedup! */
4657- }
4658- else if (options == FNA3D_SETDATAOPTIONS_DISCARD )
4659- {
4660- mapFlags |= GL_MAP_INVALIDATE_RANGE_BIT ; /* Invalidate old data */
4661- }
4662-
4663- void * ptr = renderer -> glMapBufferRange (
4646+ void * ptr = renderer -> glMapBufferRange (
46644647 GL_ARRAY_BUFFER ,
46654648 (GLintptr ) offsetInBytes ,
4666- updateSize ,
4667- mapFlags
4649+ ( GLsizeiptr ) ( elementCount * vertexStride ) ,
4650+ GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT
46684651 );
4669-
46704652 if (ptr != NULL )
46714653 {
4672- SDL_memcpy (ptr , data , updateSize );
4654+ SDL_memcpy (ptr , data , ( elementCount * vertexStride ) );
46734655 renderer -> glUnmapBuffer (GL_ARRAY_BUFFER );
4674- return ;
46754656 }
4676- /* Fall through to glBufferSubData if map failed */
4657+ return ;
46774658 }
4678- #endif
4679-
4680- /* Fallback: standard glBufferData/glBufferSubData path */
4659+
46814660 if (options == FNA3D_SETDATAOPTIONS_DISCARD )
46824661 {
46834662 renderer -> glBufferData (
@@ -4691,7 +4670,7 @@ static void OPENGL_SetVertexBufferData(
46914670 renderer -> glBufferSubData (
46924671 GL_ARRAY_BUFFER ,
46934672 (GLintptr ) offsetInBytes ,
4694- updateSize ,
4673+ ( GLsizeiptr ) ( elementCount * vertexStride ) ,
46954674 data
46964675 );
46974676}
@@ -4862,39 +4841,23 @@ static void OPENGL_SetIndexBufferData(
48624841
48634842 BindIndexBuffer (renderer , glBuffer -> handle );
48644843
4865- #ifdef USE_ES3
4866- /* GLES3 optimization: Use glMapBufferRange for index buffers too */
4867- if (renderer -> supports_ARB_map_buffer_range && renderer -> glMapBufferRange != NULL )
4844+ if ( options == FNA3D_SETDATAOPTIONS_NOOVERWRITE &&
4845+ renderer -> supports_ARB_map_buffer_range )
48684846 {
4869- GLbitfield mapFlags = GL_MAP_WRITE_BIT ;
4870-
4871- if (options == FNA3D_SETDATAOPTIONS_NOOVERWRITE )
4872- {
4873- mapFlags |= GL_MAP_UNSYNCHRONIZED_BIT ;
4874- }
4875- else if (options == FNA3D_SETDATAOPTIONS_DISCARD )
4876- {
4877- mapFlags |= GL_MAP_INVALIDATE_RANGE_BIT ;
4878- }
4879-
4880- void * ptr = renderer -> glMapBufferRange (
4847+ void * ptr = renderer -> glMapBufferRange (
48814848 GL_ELEMENT_ARRAY_BUFFER ,
48824849 (GLintptr ) offsetInBytes ,
48834850 (GLsizeiptr ) dataLength ,
4884- mapFlags
4851+ GL_MAP_WRITE_BIT | GL_MAP_UNSYNCHRONIZED_BIT
48854852 );
4886-
48874853 if (ptr != NULL )
48884854 {
48894855 SDL_memcpy (ptr , data , dataLength );
48904856 renderer -> glUnmapBuffer (GL_ELEMENT_ARRAY_BUFFER );
4891- return ;
48924857 }
4893- /* Fall through if map failed */
4858+ return ;
48944859 }
4895- #endif
48964860
4897- /* Fallback: standard path */
48984861 if (options == FNA3D_SETDATAOPTIONS_DISCARD )
48994862 {
49004863 renderer -> glBufferData (
@@ -5377,16 +5340,8 @@ static uint8_t OPENGL_SupportsHardwareInstancing(FNA3D_Renderer *driverData)
53775340
53785341static uint8_t OPENGL_SupportsNoOverwrite (FNA3D_Renderer * driverData )
53795342{
5380- /* NoOverwrite (ring buffer optimization) is critical for GLES3 SpriteBatch performance.
5381- * On desktop OpenGL, keep disabled as drivers handle buffer updates differently.
5382- * GLES3 benefits greatly from avoiding frequent glBufferData orphaning.
5383- */
5384- #ifdef USE_ES3
5385- return 1 ; /* Enable for GLES3 only */
5386- #else
5387- (void ) driverData ; /* Unused in desktop OpenGL */
5388- return 0 ; /* Keep disabled for desktop OpenGL */
5389- #endif
5343+ OpenGLRenderer * renderer = (OpenGLRenderer * ) driverData ;
5344+ return renderer -> supports_ARB_map_buffer_range ;
53905345}
53915346
53925347static uint8_t OPENGL_SupportsSRGBRenderTargets (FNA3D_Renderer * driverData )
0 commit comments