GyverOLED icon indicating copy to clipboard operation
GyverOLED copied to clipboard

Линии без буфера

Open kostia-egik opened this issue 1 year ago • 6 comments

Режим без буфера. Когда наклон линии ближе к вертикали (<45°), линия рассыпается на отдельные точки. Как я понял отрисовка следующей точки затирает предыдущую в этом столбце строки (у него отрисовка графики в текстовом режиме?). У меня одного так? oled 128х64, закупал пачку очень давно (лет 7 назад). SPI, 6 контактный.

kostia-egik avatar Mar 17 '23 08:03 kostia-egik

Это особенность режима без буфера и внутреннего устройства дисплея

GyverLibs avatar Mar 17 '23 08:03 GyverLibs

я для себя накидал костылей. вроде бы работает. // линия БЕЗ БУФЕРА void lineNoBuff(int x0, int y0, int x1, int y1, byte fill = 1) { _x = 0; _y = 0; if (x0 == x1) fastLineV(x0, y0, y1, fill); else if (y0 == y1) fastLineH(y0, x0, x1, fill); else { int sx, sy, e2, err; int dx = abs(x1 - x0); int dy = abs(y1 - y0); int preY = y0; sx = (x0 < x1) ? 1 : -1; sy = (y0 < y1) ? 1 : -1; err = dx - dy; if (dx > dy){ for (;;) { dot(x0, y0, fill); if (x0 == x1 && y0 == y1) return; e2 = err<<1; if (e2 > -dy) { err -= dy; x0 += sx; } if (e2 < dx) { err += dx; y0 += sy; } } } else{ for (;;) { fastLineV(x0, y0, preY, fill); if (x0 == x1 && y0 == y1) { fastLineV(x0, preY, y1, fill); return; } e2 = err<<1; if (e2 > -dy) { err -= dy; x0 += sx; preY = y0+sy; } if (e2 < dx) { err += dx; y0 += sy; } } } } }

kostia-egik avatar Mar 17 '23 08:03 kostia-egik

Ну, это даже костылём страшно назвать) я потом когда нибудь планирую добавить буфер "последнего столбика" , с ним можно будет рисовать более свободно

GyverLibs avatar Mar 17 '23 08:03 GyverLibs

чего могем. Все равно эта конструкция работает только с одной линией. А если их много, без хотя бы локального буфера к сожалению не обойтись.

kostia-egik avatar Mar 17 '23 08:03 kostia-egik

Да, поэтому проще перейти на микроконтроллер у которого больше памяти) тем более spi, быстрый как понос, обновляется мгновенно

GyverLibs avatar Mar 17 '23 09:03 GyverLibs

Ну, в конкретном случае есть огромный косяк от меня. Не разобравшись в программной части, спаял все железки и запихал в корпус. Весьма замысловатый с плотной компоновкой и сложно разбираемый. Теперь вот выкручиваюсь, а знаний не хватает, будет мне урок.

kostia-egik avatar Mar 17 '23 09:03 kostia-egik