These pages are written by only Japanese.

Welcom to My Diary.com
最新の日記タイトル一覧カテゴリ別タイトル一覧トップへ戻る〜

おはようございます♪ 現在は4月28日(日)6時1分。 鳥がさえずり始める頃です。


hns - 日記自動生成システム - Version 2.19.5 (色々 Fixed)

先月 2011年08月 来月
1 02 3 4 5 06
07 08 09 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Namazu for hns による簡易全文検索です。
詳細は 詳細指定/ヘルプをご参照下さい。
検索式:

2011年08月02日(火)

PHP OpenGL Forums への返信

PHP OpenGL Forums にメッセージがありました。
ichevc00  2011-08-02 01:07:06 JST
Hi Yoya, could you release windows binaires for php5 ? I'm realy interest in your project.
期待されてる。これはやるっきゃない。
yoya  2011-08-03 01:38:45 JST
Hi Ichevc.
My development and testing platforms are mainly Linux and MacOSX.
I'll trying to build PHP5 Windows DLL from https://github.com/yoya/phpopengl
Please wait a little.
little 言い切っちゃいました。背水の陣です。
PHP4 で動いていた(はずの) config.w32 があるので何とかなると楽観視してます。
Windows は得意でないので茨の道だけど頑張ろう。頑張りどき。何か変われる気がする。

と軽く言ってみたけれど。:

OpenGL のライブラリに手を出すという事は、サポート的にあらゆるビデオカードやそのドライバの癖を知らなければならない。
OpenGL や GLUT 自体もプラットフォームによって微妙に動作が違うらしい。
なので、バッドノウハウを沢山集める必要がある。集めよう。

2011年08月06日(土)

Windows 版 PHP extension の作成に挑戦

現状:

  • --disable-all だと PHP.exe が生成される所まで成功する
    • ext/calender/jewish.c にヘブライ語っぽい文字が混ざってるので、それを変換する必要あり。
  • デフォルトの build だと build の途中で失敗。
  • ライブラリが必要なので、deps-5.3-vc9-x86.7z を c:\php-sdk\php53dev\vc9\x86\deps に展開してみましたが、それだけじゃダメみたい
  • --disable-all --enable-mbstring のように特定の extension を含めてコンパイルする事はできる!
  • でも、以上の方法は static で作られるんだよね。.dll を別にする方法を知りたい。

失敗ログ:

Type 'nmake' to build PHP

c:\php-sdk\php53dev\vc9\x86\php-5.3.6>nmake

Microsoft(R) Program Maintenance Utility Version 10.00.30319.01
Copyright (C) Microsoft Corporation.  All rights reserved.

Recreating build dirs
gd.c
<略>
libiconv_a.lib(iconv1.obj) : MSIL .netmodule または /GL を伴ってコンパイルされた
モジュールが見つかりました。/LTCG を使用して再開始してください。リンカーのパフォ
ーマンスを向上させるためには、コマンドラインに /LTCG を追加してください。
   ライブラリ Release_TS\php5ts.lib とオブジェクト Release_TS\php5ts.exp を作成
中
コード生成しています。
コード生成が終了しました。
php_xmlreader.obj : warning LNK4049: ローカルで定義されたシンボル _php_dom_creat
e_object がインポートされました。
php_xmlreader.obj : warning LNK4049: ローカルで定義されたシンボル _dom_node_clas
s_entry がインポートされました。
        rc /n /fo Release_TS\php_gd2.dll.res /d FILE_DESCRIPTION="\"GD imaging\"
" /d FILE_NAME="\"php_gd2.dll\"" /d URL="\"http://www.php.net\"" /d INTERNAL_NAM
E="\"GD extension\"" /d THANKS_GUYS="\"Thanks to Rasmus Lerdorf, Stig Bakken, Ji
m Winstead, Jouni Ahto, Ilia Alshanetsky, Pierre-Alain Joye, Marcus Boerger\"" w
in32\build\template.rc
Microsoft (R) Windows (R) Resource Compiler Version 6.1.7600.16385
Copyright (C) Microsoft Corporation.  All rights reserved.

libiconv_a.lib(iconv1.obj) : MSIL .netmodule または /GL を伴ってコンパイルされた
モジュールが見つかりました。/LTCG を使用して再開始してください。リンカーのパフォ
ーマンスを向上させるためには、コマンドラインに /LTCG を追加してください。
   ライブラリ Release_TS\php_gd2.lib とオブジェクト Release_TS\php_gd2.exp を作
成中
 LINK : warning LNK4098: defaultlib 'LIBCMT' は他のライブラリの使用と競合していま
す。/NODEFAULTLIB:library を使用してください。
gd_gd2.obj : error LNK2001: 外部シンボル "_uncompress" は未解決です。
gd_gd2.obj : error LNK2001: 外部シンボル "_compress" は未解決です。
libpng_a.lib(png.obj) : error LNK2001: 外部シンボル "_crc32" は未解決です。
libpng_a.lib(png.obj) : error LNK2001: 外部シンボル "_inflateReset" は未解決です
。
libpng_a.lib(pngrutil.obj) : error LNK2001: 外部シンボル "_inflateReset" は未解
決です。
libpng_a.lib(pngread.obj) : error LNK2001: 外部シンボル "_inflateInit_" は未解決
です。
libpng_a.lib(pngread.obj) : error LNK2001: 外部シンボル "_inflate" は未解決です
。
libpng_a.lib(pngrutil.obj) : error LNK2001: 外部シンボル "_inflate" は未解決です
。
libpng_a.lib(pngread.obj) : error LNK2001: 外部シンボル "_inflateEnd" は未解決で
す。
libpng_a.lib(pngwrite.obj) : error LNK2001: 外部シンボル "_deflate" は未解決です
。
libpng_a.lib(pngwutil.obj) : error LNK2001: 外部シンボル "_deflate" は未解決です
。
libpng_a.lib(pngwrite.obj) : error LNK2001: 外部シンボル "_deflateEnd" は未解決
です。
libpng_a.lib(pngwutil.obj) : error LNK2001: 外部シンボル "_deflateInit2_" は未解
決です。
libpng_a.lib(pngwutil.obj) : error LNK2001: 外部シンボル "_deflateReset" は未解
決です。
Release_TS\php_gd2.dll : fatal error LNK1120: 外部参照 11 が未解決です。
NMAKE : fatal error U1077: '"C:\Program Files\Microsoft Visual Studio 10.0\VC\Bi
n\cl.exe"' : リターン コード '0x2'
Stop.

c:\php-sdk\php53dev\vc9\x86\php-5.3.6>

2011年08月07日(日)

Windows 版 PHP extension の作成に挑戦(2)

これの続き。
zlib extension は組み込めていたので、そっちの config.w32 を見たら、
if (!PHP_ZLIB_SHARED) {
   ADD_DEF_FILE("ext\\zlib\\php_zlib.def");
}
という記述がありました。
php_zlib.def をエディタで開くと関数名が表示されて、 これかなと ext/gd/config.w32 に同じ記述を追加した所、build に成功しました。 *1
これ、本家はどうやってるんだろう…
デフォルトだと static 組み込みになるので、Windows 版 DLL 作成の入口でさえないんですよね。
先は長そうです。

shared のメモ:

Try
configure.js --enable-myextension=shared  
edit: might also be
configure.js --with-myextension=shared 

*1: buildconf し直してもダメで、nmake clean が必要でした

2011年08月09日(火)

SWFEditor 0.46 をリリースしました

0.46 の主目的は JPEG 処理の不具合対処&改善です。

replaceJpegData 不具合修正:

以前から以下のエラーがたまに発生していたのですが、
jpeg_segment_parse: marker1=0x00
replaceJpegData に(偽装ツール等で) EOI の後ろにゴミを付けた JPEG を渡すと入れ替えに失敗する不具合に気付きました。
本来、JPEG は EOI の後を読み捨てるべきですが、SWF 中の JPEG は EOI で終端するとは限らないので JPEG の chunk 分解の処理で無条件に EOI の後を無視出来ない。
というのが、不具合の言い訳です。
  • JPEG の chunk 分解で EOI の後に不正なデータがある場合は読み捨てる。(ちょっと微妙な対応)
  • SWF JPEG の処理で SOS,RST の後ろを並び変える必要はないので、SOS,RST から後ろは EOI やその後ろのゴミも含めて、ひと固まりとして処理する事にしました。
  • 但し、JPEG の最後2byte が EOI 出ないといったあからさまにゴミが付いている場合は、今まで通り EOI まで chunk 切り出しの処理を行います。

getPNGData:

getPNGData で取得した画像が本来より白みがかっていたり、逆に暗い事がありました。 明示的にガンマ値を 1.0 に設定していたのが悪さをしていたので消しました。素直に生きよう。

ちょっぴり(?)高速化:

  • 本来、RST は len フィールドが無く、終端マーカ2byte を scan する必要がありますが、基本的には EOI までひと塊で処理する事にしたので、scan の頻度が減ります。
  • tag から CID を抽出する際に、今までは tag を真面目に parse してましたが、特定の tag に関しては生データから offset で抽出するので、処理が減ります。- bitstream の bit shift width 算出で *8 を <<3 にしたので、もしかしたら速くなるかも。(乗算の方が速かったらゴメンナサイ)

IO_SWF 2.0.9 をリリースしました

ビットマップ系のタグ(Lossless, Jpeg) の parse/dump/build に対応しました。 これが無いと、SWF 中のビットマップの CID を調べられないので。
SWF/Lossless.php や SWF/JPEG.php にある処理のいくつかは、この Tag/〜.php に移動するかもしれません。
これのテスト中に SWF に含まれるデータ要素の組み合わせによって require が出来ずに動作しない事があったので、気付いた分は修正しました。
あと、SWF 情報要素を格納する Class プロパティ名の naming convension を少し変えました。($this->_hoge から $this->_Hoge に) こっちの方が見やすかったので。 少しずつ統一していきます。

2011年08月10日(水)

SWFEditor Windows DLL

出来ました。バージョンは 0.47a (0.47 の開発途中)で、実際は 0.46 相当です。
Vista 上で<s>、かつ 5.3.6</s>しか動作確認していないので、もし他の環境で動いたという報告があると嬉しいです。 一般的に使われそうな php.exe に組み込んでも動かなかったので、dll と一緒に build した php.ext 等と併せて zip にまとめました。
追記 (2011/8/18)
Visual C++ 2010 を入れてない環境では動かないらしいので。↓こちらで。(opengl 用のパッケージですが、こっそり swfed も動くようにしてます)

Windows 版 PHP の build 方法:

  • https://wiki.php.net/internals/windows/stepbystepbuild
本家の Wiki の手順で進めれば大体はうまくいきます。
Visual C++ (今回は 2010) をインストール
Windows SDK をインストール
c:\php-sdk を作成して、binary-tools.zip (今回は php-sdk-binary-tools-20110512.zip) を C:\php-sdk に展開
Windows SDK コンソールを起動。(黒字に黄字の画面)
cd C:\php-sdk            # ショートカットをコピーして work dir を C:\php-sdk にしとくと楽
setenv /x86 /xp /release # 黒字に暗い緑字に画面に変わる。読みにくい
bin\phpsdk_setvars.bat
bin\phpsdk_buildtree.bat php53dev
。(ちなみに、setenv と phpsdk_setvars.bat はコンソールを起動する際に、毎回実行する)
C:\php-sdk\php53dev\vc9\x86 にソースとライブラリを展開
php の tarball を展開。(今回は php-5.3.6.tar.bz2)
deps を展開 (今回は deps-5.3-vc9-x86.7z)
php ソースツリーにトップに移動して build 関連コマンドを実行
cd C:\php-sdk\php53dev\vc9\x86\php-5.3.6
buildconf # ソースツリーを漁って configure.js を構築する
configure # configure.js を実行してコンパイル条件を整える
nmake     # 実際のコンパイル&リンク
あと、手順に加えて以下の2つの対処が必要でした。
ext/calender/jewish.c からヘブライ語を除く。
ext/gd/config.w32 を編集して SHARED 対応する。(ext/zlib/config.w32 を真似)

Windows 版 PHP extension DLL の build 方法:

ext/swfed にプログラムを置く
必要なライブラリをばら撒く
png はヘッダを deps/include 以下に置く
giflib のライブラリとヘッダ
入手元
ライブラリは giflib.a.dll を giflib_a_dll.lib に改名して deps/lib に設置
ext/swfed/config.w32 を作成する (zlib や gd の config.w32 を真似する)
buildconf を実行
configure --enable-swfed=shared を実行
nmake
Release_TS 以下に php_swfed.dll が出来てます。

試行錯誤:

  • コメントに日本語があるとマズイので全て英語にするか消す。 grep "[あ-ん]" *.[ch] で探した
  • 変数宣言はブロックの頭に置く必要があるので、そうする。
  • giflib は sourceforge のを利用したけど、static library が 〜.a で提供されていて、〜.lib に拡張子を変えたら認識してくれた。(認識されない場合でも build は通る、けど別途 giflib4.dll が必要になる)
  • config.w32 を編集して buildconf しても configure.js に反映されない事がある。nmake clean してやり直すとうまくいく。(謎)

動作環境:

初め dll だけ公開したのですが、XAMPP でも公式PHP5.3でも動作しなかったので、自分がコンパイルした php.exe と合わせて一式 zip にまとめました。
XAMPP は build ツールのバージョン違い(VC6 != VC10)でエラーになり、公式PHP は単に動きませんとだけ表示されます。残念。

2011年08月13日(土)

IO_SWF の使い方

IO_SWF の使い方について聞かれる事が増えてきたので、まとめを開始。 pure PHP なので重たいと言い訳してて、実際そうですが、勿体ない処理が結構あるので手直し中です。
特に IO_Bit クラスは読みやすさ優先で最適化はしていませんが、そろそろ手をつけます。

2011年08月16日(火)

PHPOpenGL の build は成功

一応、build は出来て、かつモジュールの初期化では落ちなくなった。
でも、glutDisplayFunc を呼ぶと落ちる上 *1 に、Windows では display callback をセットしないと glutMainLoop がエラーになるので、まだ何も表示できない。

OpenGL, GLUT に共通する処置:

windows.h の前で WinSock2.h を include する
C:\Program Files\Microsoft SDKs\Windows\v7.1\INCLUDE\ws2def.h(91) :
 warning C4005: 'AF_IPX' : マクロが再定義されました。
zend_is_callable の<del datetime="2011-08-17T03:01:38+09:00">第1引数</del><ins datetime="2011-08-17T03:01:38+09:00">第3引数</ins>に TSRMLS_CC を付ける
ext\glut\php_glut.c(686) : error C2198: 'zend_is_callable' :
 呼び出しに対する引数が少なすぎます。

OpenGL:

モジュールを読み込むだけで落ちてた。init_glu に渡す引数に TSRMLS_CC を追加したら直る。

GLUT:

glut.h と glut.lib を各々以下の場所に。
C:\Program Files\Microsoft SDKs\Windows\v7.1\Include\gl\
C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib
dll はあえてインストールせず。exe と dll を一緒に配布する予定なので。
C:\Windows\system\
glut.h の前で stdlib.h を include する。
c:\Program Files\Microsoft Visual Studio 10.0\VC\INCLUDE\stdlib.h(353) :
 error C2381: 'exit' : 再定義 ; __declspec(noreturn) が異なります。

*1: zend_is_callback の引数間違えていたので、修正して明日確認する

2011年08月17日(水)

OpenGL/GLUT for PHP5.3 exe v0.0.1 (experimental)

OpenGL 対応 PHP の Windows 版が、そこそこ動作したので zip で公開します。 尚、Microsoft Windows Vista と 7 の 32bit 版で動作確認しました。 早速、sourceforge.net の phpopengl forum に報告。
Dear all.
Windows binary PHP5.3 with OpenGL/GLUT extension for you.
英語版 Windows での動作確認はしてないので心配ですが。。。

プログラム:

↓元はこれで、PHP4 では動作してました。 ↓僕が PHP5 でも動くように改造したコード

使い方:

php -c php.ini samples\contrib\gears.php

問題:

Windows SDK 7.1 はデフォルトで OpenGL1.2 なので API はそこまでしか対応してません。
GLUT callback 関数がまだちゃんと動かないので、以下のサンプルはすぐに止まるか全く動きません。直します。
samples\examples\movelight.php
samples\glut\glut_example.php
samples\redbook\bezmesh.php
msvcr100.dll
exe への組み込みに失敗したので添付してます。次は頑張ります。

2011年08月18日(木)

PHPOpenAL for Windows build してみた

config.w32 だけ作ったらとりあえず build は通ったけど。
PHP Startup: Invalid library (maybe not a PHP library) 'php_openal.dll'
残念。--enable-openal=yes で static に組み込んでも php -i で出てこない。何か足りない。

2011年08月19日(金)

PHP AV 拡張

PHP AV 拡張と称して、Audio/Visual 関連で使えそうな PHP extension を Windows で build して PHP カンファレンスの LT に応募しようと企んでます。
去年からいじってる OpenGL *1 に関しては、そこそこ動きました。(callback が怪しいので調査中) 今は、OpenAL *2 を繋げています。pecl のソースを持ってきて build したのですが、まだ動かないです。 この2つが動けば、クライアントサイド PHP とかアホなネタが出来るかなと。 他に面白い extension とかないかしら。
*1: いわずと知れた 3D グラフィックスAPI
*2: creative の出してる音声処理API

2011年08月23日(火)

IO_SWF 2.0.10 をリリースしました

主に、JPEG 入れ替え処理の不具合修正です。
ご指摘ありがとうございます。> @yoko00068 さん replaceBitmapData で Jpeg 入れ替え処理の時に、バイナリに bitmap_id (CharacterID) を埋め込み忘れていて、入れ替えた後の SWF で CharacterID のあるはずの箇所が (JPEG の先頭にあたる) FF D8 (=0xD8FF) か FF D9 (=0xD9FF) になってしまう不具合です。
実際に、その SWF を動かすと、JPEG 画像の部分が真っ赤に表示されていたと思います。ほんとに済みません。。

2.0.10 の内容:

  • replaceBitmapData で JPEG の入れ替えに失敗する不具合を修正しました。
  • DefineText, DefineText2 の処理を追加しました。 (dump で詳細表示します)
  • DefineMorphShape の build 処理を修正しました。(rebuild で問題がありました)
  • ActionByteCode の dump 表示で GotoFrame2 が表示できなかったので対応しました
  • こっそり、Button オブジェクトの処理を入れていますが、まだちゃんと動いていないので無効化してます。

PHPOpenAL 0.3 zip 公開:

まだ wav 取り込みが動いていませんが、とりあえず音が鳴ったので、そのサンプル付きで公開します。尚、PHPOpenGL とそのサンプルも含めています。 展開した後に出来た bat ファイルをクリックすると、きっと、音が鳴ったり、グルグル3D回転する描画が始まります。
(Windows Vista と 7 で確認。多分 XP でも動くはず)

2011/09/10 追記:

ここから、oalins か OpenAL11CoreSDK を落としてインストールして下さい。でないと音なりません。

これで、11 日分だよ〜。

タイトル一覧
カテゴリ分類
Database
JXTA
Java
XML
awm
bookmark
keyword
memo
news
research
Powered by hns-2.19.5, HyperNikkiSystem Project