Чтение содержимого SSBO, возвращаемого glMapBufferRange

Я хочу получить данные из объекта буфера хранения. Сначала я хочу воспользоваться glGetBufferSubData, Но, похоже, что эта функция не существует в OpenGLES, хотя она существует в OpenGL. Тогда я отступаю на glMapBufferRange,
Это прекрасно, если я могу интерпретировать информацию после извлечения данных из буфера. Но я думаю, что для этого мне нужно предоставить точный макет или даже больше информации. Пока мне не нужно так много делать. Что я хочу сделать, так это то, что в двух разных ситуациях я хочу извлечь содержимое буфера и сравнить, является ли содержимое одинаковым в двух ситуациях.
Проблема в, glMapBufferRange возвращает void * тип. Я конвертирую это в char * и сравните каждый символ в шестнадцатеричном значении:

char *buffercontent = (char *)(glMapBufferRange(GL_SHADER_STORAGE_BUFFER, 0, 80, GL_MAP_READ_BIT));  //just read the first 80 characters. I'm sure the buffer data length is at least 80.
for(int i=0;i<20;i++)
{
    printf("%X", *(buffercontent+i));
}
glUnmapBuffer(GL_SHADER_STORAGE_BUFFER);

Я чувствую растерянность, потому что вижу только менее 20 напечатанных символов. Зачем? В чем проблема? Я уверен, что размер буфера большой из другой информации.

0 ответов

Убедитесь, что вы умножили 80 (размер массива) на 8, поскольку OpenGL считает через размер массива * размер типа переменной в байтах (в данном случае - один символ).

Другие вопросы по тегам