diff options
Diffstat (limited to 'src/VBox/GuestHost/OpenGL/packer/pack_shaders.c')
| -rw-r--r-- | src/VBox/GuestHost/OpenGL/packer/pack_shaders.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c b/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c index 36fc6bea..b788bd4d 100644 --- a/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c +++ b/src/VBox/GuestHost/OpenGL/packer/pack_shaders.c @@ -5,7 +5,7 @@ */ /* - * Copyright (C) 2009 Oracle Corporation + * Copyright (C) 2009-2012 Oracle Corporation * * This file is part of VirtualBox Open Source Edition (OSE), as * available from http://www.virtualbox.org. This file is free software; @@ -52,7 +52,7 @@ void PACK_APIENTRY crPackShaderSource(GLuint shader, GLsizei count, const char * for (i=0; i<count; ++i) { - pLocalLength[i] = (length && (length[i]>=0)) ? length[i] : crStrlen(string[i])+1; + pLocalLength[i] = ((length && (length[i]>=0)) ? length[i] : crStrlen(string[i]))+1; packet_length += pLocalLength[i]; } @@ -80,7 +80,17 @@ void PACK_APIENTRY crPackShaderSource(GLuint shader, GLsizei count, const char * { if (string[i]) { - crMemcpy(data_ptr, string[i], pLocalLength[i]); + if (length && (length[i]>=0)) + { + /* include \0 in the string to make intel drivers happy */ + crMemcpy(data_ptr, string[i], pLocalLength[i] - 1); + data_ptr[pLocalLength[i] - 1] = '\0'; + } + else + { + /* the \0 s already in the string */ + crMemcpy(data_ptr, string[i], pLocalLength[i]); + } } else { @@ -458,7 +468,7 @@ void PACK_APIENTRY crPackGetAttachedShaders(GLuint program, GLsizei maxCount, GL CR_UNLOCK_PACKER_CONTEXT(pc); } -void PACK_APIENTRY crPackGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei maxCount, GLsizei * count, GLhandleARB * obj, int * writeback) +void PACK_APIENTRY crPackGetAttachedObjectsARB(VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei * count, VBoxGLhandleARB * obj, int * writeback) { CR_GET_PACKER_CONTEXT(pc); unsigned char *data_ptr; @@ -466,7 +476,7 @@ void PACK_APIENTRY crPackGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei CR_GET_BUFFERED_POINTER(pc, 32); WRITE_DATA(0, GLint, 32); WRITE_DATA(4, GLenum, CR_GETATTACHEDOBJECTSARB_EXTEND_OPCODE); - WRITE_DATA(8, GLhandleARB, containerObj); + WRITE_DATA(8, VBoxGLhandleARB, containerObj); WRITE_DATA(12, GLsizei, maxCount); WRITE_NETWORK_POINTER(16, (void *) count); WRITE_NETWORK_POINTER(24, (void *) writeback); @@ -474,7 +484,7 @@ void PACK_APIENTRY crPackGetAttachedObjectsARB(GLhandleARB containerObj, GLsizei CR_UNLOCK_PACKER_CONTEXT(pc); } -void PACK_APIENTRY crPackGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog, int * writeback) +void PACK_APIENTRY crPackGetInfoLogARB(VBoxGLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog, int * writeback) { CR_GET_PACKER_CONTEXT(pc); unsigned char *data_ptr; @@ -482,7 +492,7 @@ void PACK_APIENTRY crPackGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsiz CR_GET_BUFFERED_POINTER(pc, 32); WRITE_DATA(0, GLint, 32); WRITE_DATA(4, GLenum, CR_GETINFOLOGARB_EXTEND_OPCODE); - WRITE_DATA(8, GLhandleARB, obj); + WRITE_DATA(8, VBoxGLhandleARB, obj); WRITE_DATA(12, GLsizei, maxLength); WRITE_NETWORK_POINTER(16, (void *) length); WRITE_NETWORK_POINTER(24, (void *) writeback); |
