[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[mgp-users-jp 00462] Re: Magic Point on NetBSD-current



	IRI許です。

> 千葉大の山本です。少し前の話題ですが…。

	一番最初に問題を投げた許です。

> VFlib 2.24.2 を使って、vfontcap 中で ft=truetype となっているフォント
> に対し、VF_OpenFont と VF_CloseFont を交互に何度も適用していくという簡
> 単なテストプログラムを実行してみたところ、126 回目の VF_OpenFont で失
> 敗(負の値を返す)してしまいました。どうも VFlib の file manager(fman.c) 
> でのリソースの再利用がうまくいっていないようです。ft=freetype となって
> いるフォントの場合は file manager を利用していないためにこの問題は起こ
> らないみたいです。

	私はZeitの書体クラブフォントやZ'sWord JG系フォントを全部で21書体持っ
	ているので、それを使っています。
	ttfも10書体程度はありますが、ZeitのFontを昔から使っている事情もあり
	vfontcapに登録していません。

	というわけで、Zeit の方でどうなるかを確認しておく必要がありそうです。

	VFlib の tools にある fmtestをちょっとだけいじって同様の実験をしまし
	た。

	ft=jg		ft=zeit
	zmin0by	zkgo0by	mincho	gothic
	83回	83回	125回	125回

	で、それぞれ、VF_OpenFontが負の値を返します。

> VFlib の方に手を加えるのが正攻法でしょうが、既に VFlib version 2 がか
> なり普及していると思われることと、毎回 VF_CloseFont をするのもそれなり
> に overhead があることを考慮して、
> 
>   ・通常は VF_CloseFont しない
>   ・フォントテーブルを使いきった時点で VF_Deinit, VF_Init を再度行う
> 
> という方針にするというのはいかがでしょうか? 実際には VF_OpenFont の返
> り値が負であったことからだけでは、「フォントテーブルを使いきった」のか、
> 「そもそもそういうフォントがない」のか判定できないので、VF_OpenFont に
> 失敗したときは VF_Deinit, VF_Init して再度 VF_OpenFont を試してみる、
> といったようなことが必要になると思いますが。

	私の投げた最初の VF_CloseFont を呼ばないというアプローチは、取り合え
	ずFontTableを使い切らないだろうと言う消極的理由で処置したものです。
	ですから、個人的には、この対処方法は正しいものであるような気がします。

ほ