float minorLinesStride = 1.0f; bool exit = false; float linesCount = float(viewportSize[0].w);//the line over every unit while( !exit) { if ( linesCount < maxLinesCount) { exit = true; } else { minorLinesStride *= sizeMultiplicator; linesCount = float( viewportSize[0].w) / minorLinesStride; } }
kipar
> а без цикла, через логарифм, разве не быстрее будет?
Конкретнее, пожалуйста, как исправить? Я сам сомневался, но ничего не придумал. Оставил, как есть. Скажете, запомню, буду использовать.
UPD: OK, сообразил. Исправляю.
TheOrca
> Падает с кодом ошибки 7. Time-out limit. Похоже, где-то бесконечный цикл.
TheOrca
> if (tcoord > 1.0f)
> {
> return false;
> }
Надо думать, что выполняется условие. Смешиваешь float/int в одном выражение. 90 % что отладчик тебе не помог бы. Тем более что на разных вендорах
innuendo
> Смешиваешь float/int в одном выражение.
Хочется задать вопрос кому-нибудь из авторов языка - а почему так нельзя? В плюсах же можно. Но задавать не буду, шейдер работал. Вот он.
У меня еще и с bool проблемы. Пришлось его выкинуть, заменить на float.
UPDATED.
Этот шейдер я еще буду разбирать в другой теме. Вроде бы пошел оффтоп, заканчиваю.
TheOrca
> Хочется задать вопрос кому-нибудь из авторов языка - а почему так нельзя? В
> плюсах же можно.
Есть язык - есть его реализация... Ничего тут не попишешь, такое вот апи :)
Есть ещё особенности GPU - их надо знать и понимать
innuendo
> Смешиваешь float/int в одном выражение.
В версиях GLSL начиная с 130 вроде так можно, разве нет?
gammaker
> > Смешиваешь float/int в одном выражение.
> В версиях GLSL начиная с 130 вроде так можно, разве нет?
Дело не в версии. int/float - это разные команды на современных GPU, компиляторы разных вендоров могу по-разному иметь их
Тема в архиве.