XNA: получение структуры в качестве текстуры для графического процессора - PullRequest
1 голос
/ 24 октября 2009

Я использую XNA в качестве удобной основы для обработки графики, которую я выполняю на процессоре, потому что он уже предоставляет много всего, что мне нужно. В настоящее время моя "rendertarget" представляет собой массив пользовательского цвета struct, который я написал, который состоит из трех полей с плавающей точкой: R, G, B.

Когда я хочу отобразить это на экране, я вручную преобразовываю этот массив в цвет struct, который обеспечивает XNA (только 8 бит точности на канал), просто ограничивая результат в диапазоне байтов 0-255. Затем я устанавливаю этот новый массив как данные Texture2D (он имеет SurfaceFormat SurfaceFormat.Color) и визуализирую текстуру с SpriteBatch.

То, что я ищу, - это способ избавиться от этого процесса перевода на ЦП и просто отправить свой буфер в буфер непосредственно в виде графического процессора в качестве некой текстуры, где я хочу выполнить некоторую базовую постобработку. И мне действительно нужно немного больше точности, чем 8 битов (не обязательно 32-битных, но, поскольку то, что я делаю, не сильно использует GPU, я думаю, это не повредит)

Как бы я поступил так?

Я подумал, что если бы я дал Цвету явный размер 32 байта (то есть заполнение 8 байтов, потому что мои три канала заполняют только 24 бита) до StructLayout и установил SurfaceFormat текстуры, которая отображается с помощью * От 1017 * до SurfaceFormat.Vector4 (размером 32 байта) и залил текстуру SetData<Color>, чтобы она могла работать. Но я получаю это исключение:

Тип, который вы используете для T в этом методе, является недопустимым размером для этого ресурса.

Можно ли использовать любой произвольно составленный struct и интерпретировать его как данные текстуры в графическом процессоре, как это можно сделать с вершинами до VertexDeclaration, указав, как он расположен?

1 Ответ

2 голосов
/ 25 октября 2009

Я думаю, что у меня есть то, что я хочу, сбросив цвет struct, который я сделал, и используя Vector4 для получения информации о цвете. Это работает, если SurfaceFormat текстуры также установлено на Vector4.

...