Затемнение части поверхности в Direct3D 9

В Direct3D 9 я пытаюсь изменить поверхность следующим образом:

Учитывая прямоугольник, для каждого пикселя на данной поверхности в пределах границ прямоугольника каждый из каналов (R, G, B, A) будет умножен на определенное (плавающее) значение, чтобы затемнить или осветлить его.

Как мне это сделать? Предпочтительно, чтобы я не использовал LockRect (тем более, что он не работает с пулом по умолчанию).


person Jamie    schedule 29.12.2010    source источник
comment
Можете быть более конкретными? Каково происхождение поверхности? Вы используете его как текстуру? Как часто требуется эта модификация? Каждый кадр?   -  person Virne    schedule 30.12.2010


Ответы (1)


Если вы хотите обновить пиксели Surfaces напрямую, вы можете использовать «Device.UpdateTexture». Это обновляет текстуру, созданную в Pool.SystemMemory, на текстуру, созданную в Pool.Default.

Но это не похоже на то, чем вы хотите заниматься. Используйте эффект для аппаратного ускорения. Если вы хотите знать, как я могу показать вам.

person zezba9000    schedule 04.01.2011
comment
Спасибо, удалось разобраться как заставить работать эффект - person Jamie; 13.01.2011