Я рисую какую-то динамику жидкости в Python. Через некоторое время я ищу немного больше скорости, поэтому я переписал фактическую логику в C и установил некоторые привязки Python (используя SWIG).C lib с привязками Python, где оба хотят визуализировать
Моя проблема теперь в том, что я не делаю ее в хорошем смысле. Логика запускается пиксель за пикселем, поэтому пиксели - это то, что я хочу отслеживать и отображать.
Python дает мне на TypeError если я пытаюсь сделать функцию в Lib C, которая принимает SDL_Surface*
, я был, вероятно, немного наивно думать, что PyGame карту, которая легко непосредственно SDL. Python также кажется неуверенным, что делать, если я делаю C libs «init» возвращением SDL_Surface*
.
Что такое хороший способ сделать это? Это не проблема, если бы я просто сделал все в C lib. Но я хочу добавить туда какой-то графический интерфейс (используя Python). C lib уже отслеживает, какие пиксели «грязны». Должен ли я раскрывать этот список и пропускать через него Python, вызывать функцию для каждого грязного пикселя? Кажется, плохо, так как эти виды огромных петель являются точная причина, я хотел бы переписать части приложения в C.
И прежде чем кто-нибудь предположить, что он, boost.python немного тяжело установить прямо сейчас (так как я 'm в Windows), поэтому я просто буду придерживаться SWIG на данный момент (если у кого-то нет умного способа установить «просто» boost.python?).
Я надеюсь на серебряную пулю здесь. Как сделать C lib, запуская SDL, обмениваться целью рендеринга с Python, запускать PyGame?
Я в конечном итоге создать поверхность в Python, и сделать Lib С возвращают три элемента кортежа (х, у, paletteindex) пикселей, нуждающихся в перекрашивать. Я действительно получил неплохую производительность с этим, я предполагаю, что это связано с тем, что Im использует PyGame (SDL), видимо, хорошие привязки. Хотя я думал, что звонки будут дороже. – Mizipzor
'PySurface_AsSurface' - это просто макрос для доступа к членам структуры, поэтому он очень чип. –