Latest posts on Использование C библиотек topichttp://python.su/forum/topic/852/2007-06-05T16:52:59+03:00Общий :: Python для экспертов :: Использование C библиотек
2007-06-05T16:52:59+03:00Андрей Светлов5641pygame - хорошо для старта. Многое помогает понять. Дальше - своими ножками
Общий :: Python для экспертов :: Использование C библиотек
2007-06-05T16:31:22+03:00bialix5638<blockquote><em>guest01</em><br/>Я тут думал попробывать этим летом поднатареть в pygame. Интересно все таки. Осталось только сессию сдать.</blockquote>pygame – это хорошо.
Общий :: Python для экспертов :: Использование C библиотек
2007-06-05T16:04:21+03:00guest015636<blockquote><em>Андрей Светлов</em><br/>Пример? Можно, конечно.</blockquote>Спасибо. Я тут думал попробывать этим летом поднатареть в pygame. Интересно все таки. Осталось только сессию сдать.
Общий :: Python для экспертов :: Использование C библиотек
2007-06-05T14:34:11+03:00Андрей Светлов5633Пример? Можно, конечно.<br/>Поскольку моя работа сейчас тесно связана с 3D графикой, пример будет оттуда.<br/>Имеем картинку 342x234 пикселя. В 3d ее принято называть текстурой. Хотим нарисовать один к одному. Это, например фотография или кадр видео.<br/>Старые видеокарты - GeForce FX и древнее от NVidia, есть аналогичная планка у ATI (у них подобным недостатком страдают куда более новые карты), я уже не говорю о Intel IGP - не могут работать с ними. Требуется нак называемый POT - power of two. То есть я должен предоставить текстуру с размерами степени двойки - 2,4,8,16,32,64… Ближайшие будут 512х256. Мне не нужно растягивать текстуру на этот размер - даже при хорошем антиалиасинге пиксели смажутся. А еще раз смажутся при попытке отрисовать эту текстуру в прямоугольник 342x234. В результате я себя на фотографии узнаю с трудом :) <br/>К счастью, при рисовании можно указать, какую часть текстуры вывести в эти 342x234. Т.е. можно заполнить черным цветом (или вообще мусором) эти ненужные мне края - и все получится.<br/>Теперь маленькое отступление. Пример из библиотеки <a href="http://ocean.sourceforge.net" rel="nofollow">ocean.sourceforge.net</a>, которая создавалась для обеспечения пользовательского интерфейса в играх. И сделана практически целиком на питоне. Чтобы прокрутить исходную картинку (питон строку байтов, на самом деле) в результат мне требуется цикл, который состоит из s += padding, а потом s += blackString*leftRows. Питон реагирует медленно и дико тормозит. Текстур много, и меняются они часто (особенно для видео). Если я передаю исходную текстуру в свой Python extension - все делается мгновенно. Есть и более сложные примеры с хитрой обработкой входного буфера (одна декомпрессия чего стоит).<br/><br/>Теперь о 3d и питоне. Питон не подходит для рисования больших сцен. Но он прекрасно годится для их построения, работы с сетью, написания скриптов и искусственного интеллекта персонажей. А рисовать должен C++ по построенной питоном сцене (а еще считать анимацию, физику, звук и прочее). Самый громкий пример - <a href="http://www.eve-online.com.">http://www.eve-online.com.</a> Кстати, создатель stackless python приложил руку к рождению этой игрушки.<br/>А еще на питоне можно очень быстро создать прототип, его обкатать и реализовать уже на С++
Общий :: Python для экспертов :: Использование C библиотек
2007-06-04T17:29:22+03:00guest015623<blockquote><em>Андрей Светлов</em><br/>либо когда надо резко ускорить алгоритмы обработки простых данных вроде буферов большого размера.<br/>Тогда делается простой модуль.</blockquote>А пример можно ? Пожалуйста.<br/><br/><blockquote><em>Андрей Светлов</em><br/>Присутствует и другой случай, куда более сложный.<br/>Мы используем boost.python для оборачивания 3D движка в питон. Эта работа куда более нетривиальная.</blockquote>А как же медлительность интерпритатора? Как я понимаю, для 3D питон не очень хорош. Особенно для обработки больших массивов графики. Или я чего не понимаю …
Общий :: Python для экспертов :: Использование C библиотек
2007-06-04T13:59:31+03:00Андрей Светлов5621Тема на самом деле довольно простая. Если ограничится функциями и не забираться в классы.<br/>Потребность у меня возникает регулярно. Либо с целью достучаться до какой-нибудь чужой библиотеки с С API, либо когда надо резко ускорить алгоритмы обработки простых данных вроде буферов большого размера.<br/>Тогда делается простой модуль.<br/>Присутствует и другой случай, куда более сложный.<br/>Мы используем boost.python для оборачивания 3D движка в питон. Эта работа куда более нетривиальная.
Общий :: Python для экспертов :: Использование C библиотек
2007-06-04T10:30:49+03:00guest015619Интересная тема. Мало в этом понимаю, но узнать хотелось бы. Да и часто ли возникает потребность в написании своих сишных модулей?
Общий :: Python для экспертов :: Использование C библиотек
2007-06-04T09:00:22+03:00bialix5618Книжка Марка Лутца “Программирование на Питон”<br/>На языке оригинала есть в книжных закромах. Предыдущее издание было переведено на русский. Очень добротная книга. В том числе содержит материалы по расширению и встраиванию Питона.<br/><br/>Лучшее описание как писать расширения на Сях, которое я видел.
Общий :: Python для экспертов :: Использование C библиотек
2007-06-03T23:58:13+03:00Андрей Светлов5616Если только C - перечисленные примеры отлично покрывают тему. <br/>Я сам на С API пишу несложные модули. <br/>Но тем не менее советую обратить внимание на boost.python (<a href="http://boost.org" rel="nofollow">boost.org</a>).<br/>На нем очень легко делать замотки как С++ (осносвное назначение, и нет ему конкурента, thanks to Dave Abrahams) так и простого С API.<br/>Еще (если речь идет о С) сторит посмотреть на ctypes - они позволяют завернуть в питон практически весь С код без написания хотя бы одной строчки на С/С++
Общий :: Python для экспертов :: Использование C библиотек
2007-06-03T18:36:57+03:00alafin5615Вот еще на русском <a href="http://www.intuit.ru/department/pl/python/13/">http://www.intuit.ru/department/pl/python/13/</a>
Общий :: Python для экспертов :: Использование C библиотек
2007-06-03T18:26:59+03:00tabajara5614Опис апі - <a href="http://docs.python.org/api/api.html">http://docs.python.org/api/api.html</a> і<br/>як писати - <a href="http://docs.python.org/ext/ext.html">http://docs.python.org/ext/ext.html</a>
Общий :: Python для экспертов :: Использование C библиотек
2007-06-03T18:17:30+03:00niro5613Где прочитать про написание C библиотек для python'а, без использования swig,pyrex и т.д.