15#if !defined(GPURECONSTRUCTIONIO_H)
16#define GPURECONSTRUCTIONIO_H
37 throw std::bad_alloc();
44 GPUError(
"Error registering memory for GPU: %p - %ld bytes\n", (
void*)u.get(), (int64_t)(
n *
sizeof(T)));
45 throw std::bad_alloc();
53template <
class T,
class S>
57 uint32_t numTotal = 0;
58 for (int32_t
i = 0;
i <
count;
i++) {
65 for (int32_t
i = 0;
i <
count;
i++) {
66 fwrite(&
num[
i],
sizeof(
num[
i]), 1, fp);
68 fwrite(entries[
i],
sizeof(*entries[
i]),
num[
i], fp);
77template <
class T,
class S>
84 size_t r,
pos = ftell(fp);
85 r = fread(&inType,
sizeof(inType), 1, fp);
86 if (
r != 1 || inType !=
type) {
87 fseek(fp,
pos, SEEK_SET);
93 for (int32_t
i = 0;
i <
count;
i++) {
94 r = fread(&
num[
i],
sizeof(
num[
i]), 1, fp);
100 r = fread(
m,
sizeof(*entries[
i]),
num[
i], fp);
114 FILE* fp = fopen(
file,
"w+b");
118 size_t size[2] = {
sizeof(*obj), obj->getFlatBufferSize()};
119 fwrite(
size,
sizeof(
size[0]), 2, fp);
120 fwrite(obj, 1,
size[0], fp);
121 fwrite(obj->getFlatBufferPtr(), 1,
size[1], fp);
128 FILE* fp = fopen(
file,
"rb");
132 size_t size[2] = {0},
r;
134 if (
r == 0 ||
size[0] !=
sizeof(T)) {
136 GPUError(
"ERROR reading %s, invalid size: %ld (%ld expected)",
file, (int64_t)
size[0], (int64_t)
sizeof(T));
137 throw std::runtime_error(
"invalid size");
139 std::unique_ptr<T>
retVal(
new T);
146 GPUInfo(
"Read %ld bytes from %s", (int64_t)
r,
file);
148 retVal->clearInternalBufferPtr();
157 FILE* fp = fopen(
file,
"w+b");
161 size_t size =
sizeof(*obj);
163 fwrite(obj, 1,
size, fp);
170 FILE* fp = fopen(
file,
"rb");
176 if (
r == 0 ||
size !=
sizeof(T)) {
178 GPUError(
"ERROR reading %s, invalid size: %ld (%ld expected)",
file, (int64_t)
size, (int64_t)
sizeof(T));
179 throw std::runtime_error(
"invalid size");
181 std::unique_ptr<T> newObj(
new T);
182 r = fread(newObj.get(), 1,
size, fp);
185 GPUInfo(
"Read %ld bytes from %s", (int64_t)
r,
file);
193 FILE* fp = fopen(
file,
"rb");
203 r = fread(obj, 1,
size, fp);
206 GPUInfo(
"Read %ld bytes from %s", (int64_t)
r,
file);
static void computePointerWithAlignment(T *&basePtr, S *&objPtr, size_t nEntries=1)
static uint32_t getNIOTypeMultiplicity(InOutPointerType type)
GPUOutputControl mInputControl
uint32_t DumpData(FILE *fp, const T *const *entries, const S *num, InOutPointerType type)
std::unique_ptr< T > ReadStructFromFile(const char *file)
std::unique_ptr< T > ReadFlatObjectFromFile(const char *file)
void DumpStructToFile(const T *obj, const char *file)
T * AllocateIOMemoryHelper(size_t n, const T *&ptr, std::unique_ptr< T[]> &u)
static constexpr const char *const IOTYPENAMES[]
size_t ReadData(FILE *fp, const T **entries, S *num, std::unique_ptr< T[]> *mem, InOutPointerType type, T **nonConstPtrs=nullptr)
const GPUSettingsProcessing & GetProcessingSettings() const
void DumpFlatObjectToFile(const T *obj, const char *file)
int32_t registerMemoryForGPU(const void *ptr, size_t size)
GLint GLint GLsizei GLint GLenum GLenum type
typedef void(APIENTRYP PFNGLCULLFACEPROC)(GLenum mode)
GLenum GLuint GLenum GLsizei const GLchar * buf