Я сделал класс Color
с float r, float g, float b, float alpha. Он имеет базовый класс с виртуальным деструктором.OpenGL с C++: проблемы с vtable при передаче класса массива в glTexImage2d
Я пытаюсь передать массив Color функции OpenGL glTexImage2D
, с GL_RGBA
организации типа поплавка (который был бы массив {флоат г, поплавок г, поплавок б, поплавок альфа}). Для этого требуется, чтобы Color
содержал только 4 поплавки (размером 16 байт).
Однако sizeof(Color)
показывает, что мой класс имеет размер 20 байт из-за базовый класс Color
, имеющим , виртуальные таблицы благодаря деструктору.
Как я могу сохранить свою таблицу vtable и передать свой цветный массив до glTexImage2D
?
В переносном стандартном режиме? Вы абсолютно не можете. Будет ли не переносной, нестандартный взлом? (не то, что я знаю об этом, но все же вам нужно сообщить сообществу :) –
Нельзя хранить изображения в виде массива «Цвет». В этом случае vtable - огромная доля памяти. И вы, вероятно, не должны иметь разные пиксельные форматы в одном изображении. Но если вы хотите передать его в 'glTexImage2D', сначала конвертируйте его в простой массив в отдельный буфер памяти. – HolyBlackCat
Почему вы все равно используете виртуальный тип? Для чего нужен виртуальный деструктор? Имеет ли он виртуальные функции? Если да, то почему? –