MrShoor
> Если же у тебя картинка постоянно меняется, ты хочешь перерисовывать всё время,
> то ограничить лучше аппаратно по вертикальной синхронизации. Тебе нужен
> SwapInterval:
Я FpsLimiter'ом задаю кол-во fps. Воспользоваться встроенными функиями оси?
MrShoor
> А библиотечное конвертирование понятное дело автора не устроило.
Я сделал кастомный класс, потом, что не на всех компиляторах реализована функция itoa.
JordanCpp
Посмотри еще Processing, на нем Igo сделал Nemechanic
Еще, в копилку
Получить Mask из Bitmap:
Вывести Rect цветом MaskColor в промежуточный Bitmap
Вывести поверх свой Bitmap с XOR (где был MaskColor - станет 0)
Копировать результат в Monochrome Bitmap, получится 0-1
Получить Mask из 32bit Bitmap:
Вывести Rect цветом 0xFF000000 в промежуточный Bitmap
Вывести поверх свой Bitmap в режиме AND, останется только альфа
> не на всех компиляторах реализована функция itoa
sscanf позволяет получить число считанных байт (кажется %n), это нужно, если разбираешь длиную строку
Рендерферма кроликов
> sscanf позволяет получить число считанных байт (кажется %n), это нужно, если
> разбираешь длиную строку
Он вроде malloc дёргает?
В своём классе я сделал статический буффер.
Рендерферма кроликов
> Еще, в копилку
> Получить Mask из Bitmap:
> Вывести Rect цветом MaskColor в промежуточный Bitmap
> Вывести поверх свой Bitmap с XOR (где был MaskColor - станет 0)
> Копировать результат в Monochrome Bitmap, получится 0-1
>
> Получить Mask из 32bit Bitmap:
> Вывести Rect цветом 0xFF000000 в промежуточный Bitmap
> Вывести поверх свой Bitmap в режиме AND, останется только альфа
Принято в бэк лог.
JordanCpp
> Он вроде malloc дёргает?
Он ничего не выделяет, пишет по указателям, которые ты передал
за одного битого двух небитых дают
в смысле что нынешние советчики тоже огребали в своё время, но возможно и нет, а просто троллят, тут сложно отличить
#!
> за одного битого двух небитых дают
> в смысле что нынешние советчики тоже огребали в своё время, но возможно и нет,
> а просто троллят, тут сложно отличить
Я всё понимаю. Это больше шутка. Форумчане дают классный фидбэк. Когда пилишь в одного, многое упускаешь.
Чтобы что-то пилить надо именно это и пилить.
А библиотека получается когда ты выделяешь из работающего проекта проектно - независимый код и оформляешь его в виде библиотеки.
JordanCpp
А примитивы из WinAPI? Линии, Эллипсы, многоугольники? Правда на OpenGL это сложно
Как минимум - достаточно дать юзеру контекст OpenGL или экранный битмап для софтрендера на выбор. И другие битмапы, куда можно грузить картинки или использовать, как промежуточные буффера. Опять диллема - рисовать в битмапы GL-ом или софтрендером
Рендерферма кроликов
> Как минимум - достаточно дать юзеру контекст OpenGL или экранный битмап для
> софтрендера на выбор. И другие битмапы, куда можно грузить картинки или
> использовать, как промежуточные буффера. Опять диллема - рисовать в битмапы
> GL-ом или софтрендером
Для софт рендера все рисование идет в буфер.
Есть 2 типа картинок.
СpuImage - массив пикселей с размером
GpuImage - OpenGL текстура
Рендер разделен на две версии софтрендер CpuRender и OpenGL GpuRender.
Из CpuImage можно создать GpuImage, или использовать ImageLoader напрямую.
Добавлю функционал, что бы можно было рисовать напрямую на CpuImage.
Рендерферма кроликов
> А примитивы из WinAPI? Линии, Эллипсы, многоугольники? Правда на OpenGL это
> сложно
Реализовал только рисование, линий, точек, прямоугольников, для софтрендера добавлю еще окружность.
vka123
> Чтобы что-то пилить надо именно это и пилить.
> А библиотека получается когда ты выделяешь из работающего проекта проектно -
> независимый код и оформляешь его в виде библиотеки.
Могу пилить двиг Arcanum'а как пример и универсальный функционал отделять во фреймворк. Как раз протестирую на реальном проекте. Сейчас есть только примеры к фреймворку.
JordanCpp
> Для софт рендера все рисование идет в буфер
Это понятно, но логично дать возможность выводить софтовый буффер в рендертаргет или текстуру, такое совмещение софтрендера с GL. Кстати, сам рендербуффер выводишь через GL?
> Реализовал только рисование, линий, точек, прямоугольников, для софтрендера добавлю еще окружность
Бери готовые из WinAPI, там и эллипсы, сектора и всякие режимы наложения, кисти и пены, афин трансформ и даже билинейка. Да даже в Borland BGI под DOS полно функций рисования
У меня валяется Processing на OpenGL (сам не разбирался), на нем сделан улетный набор демок Nemehanika. Посмотри и оцени эту вершину исскуства
Рендерферма кроликов
> Это понятно, но логично дать возможность выводить софтовый буффер в
> рендертаргет или текстуру, такое совмещение софтрендера с GL.
Да в GpuRender есть методы для вывода CpuImage
void Draw(CpuImage* image, const Point2u& pos, const Point2u& size); void Draw( CpuImage* image, const Point2u& pos);
Рендерферма кроликов
> Кстати, сам рендербуффер выводишь через GL?
Для софтрендера вывожу так
void CpuWindowImpl::Present(uint8_t* pixels) { _BITMAPINFO.bmiHeader.biSize = sizeof( BITMAPINFOHEADER); _BITMAPINFO.bmiHeader.biWidth = ( LONG)_Window.Size( ).PosX( ); _BITMAPINFO.bmiHeader.biHeight = -( LONG)_Window.Size( ).PosY( ); _BITMAPINFO.bmiHeader.biPlanes = 1; _BITMAPINFO.bmiHeader.biBitCount = 32; _BITMAPINFO.bmiHeader.biCompression = BI_RGB; SetDIBitsToDevice( _Window._HDC, 0, 0, ( DWORD)_Window.Size( ).PosX( ), ( DWORD)_Window.Size( ).PosY( ), 0, 0, 0, ( UINT)_Window.Size( ).PosY( ), pixels, &_BITMAPINFO, DIB_RGB_COLORS); }
Рендерферма кроликов
> Бери готовые из WinAPI, там и эллипсы, сектора и всякие режимы наложения, кисти
> и пены, афин трансформ и даже билинейка. Да даже в Borland BGI под DOS полно
> функций рисования
Точно нет. Мне нужен переносимы рендер. Лучше кодом перенесу из других реализаций.
Рендерферма кроликов
> У меня валяется Processing на OpenGL (сам не разбирался), на нем сделан улетный
> набор демок Nemehanika. Посмотри и оцени эту вершину исскуства
Поделись плиз.