XNA: получение структуры в качестве текстуры для графического процессора

StackOverflow https://stackoverflow.com/questions/1616683

Вопрос

Я использую 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 текстуры также установлено на <=>.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top