void ScanSystem::test() { GLuint scanbuffers[3]; glGenBuffers(3,scanbuffers); GLuint low = ScanSystem::BATCH_ELEMENTS/2; GLuint mid = ScanSystem::BATCH_ELEMENTS*ScanSystem::BATCH_ELEMENTS; GLuint high = ScanSystem::BATCH_ELEMENTS*ScanSystem::BATCH_ELEMENTS*2; size_t offsize = ScanSystem::getOffsetSize(high); GLuint* data = new GLuint[high]; for (GLuint i = 0; i < high; i++){ data[i] = 1; } glNamedBufferStorageEXT(scanbuffers[0], high * sizeof(GLuint), &data[0], 0 ); glNamedBufferStorageEXT(scanbuffers[1], high * sizeof(GLuint),0, GL_MAP_READ_BIT ); glNamedBufferStorageEXT(scanbuffers[2], offsize,0,GL_MAP_READ_BIT); delete [] data; GLuint result; bool needcombine; // low needcombine = scanData(low, scanbuffers[0], scanbuffers[1], scanbuffers[2]); assert(needcombine == false); result = 0; glGetNamedBufferSubDataEXT(scanbuffers[1],sizeof(GLuint) * (low-1), sizeof(GLuint), &result); assert(result == low); // med needcombine = scanData(mid, scanbuffers[0], scanbuffers[1], scanbuffers[2]); assert(needcombine == true); result = 0; glGetNamedBufferSubDataEXT(scanbuffers[2],sizeof(GLuint) * (ScanSystem::BATCH_ELEMENTS-1), sizeof(GLuint), &result); assert(result == mid); combineWithOffsets(mid, scanbuffers[1], scanbuffers[2]); result = 0; glGetNamedBufferSubDataEXT(scanbuffers[1],sizeof(GLuint) * (mid-1), sizeof(GLuint), &result); assert(result == mid); // high needcombine = scanData(high, scanbuffers[0], scanbuffers[1], scanbuffers[2]); assert(needcombine == true); combineWithOffsets(high, scanbuffers[1], scanbuffers[2]); result = 0; glGetNamedBufferSubDataEXT(scanbuffers[1],sizeof(GLuint) * (high-1), sizeof(GLuint), &result); assert(result == high); glDeleteBuffers(3,scanbuffers); }
void BufferImplementation_DirectStateAccessEXT::getBufferSubData(const Buffer * buffer, GLintptr offset, GLsizeiptr size, GLvoid * data) const { glGetNamedBufferSubDataEXT(buffer->id(), offset, size, data); }