@@ -237,6 +237,26 @@ void fixup_glUniformMatrixGeneric(int matrixSize, GLMessage *glmsg) {
237237 fixup_glUniformGeneric (3 , matrixSize * matrixSize * n_matrices, glmsg);
238238}
239239
240+ void fixup_glBufferData (int sizeIndex, int dataIndex, GLMessage *glmsg) {
241+ /* void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) */
242+ /* void glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) */
243+ GLsizeiptr size = glmsg->args (sizeIndex).intvalue (0 );
244+
245+ GLMessage_DataType *arg_datap = glmsg->mutable_args (dataIndex);
246+ GLvoid *datap = (GLvoid *)arg_datap->intvalue (0 );
247+
248+ if (datap == NULL ) {
249+ // glBufferData can be called with a NULL data pointer
250+ return ;
251+ }
252+
253+ arg_datap->set_type (GLMessage::DataType::VOID);
254+ arg_datap->set_isarray (true );
255+ arg_datap->clear_intvalue ();
256+
257+ arg_datap->add_rawbytes (datap, size);
258+ }
259+
240260void fixup_GenericIntArray (int argIndex, int nInts, GLMessage *glmsg) {
241261 GLMessage_DataType *arg_intarray = glmsg->mutable_args (argIndex);
242262 GLint *intp = (GLint *)arg_intarray->intvalue (0 );
@@ -503,6 +523,14 @@ void fixupGLMessage(GLTraceContext *context, nsecs_t wallStart, nsecs_t wallEnd,
503523 const GLfloat* value) */
504524 fixup_glUniformMatrixGeneric (4 , glmsg);
505525 break ;
526+ case GLMessage::glBufferData:
527+ /* void glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage) */
528+ fixup_glBufferData (1 , 2 , glmsg);
529+ break ;
530+ case GLMessage::glBufferSubData:
531+ /* void glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data) */
532+ fixup_glBufferData (2 , 3 , glmsg);
533+ break ;
506534 case GLMessage::glDrawArrays:
507535 /* void glDrawArrays(GLenum mode, GLint first, GLsizei count) */
508536 if (context->getGlobalTraceState ()->shouldCollectFbOnGlDraw ()) {
0 commit comments