OpenGL розового цвета в режиме релиза - PullRequest
0 голосов
/ 12 октября 2018

OpenGL показывает пустую текстуру, окрашенную как белый в режиме отладки и окрашенную как розовый в режиме выпуска, ключ отличается только в Runtime Library (Release: MT, Debug: MTd).

IDE: Visual Studio 2013 (обновление 5)

Вопрос - почему это происходит и как это исправить?

Релиз: img

Отладка: img

1 Ответ

0 голосов
/ 12 октября 2018

Скорее всего, вы читаете из неинициализированной памяти.Для облегчения отладки такого рода проблем в сборках debug библиотека времени выполнения (и в зависимости от цепочки инструментов компилятора также компилятор) вставляет код, который заполняет все выделения памяти шаблонами канарейки .Эти шаблоны могут отображаться как за пределами чтения, так и в неинициализированной памяти.Точно так же код проверки работоспособности проверяет шаблоны целостности для проверки за пределами записей.

Поскольку в распространенных в настоящее время компьютерных архитектурах защита памяти работает только с определенной степенью детализации, а именно размер страницы ,который в большинстве случаев составляет 4096 байт¹, для обнаружения повреждения памяти используются эти канареечные значения.

В любом случае, причина, по которой вы видите разные значения в debug и release builds - это то, что память фактически инициализируется по-разному для каждого случая, и это проявляется Для вас важно то, что из-за разницы ваш код делает что-то не так, т.е. у вас есть ошибка, которую нужно исправить!

Если вы создавали это для Linux, моя рекомендациябудет запускать вашу программу через отладчик памяти Valgrind .Valgrind - это инструмент, специально разработанный для устранения ошибок такого рода.Он примерно работает, пропуская ваш код через эмулируемый процессор, отслеживая каждое выделение памяти и доступ к ней, сообщая вам строку исходного кода, где происходят недопустимые доступы.

На Valgrind заменены SO Q & A вместоРазработка для Windows: Есть ли хороший заменитель Valgrind для Windows?


1: огромные страницы (обычно 2 МБ) и гигабайты (обычно 1 ГБ) также часто доступны, но если только вызапросите их явно, это просто стандартный размер страницы.

...