Поэтому, когда я увеличиваю поверхность, манипулируя элементами h и w, я получаю странные результаты — добавленное пространство заполняется искаженными версиями того, что уже было на поверхности. Есть ли способ, которым я могу избежать этого / очистить добавленное пространство (установите его в альфа)?
Я использовал только SDL 2, но я думаю, что знаю, что не так с вашим кодом.
Пиксельные данные поверхности — это простой одномерный массив пикселей. Длина этого массива равна w*h
, Доступ к пикселю реализован так: pixeldata[y * w + x]
,
Это означает, что вы не можете просто изменить два элемента, чтобы изменить размеры поверхности. Это приведет к выходу за пределы массива данных пикселей при использовании этой поверхности.
Таким образом, если вы хотите изменить размер поверхности, вы должны создать новую поверхность и скопировать в нее необходимые пиксели.
Конечно, можно изменить размер вручную, но вы не должны пытаться делать это без веской причины.