Я новичок в SDL/SDL2, с небольшим опытом работы в C/C++, некоторые с pygame, pyglet и PySide, и теперь я пытаюсь PySDL2 найти более быструю альтернативу Processing. Обработка предназначена для рисования, но есть простой API for direct pixel works.SDL2 пиксельный графический конвейер
Я начал с PySDL2 только вчера и провел целый день, написав шаблонный код, чтобы реализовать простой алгоритм пожара. Некоторые могут смеяться над ним - всего один день - но я думаю, что для графической библиотеки важно, чтобы вы могли что-то с этим сделать за один день. Моя проблема - плохой опыт работы на C/C++, а соответствующий API PySDL2 - mostly direct mapping to C API, поэтому из-за трудностей, связанных с терминологией и спецификой C, сложно найти все детали. Я отказался от простого обзора графического конвейера SDL2.
Графический контур - это путь, по которому байты и/или целые числа становятся пикселями на экране. Например, изображение высокого уровня для OpenGL находится здесь - http://duriansoftware.com/joe/An-intro-to-modern-OpenGL.-Chapter-1:-The-Graphics-Pipeline.html - и я ищу более подробное изображение трубопровода в SDL2.
Основная сложность с пониманием того, как пиксель рисуется в SDL2, заключается в том, что SDL2 API предоставляет полезные помощники, которые скрывают эти детали низкого уровня. Как вы загружаете растровое изображение и получаете поверхность. Затем вы перемещаете поверхность по текстуре. Затем SDL2 каким-то образом перемещает текстуру в видеопамять. Затем говорит GPU, чтобы показать его на экране. Это не то, как я это понял, но нет ссылки, которую я могу дать вам там, где она была упомянута. Так, это:
[data array] --> [pixel array] --> [surface] --> [texture] --> [video memory] ┐
|
..made with uglihunds ascii editor.. [screen] <-┘
(which haz no graphics pipeline)
И для моего применения это должно выполняться 25 раз в секунду. Когда я пишу это на Python, мне действительно нужно знать, какой конвейер должен решить, где оптимизировать. Но я не уверен, что конвейер верен, и я немного потерял внутри API - есть много помощников, и я не знаю, даже есть отправная точка, как мои рассчитанные пиксельные данные могут и должны выглядеть.
Так что мне нужно знать:
- какие виды входных данных, которые SDL2 поддерживает (BMP, указатель памяти, и т.д.)
- есть промежуточный формат данных, к которым вход преобразуется
- , что это преобразование данных цепь
- как управляется цепью преобразования
какие виды продукции, что SDL2 поддерживает
Как это должно выглядеть в PySDL2
Существует также this question downvoted кто-то, что говорит мне, что я не одинок в своих неурядицах.
ОБНОВЛЕНИЕ:
Как было отмечено, @Ancurio объекта поверхности в уже массив пикселей и массива данных, поэтому я изменение диаграммы и обеспечивают определение, что поверхность представляет собой матрицу пикселов.
[bitmap] ----┐
[int array] -┴-> [surface] --> [texture] --> [video memory] --> [screen]
Таким образом, в основном поверхность является 1. непрерывной памятью с пиксельными данными, 2. информацией о пикселях. bitmap - это также пиксельный массив, который вы загружаете с диска или с изображения.Но SDL2 не может использовать его напрямую. Зачем?
Вопрос для первого шага конвейера заключается в том, как int и растровые пиксели преобразуются в поверхностные пиксели и как поверхность отличается от растрового изображения? Я использую Python, где нет очевидного прямого доступа к памяти, и мне нужно выяснить, какие у меня варианты.
Шаг «текстура -> видеопамять» лишний, поскольку текстура, скорее всего, уже находится в VRAM. Кроме того, я не уверен в первых трех шагах? Поверхность представляет собой массив пикселей, представляющий собой массив данных. Шаг, предшествующий этому, будет только загружать/декомпрессировать изображение с диска. – Ancurio
@ Анкурио, спасибо. Думая об этом, я немного расстроился в своей голове. Я добавил обновление к вопросу. –