К слову.
Все исходники пересмотрел, но, к сожалению, осилить не смог. Пришлось идти в обход.
Взял сишный исходник с википедии (http://www.google.ru/url?sa=t&rct=j&...,d.Yms&cad=rjt):
и скомпилил в SDCC. Как ни странно, работает замечательно, даже без правки ручками. Рисует линии с любым тангенсом и направлением. Сейчас избавлюсь от операций с индексными регистрами, и, вообще, благодать наступит.Код:void drawLine(int x1, int y1, int x2, int y2) { const int deltaX = abs(x2 - x1); const int deltaY = abs(y2 - y1); const int signX = x1 < x2 ? 1 : -1; const int signY = y1 < y2 ? 1 : -1; // int error = deltaX - deltaY; // setPixel(x2, y2); while(x1 != x2 || y1 != y2) { setPixel(x1, y1); const int error2 = error * 2; // if(error2 > -deltaY) { error -= deltaY; x1 += signX; } if(error2 < deltaX) { error += deltaX; y1 += signY; } } }
ЗЫ. Рисую под TS-Config/16c
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
Ну это ж не тот 16с, который от AloneCoder`а, а линейный: 2 пиксела на байт по 256 байт в строке, 512 строк (8 последовательных страниц). С учетом того, что рисуется, всё равно, по одной точке, скорость отрисовки такая же как на стандартном zx-экране (или это дело рук 14Мгц?! ). При этом расчет адреса по координатам проще и быстрее.
Старшие 3 бита координаты Y - смещение в страницах относительно начала экрана.
Младшие шесть бит указывают на начало стоки Y внутри страницы памяти
Старшие 8 бит координаты X указывают на байт в строке, которому принадлежит точка.
Младший указывает, левый или правый полубайт используется.
Впрочем, иногда видно, что линия не мгновенно появляется. Но за рисуемыми пикселами уследить невозможно.
Эх, молодость!
Последний раз редактировалось Sergey; 06.09.2013 в 15:43. Причина: Решение о редактировани №1/31 от 06.09.2013г.
С уважением,
Gris / Red Triangle.
_____________________________________
ZX-EVO/TS-Labs config/NGS/HDD/SD-card
Amiga A1200/Blizzard 1230@50/32/60GB
Amiga A1200/Apollo 1260@66/32/60GB
UnAmiga (C5) AGA GM7123 VideoDAC
Я думаю, весьма характеристичным было бы ещё и проверка тех же наклонов для коротких линий. Коротких - это в два раза меньше, то есть для горизонтальных - это 256, 128, 64, 32, 16, 8, 4, 2, 1 пиксель длины. Если речь про горизонтальные - это 192, 96, 48, 24, 12, 6, 3, 1 пиксель длины. Ведь есть ещё "стоимость" тактов обвязки, когда что-то предварительно вычисляется.
Как весьма логично говорит Дима Быстров, чаще рисуются, как ни странно, не линии длиной 256 пикселей, а линии длиной 10 пикселей, а если обвязка съедает половину тактов - результат на коротких линиях понятно какой будет. Как это изобразить на гистограмме: для этого нужно отдельно график тактов построения линии, скажем, процедуры витамина, а на нём - ещё и сравнительные графики в тактах, но уже для линий короче. Вот тут то логарифмическая шкала будет очень в помощь :-)
эта тема интересна еще кому-то?
Прихожу без разрешения, сею смерть и разрушение...
Я бы порисовал.
интересный подход к рисованию линий - строить точку на основании готовых координат (x,y). В 1ddkit использовался другой вариант, который позже нагло стырили.
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)