Skip to content
This repository has been archived by the owner on Dec 11, 2017. It is now read-only.

Need to fix a number of issues reported by @ash3D #214

Open
megaDRONe86 opened this issue May 21, 2015 · 0 comments
Open

Need to fix a number of issues reported by @ash3D #214

megaDRONe86 opened this issue May 21, 2015 · 0 comments
Assignees
Labels

Comments

@megaDRONe86
Copy link
Member

d9caf06

Там в начале GetPixelData() и SetPixelData() при выполнении проверки, установлена ли текстура в качестве рендертаргета, проверяется p_rnd_target && p_rnd_target == this. Но this может быть нулевым только когда метод вызывается для нулевого указателя (texture->GetPixelData(), texture == NULL). В этом случае все равно произойдет access violation, поэтому в процессе проверки можно предполагать, что this не нулевой, и тогда в условии оставить только p_rnd_target == this.

В _DataSize() заметил, что после цикла по лодам для вычисления разрешения нужного лода идет проверка if (w == 0 || h == 0) return 0;. Но для прямоугольных (не квадратных) текстур начиная с определенного лода длина более короткой стороны текстуры при вычислении в цикле станет 0, в этом случае ее надо заменять на 1. Например, с текстурой 1024x512 для последнего лода после вычисления в цикле получится размер 1x0 и функция вернет 0, а должен быть размер 1x1 и функция должна возвращать размер в байтах одного текселя.

В Reallocate() появился цикл со странным условием while (!(cur_w == cur_h == 1)). Здесь сравнивается cur_w и cur_h, и результат сравнения (bool) сравнивается с 1. То есть для квадратных текстур не выполнится ни одной итерации.
Результаты GetTextureGLFormat() нигде не используются, кроме проверки формата. Но формат проверяется в самом начале функции: if (!pData || eDataFormat != _format). _format не может быть некорректным, в противном случае текстура бы не создалась.
Еще в Reallocate() нет проверки поддержки NPOT текстур (эта проверка есть в CreateTexture()).

Параметр _bMipMaps в Reallocate() не обновляется. В результате если в Reallocate() не передать мип уровни, то решение об автоматической генерации мип уровней принимается на основании того, были ли мип уровни при создании текстуры, а не в момент последнего вызова Reallocate(). Помимо этого параметр _bMipMaps странным образом используется в SetPixelData()/GetPixelData(): при попытке обратиться к ненулевому мип уровню при отсутствии мип уровней возвращается ошибка (!_bMipMaps && uiLodLevel != 0). Но здесь не проверяется, выходит ли параметр uiLodLevel за допустимые пределы при наличии мип уровней.

@megaDRONe86 megaDRONe86 self-assigned this May 21, 2015
@megaDRONe86 megaDRONe86 added this to the Version 2:0.3.5 milestone May 21, 2015
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

1 participant