Members

  • 元々このサークル作った人
    • もう県大にはいないヨ
  • Skype名:s_igrsh
  • 主な興味分野はOS/ミドルウェア(低レベルな奴)
    • でも最近高レベルな部分しか触ってないような気がする
  • 開発環境
    • メイン(自作)
      • OS:Windows 2008 Server
      • CPU:Core 2 Duo E6420
      • VGA:Geforce 7900GS
    • サブ(ノート)
      • ブツ:Thinkpad X61
      • OS:Ubuntu9.04
  • 主な使用言語はC、たまにC++/x86アセンブラ/C#/PHP/Javascript/D/Go
  • ネットがしぼう
  • ブクログ
    • 読みたいのあったら言って
    • 別に全部きちんと読み通した訳じゃないヨ(暇にならないよう買いだめした)

メモ

Go言語(golang)+SDL+OpenGL

↓ちょっと古い情報(2009年末くらい?)、今はC言語側からGoの関数呼ぶ方法も一応提供されてる(泥臭いけど)。cgoの//exportの使い方はmisc/cgo/lifeを見るとよい

cgo

  • cgoがC言語ライブラリのインポータの本体
    • cgoが#defineやenumのC言語定数をGoのconst定数に置き換えてくれない
      • 正規表現なり使ってフィルタ書く
    • cgoが関数マクロを関数にしてくれない
      • そりゃそうだ
      • 手動で展開するなりプリプロセッサに展開させるなり
    • cgoがCヘッダ内のGoキーワードを変名してくれないので、mapやtypeのようなGoキーワードが構造体のメンバ名などに使われてるとGoコンパイラが怒る
    • SDLのSDL_Surfaceみたいに定義の無い構造体へのポインタを使ってる構造体があるとコンパイラが泣きを入れる
      • このへんは誤魔化しヘッダを一段かまして解決してみた
        [sdlcheat.h]
        #define map map_
        #define type type_
        #include <SDL/SDL.h>
        struct private_hwdata{};
        struct SDL_BlitMap{};
        [Goコード側]
        // #include “sdlcheat.h”
    • ビットフィールドを含む構造体もcgoが嫌がる
      • C言語側にフィールド単位でのアクセッサ関数を用意してGoからはそれ経由でアクセス
    • unionもcgoがキレる
      • C言語側にアクセッサ関数を用意して(ry
      • keyevent := (*C.SDL_KeyboardEvent?)(unsafe.Pointer(&event))とか男らしいやり方でも動いたことは動いた(やらない方がいいとは思う)

まとめ

音も出たし絵も動いたしキー入力もとれた、Goでゲームとか作れマス。 C言語でできたことは何でもできる、と言いたいところだけど、C言語側からGoの関数呼ぶ方法がないのでコールバック登録の必要な一部のAPIとは相性悪い。qsort()とかを呼ぶための正しい方法はない臭い。コールバックがどうしても必要、ってなりえるのはマシンの状態取得する時だと思うので、C言語側にコード仕込めば詰みという訳ではないけど(後述)。

「Cライブラリ→cgoを使うGoによるラッパ→Goアプリ」の3段がGoからCライブラリ使うときのまともな方法だけど、ビットフィールドや共用体へのアクセッサをC言語側で用意するのを考えると「Cライブラリ→ラッパ(C)→ラッパ(Go)→Goアプリ」の4段が必要。イベント処理にコールバックが必要な場合もC言語側でFIFOにイベントぶち込むコールバック登録してGoから関数経由で読み出すとかできるし。「Cライブラリ→cgo使うGoアプリ」の2段でもまあある程度動いたりするけど、当然ながら良い書き方じゃないと思う。

あ、C.CString()でC言語文字列生成したあと破棄しないラッパがいくつか出回ってるっぽいけど、C.free()しないとリークするらしいのでちゅーい

個人的なクレームとか雑談はココへ

  • あー、SkypeのID教えて下さい。後、ID報告所作ってみました。 -- sside 2006-06-16 (金) 02:20:23
  • ども。書いときました。 -- いがらし 2006-06-16 (金) 02:30:08
  • ぴーがつかいやすいですったい -- 2008-06-27 (金) 10:43:01
  • ぅちはSH−(;ω;) 先輩!!スライドがほしぃです(*>∀<艸)☆ -- Black? 2008-06-27 (金) 10:45:47
  • あ -- ? 2013-03-14 (木) 19:25:13
  • IGAAAAAAAAA -- 2014-12-16 (火) 14:04:11


トップ   編集 凍結 ページの変更点 バックアップ 添付 複製 名前変更 リロード   新規 ページ一覧 単語検索 最近更新されたページ   ヘルプ   最終更新のRSS
Last-modified: 2014-12-16 (火) 14:04:12 (1341d)