mrbgemsをC言語で拡張してみる
mrubyの拡張をC言語で行う方法を調べてみた
- 0222_03.pdf
- mrbgemsをCとmrubyで作ってみた話 - Qiita
- 次は上記2つをやってみるかなぁ
- mrbgemsをCとmrubyで作ってみた話 - Qiita
- これを参考にすると・・・
- mrubyに例として入ってるc_extensionの使い方
- build_config.rb の
conf.gem 'examples/mrbgems/c_extension_example' do |g| g.cc.flags << '-g' # append cflags in this gem end
- の部分、をみてみると
CExtension
classにc_method
メソッドが登録されている - これを使いたい場合は、minirakeでbuildして
$ mruby/bin/mirb > CExtension => CExtension > CExtension.c_method A C Extension => CExtension >
となる
ちなみに公式っぽいpdfのgreetingは下記のように使う www.digitalfukuoka.jp/mruby-network/uploaded/16/0222_03.pdf
> Hello.new("yohei").greeting(10) => "hellohello, yohei"
mrbgemsを作ってみる方法
下記が一番分かりやすかった 5分でつくる mrbgems
- 作成するmrbgemsのディレクトリを作る, work/yournamegems とかなんでもよい
- workディレクトリにmruby持ってくる、中身のbuild_config.rbをいじるのでリンクじゃなくてgit cloneしたやつのほうが最初はいいかな
- mrubyもってきたら、mruby/build_config.rb に自分のmrbgemsの名前を記載する、例えば下記な感じ
MRuby::Build.new do |conf| ... conf.gem '../yournamegems' ... end
あとはyournamegems内にRubyスクリプトを設置するなどすればよい
例えば下記
work/yournamegems/yourname.rb
class Yourname def initialize name @name = name end def yourname puts @name end end
ふむ
# Use mrbgems # conf.gem 'examples/mrbgems/ruby_extension_example' # conf.gem 'examples/mrbgems/c_extension_example' do |g| # g.cc.flags << '-g' # append cflags in this gem # end # conf.gem 'examples/mrbgems/c_and_ruby_extension_example' # conf.gem :github => 'masuidrive/mrbgems-example', :checksum_hash => '76518e8aecd131d047378448ac8055fa29d974a9' # conf.gem :git => 'git@github.com:masuidrive/mrbgems-example.git', :branch => 'master', :options => '-v'
みたいなのあるからこのディレクトリの中身みてみてためしてみるのがいいのかなぁ
- たとえば
# conf.gem 'examples/mrbgems/ruby_extension_example'
のところ - 中身のrbスクリプトが下記
class RubyExtension def RubyExtension.ruby_method puts "A Ruby Extension" end end
> RubyExtension.ruby_method A Ruby Extension => nil
というわけで下記のようにdefを追加して
class RubyExtension def RubyExtension.ruby_method puts "A Ruby Extension" end def extraYK puts "extra define from yk" end end
下記のようにmirbで実行することもできる(追加したらコンパイルが必要、たぶん)
> y = RubyExtension.new => #<RubyExtension:0x10c4254b0> > y.extraYK extra define from yk => nil >
C言語学習20190405
printfするときの%dとか%cって何?
- フォーマット指定子
- フォーマット指定子一覧
- %c: char
- %s: char*, 文字列
- %d: int, short
- %u: unsigned int, unsigned short, 符号なし整数10真数
- %o: 整数8進数
- %x: 整数16進数
- %f: float
- %e: float. 指数表示
など
int mainの中身のreturn 0 って必要なの?
- 無くても動くけどあったほうがいいみたい
- C言語のreturn 0の有用性が今更わかった話 - Qiita
- 関数内でreturnを省略することで発生しうる未定義バグ - Qiita
ポインタ
- ポインタ
- 変数のアドレスを記憶する変数
- ポインタについて理解するにはアドレスとは何かを理解する必要がある
- アドレスはメモリ上のある番地(たとえば1000番地)に変数としての領域を確保し、その領域に格納するというような説明になる
// aという変数に123を格納する、123は実際には例えば1000番地に格納される int a = 123; // このとき、アドレスは & をつけるとアクセス可能となる // 例えば下記は、 上記の例だと1000番地を実際は意味する // アドレスは %p を使えば 16進数8桁の表示でprintfデバッグ可能 printf("%p", &a); // なので、標準入力する際の scan("%d", &a); // というのは、変数aのアドレスが示すメモリエリアに入力データを(この場合intなので?)整数変換して格納する、という意味になる
Unityで神になる本3章 Skybox Material
Unityで神になる本を読んでる
3章, Skybox Materialを自作する、のところ
パノラマ画像をprojectに入れてみて
Texture Typeを選ぼうとしたけどCubemapが無い
これは下記
[Cubemap - Unity マニュアル](https://docs.unity3d.com/jp/current/Manual/class-Cubemap.html)
Texture TypeをDefaultにして
Texture ShapeをCubeにすればよいみたい