- 1
- 2
- 3
- 4
void Draw_Pixel_Memset(UINT color, //color = _RGB32BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24))
UINT *buffer){ //buffer = (UINT*) ddsd.lpSurface
memset(buffer, color,8);
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+170
void Draw_Pixel_Memset(UINT color, //color = _RGB32BIT(a,r,g,b) ((b) + ((g) << 8) + ((r) << 16) + ((a) << 24))
UINT *buffer){ //buffer = (UINT*) ddsd.lpSurface
memset(buffer, color,8);
}
Рисование пикселя с помощью meset()
Подскажите, пожалуйста, почему при использование этой функции в 32 битном режиме точка получается какового то серого цвета.
С другой стороны если использовать 8 битный режим то пиксель будет нужного цвета.
Источник: http://www.gamedev.ru/code/forum/?id=145274
"Моя установить"
Почему 8 - не ясно. Могу предположить, что подразумевалась функция `memcpy` c `sizeof color`? Но это было бы то же самое, что банальное присваивание `*buffer = color`. Опять же 8 вместо `sizeof color` смущает. Поэтому какой головой думал тут аффтар и что он пытался соорудить своим "мемсетом" - не ясно.
Вообще-то принимает она как раз int, но интерпретирует потом как unsigned char.
Судя по разговору по ссылке, он ещё не умеет думать.
std::fill_n(buffer, 1, color);
size = 8; // ну не знаю уж почему 8 - рисуете горизонтальную линию из двух пикселей?
*buffer = color;
memcpy(&(buffer[1]), buffer, size - sizeof(UINT)); // это нужно если все-таки "линия"
а вообще, если скорость критична, то советую найти Graphics32 - там в исходниках FillLongword_MMX - оно правда для Delphi, но разберетесь:)
пикселов
p.s. даже словарь мозиллы "пикселов" подчеркивает как ошибку.
Кладут в буфер