XNA: получение структуры в качестве текстуры для графического процессора
Вопрос
Я использую XNA в качестве удобной основы для обработки графики, которую я выполняю на процессоре, потому что он уже предоставляет много всего, что мне нужно. В настоящее время мой & Quot; rendertarget & Quot; массив пользовательских цветов struct
, который я написал, который состоит из трех полей с плавающей запятой: R, G, B.
Когда я хочу отобразить это на экране, я вручную преобразовываю этот массив в цвет Texture2D
, который обеспечивает XNA (только 8 бит точности на канал), просто ограничивая результат в диапазоне байтов 0-255. Затем я устанавливаю этот новый массив как данные SurfaceFormat
(он имеет SurfaceFormat.Color
SpriteBatch
) и отображаю текстуру с помощью StructLayout
.
То, что я ищу, - это способ избавиться от этого процесса перевода на процессоре и просто отправить свой буфер в виде графического процессора непосредственно в виде графического процессора, где я хочу выполнить некоторую базовую постобработку. И мне действительно нужно немного больше точности, чем 8 битов (не обязательно 32-битных, но, поскольку то, что я делаю, не сильно использует GPU, я думаю, это не повредит). Р>
Как бы я поступил так? Р>
Я подумал, что если я укажу Color явный размер 32 байта (то есть заполнение 8 байтов, потому что мои три канала заполняют только 24 бита) через SurfaceFormat.Vector4
и задаю SetData<Color>
текстуры, которая отображается с помощью < => до VertexDeclaration
(размером 32 байта) и залили текстуру <=>, чтобы она работала. Но я получаю это исключение:
Тип, который вы используете для T в этом методе, является недопустимым размером для этого ресурса.
Можно ли использовать любой произвольно составленный <=> и интерпретировать его как данные текстуры в графическом процессоре, как это можно сделать с вершинами через <=>, указав, как он расположен?
Решение
Я думаю, что у меня есть то, что я хочу, выбрав созданный мной цвет struct
и используя Vector4
для получения информации о цвете. Это работает, если SurfaceFormat
текстуры также установлено на <=>. Р>