GLboolean SERVER_DISPATCH_APIENTRY crServerDispatchIsProgram(GLuint program) { GLboolean retval; retval = cr_server.head_spu->dispatch_table.IsProgram(crStateGetProgramHWID(program)); crServerReturnValue(&retval, sizeof(retval)); return retval; /* ignored */ }
void SERVER_DISPATCH_APIENTRY crServerDispatchGetAttachedObjectsARB(VBoxGLhandleARB containerObj, GLsizei maxCount, GLsizei * count, VBoxGLhandleARB * obj) { GLsizei *pLocal; pLocal = (GLsizei*) crAlloc(maxCount*sizeof(VBoxGLhandleARB)+sizeof(GLsizei)); if (!pLocal) { GLsizei zero=0; crServerReturnValue(&zero, sizeof(zero)); } /* initial (fallback )value */ *pLocal = 0; cr_server.head_spu->dispatch_table.GetAttachedObjectsARB(crStateGetProgramHWID(containerObj), maxCount, pLocal, (VBoxGLhandleARB*)&pLocal[1]); { GLsizei i; GLuint *ids=(GLuint*)&pLocal[1]; for (i=0; i<*pLocal; ++i) ids[i] = crStateGLSLShaderHWIDtoID(ids[i]); } crServerReturnValue(pLocal, (*pLocal)*sizeof(VBoxGLhandleARB)+sizeof(GLsizei)); crFree(pLocal); }
GLint SERVER_DISPATCH_APIENTRY crServerDispatchGetUniformLocation(GLuint program, const char * name) { GLint retval; retval = cr_server.head_spu->dispatch_table.GetUniformLocation(crStateGetProgramHWID(program), name); crServerReturnValue( &retval, sizeof(retval) ); return retval; /* WILL PROBABLY BE IGNORED */ }
void SERVER_DISPATCH_APIENTRY crServerDispatchGetAttachedShaders(GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders) { GLsizei *pLocal; pLocal = (GLsizei*) crAlloc(maxCount*sizeof(GLuint)+sizeof(GLsizei)); if (!pLocal) { GLsizei zero=0; crServerReturnValue(&zero, sizeof(zero)); } /* initial (fallback )value */ *pLocal = 0; cr_server.head_spu->dispatch_table.GetAttachedShaders(crStateGetProgramHWID(program), maxCount, pLocal, (GLuint*)&pLocal[1]); { GLsizei i; GLuint *ids=(GLuint*)&pLocal[1]; for (i=0; i<*pLocal; ++i); ids[i] = crStateGLSLShaderHWIDtoID(ids[i]); } crServerReturnValue(pLocal, (*pLocal)*sizeof(GLuint)+sizeof(GLsizei)); crFree(pLocal); }
static GLint __GetUniformSize(GLuint program, GLint location) { GLint size; GLenum type; /*@todo: check if index and location is the same*/ cr_server.head_spu->dispatch_table.GetActiveUniform(crStateGetProgramHWID(program), location, 0, NULL, &size, &type, NULL); return crStateGetUniformSize(type); }
DECLEXPORT(GLuint) STATE_APIENTRY crStateDeleteObjectARB( GLhandleARB obj ) { GLuint hwId = crStateGetProgramHWID(obj); if (hwId) { crStateDeleteProgram(obj); } else { hwId = crStateGetShaderHWID(obj); crStateDeleteShader(obj); } return hwId; }
void SERVER_DISPATCH_APIENTRY crServerDispatchGetProgramInfoLog(GLuint program, GLsizei bufSize, GLsizei *length, char *infoLog) { GLsizei *pLocal; pLocal = (GLsizei*) crAlloc(bufSize+sizeof(GLsizei)); if (!pLocal) { GLsizei zero=0; crServerReturnValue(&zero, sizeof(zero)); } cr_server.head_spu->dispatch_table.GetProgramInfoLog(crStateGetProgramHWID(program), bufSize, pLocal, (char*)&pLocal[1]); crServerReturnValue(pLocal, pLocal[0]+sizeof(GLsizei)); crFree(pLocal); }
void PACK_APIENTRY packspu_DeleteObjectARB(VBoxGLhandleARB obj) { GLuint hwid = crStateGetProgramHWID(obj); CRASSERT(obj); /* we do not track shader creation inside guest since it is not needed currently. * this is why we only care about programs here */ if (hwid) { crStateDeleteProgram(obj); } crPackDeleteObjectARB(obj); }
void SERVER_DISPATCH_APIENTRY crServerDispatchGetActiveUniform(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, char *name) { crGetActive_t *pLocal; pLocal = (crGetActive_t*) crAlloc(bufSize+sizeof(crGetActive_t)); if (!pLocal) { crGetActive_t zero; zero.length = 0; crServerReturnValue(&zero, sizeof(zero)); } cr_server.head_spu->dispatch_table.GetActiveUniform(crStateGetProgramHWID(program), index, bufSize, &pLocal->length, &pLocal->size, &pLocal->type, (char*)&pLocal[1]); crServerReturnValue(pLocal, pLocal->length+1+sizeof(crGetActive_t)); crFree(pLocal); }
void SERVER_DISPATCH_APIENTRY crServerDispatchDeleteObjectARB(GLhandleARB obj) { GLuint hwid = crStateGetProgramHWID(obj); if (!hwid) { hwid = crStateGetShaderHWID(obj); crStateDeleteShader(obj); } else { crStateDeleteProgram(obj); } cr_server.head_spu->dispatch_table.DeleteObjectARB(hwid); }
void SERVER_DISPATCH_APIENTRY crServerDispatchGetObjectParameterivARB( GLhandleARB obj, GLenum pname, GLint * params ) { GLint local_params[1]; GLuint hwid = crStateGetProgramHWID(obj); if (!hwid) { hwid = crStateGetShaderHWID(obj); if (!hwid) { crWarning("Unknown object %i, in crServerDispatchGetObjectParameterivARB", obj); } } (void) params; cr_server.head_spu->dispatch_table.GetObjectParameterivARB( hwid, pname, local_params ); crServerReturnValue( &(local_params[0]), 1*sizeof(GLint) ); }
void SERVER_DISPATCH_APIENTRY crServerDispatchGetActiveAttrib(GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, char *name) { crGetActive_t *pLocal; pLocal = (crGetActive_t*) crAlloc(bufSize+sizeof(crGetActive_t)); if (!pLocal) { crGetActive_t zero; zero.length = 0; crServerReturnValue(&zero, sizeof(zero)); } /* zero out just the header to ensure it initially contains zero size values */ memset(pLocal, 0, sizeof (*pLocal)); cr_server.head_spu->dispatch_table.GetActiveAttrib(crStateGetProgramHWID(program), index, bufSize, &pLocal->length, &pLocal->size, &pLocal->type, (char*)&pLocal[1]); crServerReturnValue(pLocal, pLocal->length+1+sizeof(crGetActive_t)); crFree(pLocal); }
void SERVER_DISPATCH_APIENTRY crServerDispatchGetUniformiv(GLuint program, GLint location, GLint *params) { int size = __GetUniformSize(program, location) * sizeof(GLint); GLint *pLocal; pLocal = (GLint*) crAlloc(size); if (!pLocal) { GLsizei zero=0; crServerReturnValue(&zero, sizeof(zero)); } cr_server.head_spu->dispatch_table.GetUniformiv(crStateGetProgramHWID(program), location, pLocal); crServerReturnValue(pLocal, size); crFree(pLocal); }
void SERVER_DISPATCH_APIENTRY crServerDispatchGetInfoLogARB(GLhandleARB obj, GLsizei maxLength, GLsizei * length, GLcharARB * infoLog) { GLsizei *pLocal; GLuint hwid; pLocal = (GLsizei*) crAlloc(maxLength+sizeof(GLsizei)); if (!pLocal) { GLsizei zero=0; crServerReturnValue(&zero, sizeof(zero)); } /*@todo: recheck*/ hwid = crStateGetProgramHWID(obj); if (!hwid) hwid = crStateGetShaderHWID(obj); cr_server.head_spu->dispatch_table.GetInfoLogARB(hwid, maxLength, pLocal, (char*)&pLocal[1]); crServerReturnValue(pLocal, (*pLocal)+sizeof(GLsizei)); crFree(pLocal); }
void SERVER_DISPATCH_APIENTRY crServerDispatchDetachShader(GLuint program, GLuint shader) { crStateDetachShader(program, shader); cr_server.head_spu->dispatch_table.DetachShader(crStateGetProgramHWID(program), crStateGetShaderHWID(shader)); }
void SERVER_DISPATCH_APIENTRY crServerDispatchValidateProgram(GLuint program) { crStateValidateProgram(program); cr_server.head_spu->dispatch_table.ValidateProgram(crStateGetProgramHWID(program)); }
void SERVER_DISPATCH_APIENTRY crServerDispatchBindAttribLocation(GLuint program, GLuint index, const char * name) { crStateBindAttribLocation(program, index, name); cr_server.head_spu->dispatch_table.BindAttribLocation(crStateGetProgramHWID(program), index, name); }