マネージコードでのbool(=System.Boolean)型の中身は
4バイトの整数(false=0, true=o以外)で、
慨定のマーシャリングの動作では4バイト整数としてアンマネージコードに渡される。
が、
OpenGLでのGLBoolean型は、調べてみると、
「1バイト符号無し整数」。
つまり、マーシャリング時に型の不一致が起こってバグる。
解決方法は、
(1)
[MarshalAs( UnmanagedType.U1 )] という属性を付加して、
boolが1バイト符号付き整数(true=1, false=0)に変換されるように指定する。
(2)
bool型の代わりにbyte型を使い、
true = 1, false = 0へ置き換える。
・・・のはずなんだけど、
(1)の方法で、bool[]型に、
[MarshalAs( UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1 )]
という属性をつけてやってみたら、
どうもうまくいかない。
ArraySubType = UnmanagedType.U1でもダメだった。
1バイト整数に変換されず、4バイトのままアンマネージコードに渡されてるっぽい。
(2)の方法でbool[]の代わりにbyte[]を使うとうまくいく。
なんか属性の指定方法が間違ってるのだろうか?
2008/12/12
2008/12/10
どう使うかが、難しい。
一応、バッファオブジェクトのクラス化はできた。
まぁ、ここまではそれほど難しくもない。
問題は、これをどう使うか。
前々から、GLSharpのMeshクラスを
もっとマシなものに作り直したいな、とは思っていて、
頂点配列(glVertexPointerとか)やバッファオブジェクトを使って
うまいことやってみたいな、とは考えているのだけれど、
さて、どうしたものか・・・。
まぁ、ここまではそれほど難しくもない。
問題は、これをどう使うか。
前々から、GLSharpのMeshクラスを
もっとマシなものに作り直したいな、とは思っていて、
頂点配列(glVertexPointerとか)やバッファオブジェクトを使って
うまいことやってみたいな、とは考えているのだけれど、
さて、どうしたものか・・・。
2008/12/03
バッファオブジェクト
何となく気が向いたので、
バッファオブジェクトに手をつけてみることにした。
で、GLSharpへの実装も視野に入れて
赤本片手に、バッファオブジェクトを扱うクラスを試作中。
・・・といっても、まだバッファオブジェクトの扱い方すら
よくわかってないけど。
んん、OpenTKの
glBufferData、glSubBufferData関数のインポートが・・・
GL.BufferData( BufferTarget target, IntPtr size, IntPtr data, BufferUsageHint usage );
GL.BufferData( BufferTarget target, IntPtr size, object data, BufferUsageHint usage );
GL.BufferSubData( BufferTarget target, IntPtr offset, IntPtr size, IntPtr data );
GL.BufferSubData( BufferTarget target, IntPtr offset, IntPtr size, object data );
IntPtr型でサイズやオフセットを指定しろと?
いや、それはちと違うんでない?
バッファオブジェクトに手をつけてみることにした。
で、GLSharpへの実装も視野に入れて
赤本片手に、バッファオブジェクトを扱うクラスを試作中。
・・・といっても、まだバッファオブジェクトの扱い方すら
よくわかってないけど。
んん、OpenTKの
glBufferData、glSubBufferData関数のインポートが・・・
GL.BufferData( BufferTarget target, IntPtr size, IntPtr data, BufferUsageHint usage );
GL.BufferData( BufferTarget target, IntPtr size, object data, BufferUsageHint usage );
GL.BufferSubData( BufferTarget target, IntPtr offset, IntPtr size, IntPtr data );
GL.BufferSubData( BufferTarget target, IntPtr offset, IntPtr size, object data );
IntPtr型でサイズやオフセットを指定しろと?
いや、それはちと違うんでない?
登録:
投稿 (Atom)