mieki256's diary



2013/05/14(火) [n年前の日記]

#3 [prog] pyglet + Radeon で描画できない件について

以下のページを眺めると、「Catalyst 12.4 (video driver 8.961.0.0)以降は直ってるはずだぜ。だからこの件は解決ってことで!」と書いてあるように見えるのだけど。

_linux - pyglet vertex list not rendered (AMD driver?) - Stack Overflow
_Issue 544 - pyglet - Batches are not being draw - Cross-platform windowing and multimedia library for Python. - Google Project Hosting

「それ、ホントかよ?」と思えてきたので、試しに自分の手元のPCでも実験。

結果だけど。

pyglet+radeon描画テスト結果画像

やっぱりダメだった。vertex_list.draw() や batch.draw() を使ったほうは描画されてない。…畜生! 直ってねえよ! 解決してねえよ! 今も Radeon はバグ持ちだよ!

そして、前述のページ内で言及されていた通り、「v2i」を「v2f」に修正してみたところ、正常に描画されてしまったわけで。うーん。

「"v2i"を"v2f"にするだけで描画されるなら、とりあえず全部、"v2f"にしとけばいいんじゃねえの?」と思ったりもしたけれど。本来の仕様や規格とは異なる呼び方、場当たり的な回避策で固定するなんて許されることなんだろうか、という気もするし。ATI/AMDがOpenGL絡みのバグを抱えたままだから、仕方なくそうせざるを得ないという話でしかないだろうし。

でも、こういうバグ持ちなバージョンのドライバを使い続けてる環境も多いだろうし。特定アプリのために、古いドライバに戻してくれなんて、フツーは言えないし。実際にどの環境でも動くようにと考えたら、場当たり的でもいいからとにかくソレをやるしかないのでは、という気も。

どういう選択が正解なのか、よくわかりませんな…。

環境や動作確認サンプルをメモ。 :

Windows7 x64 + Python 2.6.6 + pyglet 1.2 alpha 1。

ビデオカード(ビデオチップ)周りの情報は以下の通り。 _HWiNFO32 で取得。
ATI/AMD Radeon HD 4200 (RS880)
	 	
[General Information]
	Device Name:	ATI/AMD Radeon HD 4200 (RS880)
	Original Device Name:	ATI/AMD Radeon HD 4200 (RS880)
	Device Class:	VGA Compatible Adapter
	Revision ID:	0
	Bus Number:	1
	Device Number:	5
	Function Number:	0
	PCI Latency Timer:	0
	Hardware ID:	PCI\VEN_1002&DEV_9710&SUBSYS_97101849&REV_00
 		
[System Resources]
	Interrupt Line:	N/A
	Interrupt Pin:	INTA#
	Memory Base Address 0	D0000000
	I/O Base Address 1	D000
	Memory Base Address 2	FE9F0000
	Memory Base Address 5	FE800000
 		
[Features]
	Bus Mastering:	Enabled
	Running At 66 MHz:	Not Capable
	Fast Back-to-Back Transactions:	Not Capable
 		
[Driver Information]
	Driver Manufacturer:	Advanced Micro Devices, Inc.
	Driver Description:	ATI Radeon HD 4200
	Driver Provider:	Advanced Micro Devices, Inc.
	Driver Version:	8.970.100.7000
	Driver Date:	16-Nov-2012
	DeviceInstanceId	PCI\VEN_1002&DEV_9710&SUBSYS_97101849&REV_00\4&2417585A&0&2808 
Driver Version は、8.970.100.7000 なので、前述のページで書かれていた 8.961.0.0 より新しい…と思う。たぶん。

動作確認に使ったスクリプトは以下の通り。コピペしてきただけ…。
import pyglet

window = pyglet.window.Window(640, 480)
w, h = window.get_size()

vl = pyglet.graphics.vertex_list(4,
                                  ('v2i', (100, 0, 100, h, 200, h, 200, 0)),
                                  ('c3B', (255, 255, 255, 255, 0, 0,
                                           0, 255, 0, 0, 0, 255)))

batch = pyglet.graphics.Batch()

x = 220
y = 10
width = 70
height = 200
color = 127, 127, 0, 127
color2 = 0, 127, 0, 127

batch.add_indexed(4, pyglet.gl.GL_TRIANGLES, None,
                    [0, 1, 2, 1, 2, 3],
                    ('v2i', (x, y,
                             x + width, y,
                             x, y + height,
                             x + width, y + height)),
                    ('c4B', tuple(color * 4)))

x += w / 2

@window.event
def on_draw():
    window.clear()

    vl.draw(pyglet.gl.GL_QUADS)
    batch.draw()

    pyglet.graphics.draw(4, pyglet.gl.GL_QUADS,
                          ('v2i', (400, 0, 400, h, 500, h, 500, 0)),
                          ('c3B', (255, 255, 255, 255, 0, 0,
                                   0, 255, 0, 0, 0, 255)))

    pyglet.graphics.draw_indexed(4, pyglet.gl.GL_TRIANGLES,
                    [0, 1, 2, 1, 2, 3],
                    ('v2i', (x, y,
                             x + width, y,
                             x , y + height,
                             x + width, y + height)),
                    ('c4B', tuple(color2 * 4)))

pyglet.app.run()

2013/05/15追記。 :

一応実行ファイルとソース一式も置いとくです。
_test_pyglet_v2i_20130515.zip
  • pyglet_v2i.exe を実行すれば、"v2i"指定版が起動。
  • pyglet_v2f.exe を実行すれば、"v2f"指定版が起動。
  • src/以下にスクリプトソース入り。

AMD Driverのバグについて :

_The AMD Driver Bug Thread - [H]ard|Forum にまとまってた。結構あるんだなあ…。

「昔のOpenGL仕様を使ったアプリを動かすとマズイことになる」てな話が気になる。今回の不具合も、そのあたりが絡んでるのだろうか。わからんけど。

なんだか ATI/AMD だけdisってる感もあるけど、NVIDIAのドライバも結構バグがあるはずなので…。一時期は、 _ビデオカードを熱で故障させちゃうドライバ を出しちゃってたし。ハードウェアを壊しちゃうのは、さすがにクリティカル過ぎる…。

なので、ATI/AMDはとにかく糞と言いたいわけでもなく。どれを選んでも何かしら抱えてるはずだろうと。…まあ、OpenGL使いたいなら、ATI/AMD は今でも避けるのがどうやら無難っぽいですなあ、ぐらいの話で。

ビデオチップは複雑な処理をするハードウェアだし、次々に新チップも出さなきゃいかんし、基本的には DirectX重視の市場だろうから、仕方ないのかも、てな気もしています。

2017/03/19追記。 :

Dropboxのpublicフォルダが死んだのでファイルの置き場所を変更。

以上です。

過去ログ表示

Prev - 2013/05 - Next
1 2 3 4
5 6 7 8 9 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 で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project