Я взял на себя довольно сложную задачу. В моей игре XNA я хочу реализовать фильтр NTSC Бларгга . Это библиотека C, которая преобразует растровое изображение, чтобы оно выглядело так, как будто оно было выведено на телевизор с ЭЛТ в стандарте NTSC. На самом деле это довольно точно.
Первое, что я попробовал некоторое время назад, это просто использовать саму библиотеку C, назвав ее dll. Здесь у меня было две проблемы: 1. Я не мог » Не удалось добиться правильного копирования некоторых данных, чтобы изображение было искажено, но, что более важно, 2. это было очень медленно. Требовалось получить данные растрового изображения XNA Texture2D
, пропустить их через фильтр, а затем снова установить данные для текстуры. Частота кадров была испорчена, поэтому я не мог пойти по этому пути.
Теперь я пытаюсь преобразовать фильтр в пиксельный шейдер. Проблема здесь (если вы любите смотреть на код - я использую код SNES, потому что он самый простой), заключается в том, что он обрабатывает очень большие массивы и полагается на интересные операции с указателями. Я проделал много работы, переписав алгоритм, чтобы он работал независимо для каждого пикселя, как того требует пиксельный шейдер. Но я не знаю, сработает ли это когда-нибудь. Я пришел к вам, чтобы узнать, возможно ли это закончить.
edit: Дополнение к №2. Я только что где-то читал, что hlsl не только может не обращаться к массивам по переменной, но даже чтобы развернуть его, индекс должен быть вычислен во время компиляции. Это правда, или " должен выдать
BARN
(с необычными цветами для каждого символа), но вместо этого он выдает:
B A R N
B
A
R
N
Что дает желаемый результат, однако:
B A R N
Глупо, а? Во всяком случае, это задокументировано @ Различия в обработке XAML между Silverlight 3 и Silverlight 4 в разделе Обработка пробелов , где говорится:
Silverlight 3 больше обрабатывает пробелы буквально в более широком диапазоне, в том числе некоторые случаи, когда рассматривается CLRF существенный. Иногда это приводило к XAML файлового формата с опущенным CRLF в чтобы избежать нежелательных пробелов в презентация, но которой не было человекочитаемый при редактировании среды. Silverlight 4 использует более интуитивно понятный значащий пробел модель, похожая на WPF. Эта модель сворачивается при форматировании файла пробелы в большинстве случаев с исключение некоторых CLR-атрибутов контейнеры, которые обрабатывают все пробелы столь же значительный. Эта модель пробелов дает больше возможностей для редактирования свобода вводить пробелы, которые может улучшить форматирование кода XAML. Также Silverlight 4 имеет текстовые элементы. которые позволяют еще больший контроль над Проблемы с представлением пробелов.
Отлично, но я не использую SL4, потому что я создаю приложение WP7 программно. Да, мой XAML создан. Использование XML-литералов. Затем отправляется в строку. Примерно так:
Dim r1 As XElement = B
Dim r2 As XElement = A
Dim r3 As XElement = R
Dim r4 As XElement = N
Dim tb =
<%= r1 %><%= r2 %><%= r3 %><%= r4 %>
Dim result = tb.ToString
После всего этого возникает мой вопрос: как я могу создать образец B вместо образца A. Этот текстовый блок станет частью большего количества элементов на странице XAML, поэтому .ToString
часть не совсем точна в этом месте - это происходит, когда весь XAML для страницы пользовательского управления выгружается в файл.
I ' Мы добились небольшого прогресса, как показано ниже, но здесь я сталкиваюсь с мысленным препятствием, касающимся того, как выполнить необычное разделение и обработку XML для вывода строки. Возьмем этот новый пример:
Я хочу, чтобы выходная строка была:
I ' мы просматривали XMLWriter
и XMLWriterSettings
, основанные на сообщении Эрика Уайта , которое кажется хорошим началом для прогонов (не включая потенциал ]
еще, что меня тоже ставит в тупик). Примерно так:
Sub Main()
Dim myXML As XElement =
Console.Write(ToXMLString(myXML))
Console.ReadLine()
End Sub
Public Function ToXMLString(xml As XElement) As String
Dim tb As XElement = xml.Elements..FirstOrDefault
Dim xmlWriterSettings As New XmlWriterSettings
XmlWriterSettings.NewLineHandling = NewLineHandling.None
XmlWriterSettings.OmitXmlDeclaration = True
Dim sb As New StringBuilder
Using xmlwriter As XmlWriter = xmlwriter.Create(sb, XmlWriterSettings)
tb.WriteTo(xmlwriter)
End Using
Return sb.ToString
End Function
Но у меня возникла огромная проблема с тем, чтобы понять, как разобрать это, чтобы получить желаемый результат выше.