@@ -413,17 +413,32 @@ void GLInstancingRenderer::writeSingleInstanceTransformToGPU(float* position, fl
413413void GLInstancingRenderer::writeTransforms ()
414414{
415415
416- b3Assert (glGetError () ==GL_NO_ERROR);
417-
416+ {
417+ B3_PROFILE (" b3Assert(glGetError() 1" );
418+ b3Assert (glGetError () ==GL_NO_ERROR);
419+ }
420+ {
421+ B3_PROFILE (" glBindBuffer" );
422+ glBindBuffer (GL_ARRAY_BUFFER, m_data->m_vbo );
423+ }
418424
419- glBindBuffer (GL_ARRAY_BUFFER, m_data->m_vbo );
420- // glFlush();
425+ {
426+ B3_PROFILE (" glFlush()" );
427+ // without the flush, the glBufferSubData can spike to really slow (seconds slow)
428+ glFlush ();
429+ }
421430
422- b3Assert (glGetError () ==GL_NO_ERROR);
431+ {
432+ B3_PROFILE (" b3Assert(glGetError() 2" );
433+ b3Assert (glGetError () ==GL_NO_ERROR);
434+ }
423435
424436
425437#ifdef B3_DEBUG
426438 {
439+
440+ // B3_PROFILE("m_data->m_totalNumInstances == totalNumInstances");
441+
427442 int totalNumInstances= 0 ;
428443 for (int k=0 ;k<m_graphicsInstances.size ();k++)
429444 {
@@ -440,14 +455,29 @@ void GLInstancingRenderer::writeTransforms()
440455// int SCALE_BUFFER_SIZE = (totalNumInstances*sizeof(float)*3);
441456
442457#if 1
458+ {
459+ // printf("m_data->m_totalNumInstances = %d\n", m_data->m_totalNumInstances);
460+ {
461+ B3_PROFILE (" glBufferSubData pos" );
443462 glBufferSubData ( GL_ARRAY_BUFFER,m_data->m_maxShapeCapacityInBytes ,m_data->m_totalNumInstances *sizeof (float )*4 ,
444463 &m_data->m_instance_positions_ptr [0 ]);
464+ }
465+ {
466+ B3_PROFILE (" glBufferSubData orn" );
445467 glBufferSubData ( GL_ARRAY_BUFFER,m_data->m_maxShapeCapacityInBytes +POSITION_BUFFER_SIZE,m_data->m_totalNumInstances *sizeof (float )*4 ,
446468 &m_data->m_instance_quaternion_ptr [0 ]);
469+ }
470+ {
471+ B3_PROFILE (" glBufferSubData color" );
447472 glBufferSubData ( GL_ARRAY_BUFFER,m_data->m_maxShapeCapacityInBytes + POSITION_BUFFER_SIZE+ORIENTATION_BUFFER_SIZE, m_data->m_totalNumInstances *sizeof (float )*4 ,
448473 &m_data->m_instance_colors_ptr [0 ]);
474+ }
475+ {
476+ B3_PROFILE (" glBufferSubData scale" );
449477 glBufferSubData ( GL_ARRAY_BUFFER, m_data->m_maxShapeCapacityInBytes +POSITION_BUFFER_SIZE+ORIENTATION_BUFFER_SIZE+COLOR_BUFFER_SIZE,m_data->m_totalNumInstances *sizeof (float )*3 ,
450478 &m_data->m_instance_scale_ptr [0 ]);
479+ }
480+ }
451481#else
452482
453483 char* orgBase = (char*)glMapBuffer( GL_ARRAY_BUFFER,GL_READ_WRITE);
@@ -517,9 +547,15 @@ void GLInstancingRenderer::writeTransforms()
517547
518548 #endif
519549
520- glBindBuffer (GL_ARRAY_BUFFER, 0 );// m_data->m_vbo);
550+ {
551+ B3_PROFILE (" glBindBuffer 2" );
552+ glBindBuffer (GL_ARRAY_BUFFER, 0 );// m_data->m_vbo);
553+ }
521554
522- b3Assert (glGetError () ==GL_NO_ERROR);
555+ {
556+ B3_PROFILE (" b3Assert(glGetError() 4" );
557+ b3Assert (glGetError () ==GL_NO_ERROR);
558+ }
523559
524560}
525561
@@ -686,16 +722,24 @@ int GLInstancingRenderer::registerShape(const float* vertices, int numvertices,
686722
687723
688724 glBindBuffer (GL_ARRAY_BUFFER, m_data->m_vbo );
689- char * dest= (char *)glMapBuffer ( GL_ARRAY_BUFFER,GL_WRITE_ONLY);// GL_WRITE_ONLY
690725 int vertexStrideInBytes = 9 *sizeof (float );
691726 int sz = numvertices*vertexStrideInBytes;
727+ #if 0
728+
729+ char* dest= (char*)glMapBuffer( GL_ARRAY_BUFFER,GL_WRITE_ONLY);//GL_WRITE_ONLY
730+
731+
692732#ifdef B3_DEBUG
693733 int totalUsed = vertexStrideInBytes*gfxObj->m_vertexArrayOffset+sz;
694734 b3Assert(totalUsed<m_data->m_maxShapeCapacityInBytes);
695735#endif//B3_DEBUG
696736
697737 memcpy(dest+vertexStrideInBytes*gfxObj->m_vertexArrayOffset,vertices,sz);
698738 glUnmapBuffer( GL_ARRAY_BUFFER);
739+ #else
740+ glBufferSubData ( GL_ARRAY_BUFFER,vertexStrideInBytes*gfxObj->m_vertexArrayOffset ,sz,
741+ vertices);
742+ #endif
699743
700744 glGenBuffers (1 , &gfxObj->m_index_vbo );
701745
@@ -1465,7 +1509,7 @@ void GLInstancingRenderer::renderSceneInternal(int renderMode)
14651509#endif // OLD_SHADOWMAP_INIT
14661510
14671511 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
1468- glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR );
1512+ glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
14691513
14701514
14711515
0 commit comments