C++ ときどき ごはん、わりとてぃーぶれいく☆

Wonder Rabbit Projectのなかのひとのブログ。主にC++。

C++

UE4/C++: アクターのメンバー関数内で AActor 派生の任意のユーザー定義型のオブジェクトを列挙する方法

// TActorIterator で AActor 派生の任意のユーザー定義型のオブジェクトを列挙 // AHogePawn は列挙したい AActor 派生のユーザー定義型 // GetWorld() は AActor のメンバー関数 { auto counter = 0; for ( TActorIterator< AHogePawn > i( GetWorld() ); …

UE4/C++: メッシュのマテリアルやテクスチャーをC++コードで制御する方法

要点を整理しようと思ったらソースの例示しかない記事になりました(ノω・)テヘ // マテリアルをロードしてメッシュへ設定する // mesh: UPrimitive またはその派生型( UStaticMeshComponent, UProceduralMeshComponent など)のポインターオブジェクト // elem…

Boost-1.65 の PolyCollection, Stacktrace, Sync の概要を確認

Boost-1.65 から3つの新しいライブラリーが入るらしいので概要( Introduction )を確認したメモ。 Chapter 28. Boost.PolyCollection - develop Chapter 38. Boost.Stacktrace 1.0 - develop http://www.boost.org/doc/libs/develop/libs/sync/index.html (…

UE4/C++ Tick が来ない!そんなときのトラブルシュート備忘録

「Tick が来ない!」、たまによくあるのは私だけでしょうか。 UHogeFugaComponent の TickComponent が来ない、 AHogeFugaActor の Tick が来ない、などなど。そんな場合の備忘録です。 疑い(1): bCanEverTick が false コンストラクター等で bCanEverTick …

UE4/C++ Interface の作り方

おさらい: ふつうの C++ の “インターフェース"(=抽象型) C++er 的には virtual なメンバー関数に =0; 定義を入れた Abstruct な class ( or struct ) を作れば広義のプログラミング言語の意味での Interface になるって思うじゃん・w・ // ふつうの C++…

UE4 の UCLASS の定義の基底クラスに名前空間を使っている子が居る場合の不幸と安直な回避策について

現状の UE4 で C++ の namespace を使おうと思っても面倒事が増えるだけなので、現実問題としてはわざわざ UE4 の C++ コードを記述するに当たっては namespace を用いないほうが賢い。少なくとも UE-4.16 現在は。 しかし、そうは言っても、世の中の素敵な …

UE4 における enum class の「フラグ」化

// ↓ブループリントで使わない場合はこの1行は不要 UENUM( BlueprintType, meta=( Bitflags ) ) enum class EHoge: uint8 { EV_Nothing = 0 , EV_Flag1 = 0x01 , EV_Flag2 = 0x02 , EV_Flag3 = 0x04 , EV_Flag4 = 0x08 , EV_FlagAll = EV_Flag1 | EV_Flag2 |…

UE4/C++ FORCEINLINE にしたいけど Debug ビルドの時は inline 最適化されたくない関数を定義する方法、あるいは UE_BUILD_xxxx シリーズのマクロについて。

UE4/C++ FORCEINLINE にしたいけど Debug ビルドの時は inline 最適化されたくない関数を定義する方法 #ifndef UE_BUILD_DEBUG FORCEINLINE #endif void hogehoge() { /* fugafuga */ } と、いうわけで #ifdef でOK。 Debug ビルドで定義される UE_BUILD_DEB…

VSCode で UE4/C++: デバッグ実行に必要な launch.json の設定の仕方

概要 VSCode で UE4/C++ を開発する際にデバッグ実行に必要な launch.json の設定方法を紹介。 ↑こんな感じで VSCode しか起動していない状態から"えせ"スタンドアローン風の実行もできる。もちろん、起動中の UE4Editor へのアタッチもできる。 VSCode の設…

曰く「Project.uproject を右クリックして Generate Visual Studio project files」・・・そんなのダルい!今すぐ端末でコマンドを撃たせろ!!って思ったらどうすれば良いか・w・

問題 UE4 C++er は .cpp を追加したりリネームするたびに「Project.uproject を右クリックして Generate Visual Studio project files」しなければならない、事になっている(目につくドキュメントや AnswerHub 的なスタンダードな回答によれば)。 だるい・…

C++ 標準の promise / future / thread に対応する UE4 標準の TPromise / TFuture / FRunnableThread の使い方

C++ 標準の std::promise / std::future / std::thread C++erにとっては基礎的なおさらい。 #include <iostream> #include <future> int main() { using namespace std; promise< int > p; auto f = p.get_future(); auto t = thread( [ =, p = move(p) ] () mutable { p.set_v</future></iostream>…

UE4 のコンソールにユーザー定義のコマンドを追加する方法

テンプレプロジェクトでは @ キーででてくる便利なコンソールにユーザー定義のコマンドを追加する例: // MyActor.h // ... public: // コンソールから呼びたい UFUNCTION の宣言 UFUNCTION( BlueprintCallable ) void hoge(); // ... AMyActor::AMyActor() {…

地上を歩けて、空も飛べるキャラクター( ACharacter )の C++ な作り方

C++/TPSのテンプレプロジェクトを作ってソースを眺めると「地上を歩けるキャラクター」の作り方がわかります。そこで、追加要素として「この ACharacter を空も飛べるようにしたい」と思っても、エディターで “Can Fly” をチェックONするだけではまったく飛…

UProceduralMeshComponent などの UMeshComponent のマテリアルを実行時にC++で変更する方法

特に UProceduralMeshComponent を使う場合など UMeshComponent 系のメッシュ mesh のマテリアルを実行時に変更したい場合は以下のようにする。 mesh->SetMaterial ( 0 // Note: マテリアルをセットしたいメッシュ内のセクション番号 , Cast<UMaterial> // Note: 今回は</umaterial>…

UProceduralMeshComponent::UpdateMeshSection_LinearColor で一部の引数(頂点属性)だけ更新する方法

以下のコードの結果は同じです・w・ // code-1 ... mesh->CreateMeshSection_LinearColor ( 0 , vertices , indices , normals , texcoords0 , vertex_colors , tangents , true ); // code-2 ... mesh->CreateMeshSection_LinearColor ( 0 , vertices , in…

UE4: ProceduralMeshComponent 入門

はてなブログよ、わたしは帰ってきた・w・ と、いうわけで早速本題に入りましょ。 UE-4.14 から導入された事になっている ProcedualMeshComponent ですが、いまひとつ公式ドキュメントでも最低限のエグザンプルとブループリントの情報しかまだ整理されてい…

C++ tips: Boost で demangling

RTTIで型情報を対話的に可視化したいと思うと、C++ではデマングルしないと割と読めません。extern "C"しておくとか邪悪臭いですし。 ところがデマングリングは処理系依存に触れる事になるので、ユーザーコードで扱いたいものではありません。そこで処理系依…

Color programming tips with C++ samples: RGB24(16777216色)に対しHSL24は十分な分解能を持っているか?

今回は色の話。PCでは長らく16777216色を誇るRGB24がディスプレイはじめ色を取り扱う際の標準として利用されてきた。RGBなのかBGRなのかなどは今回の本題では無いのでスルーする。また、制限された環境におけるRGB16やRGB15であるとか65536色中同時256色であ…

GCC4.7.1: C++11 と OpenMP のちょっと惜しい関係

C++11から言語仕様のスレッディング周りが強化され、thread、atomic、mutexなどなど言語標準機能として扱える様になり、ちょっとやそっとやそれなりの用途でもintel TBBやBoost.Threadに頼らずにマルチスレッディングソフトウェアを開発し易くなりました。 …

Boost.MultiArray メモ

std::valarrayだと基本的には1次元のデータ構造に対してスライスを考えて多次元要素集合としてアクセスする事になる。Boost.MultiArrayなら基本的には多次元のデータ構造に対して必要ならば1次元のRAWなデータ構造も用いる事ができる。多くの場合は後者の方…

openSUSE-12.2 に OGLplus を導入

OpenGL3以上のCなAPIをC++らしく扱う為のライブラリーOGLplusをopenSUSE-12.2に導入する。 OGLplus - a C++ wrapper for OpenGL® version 3 and higher. zypperに対応したパッケージは無いので普通にソースを拾ってビルドしてインストールする。 OGLplus ソ…

cpp_ac_2012_4th の particle_system そのもののベンチマーク; time, gprof, oprofile

Related Entries C++ Advent Calendar 2012 / day 4th : Native-client vs. HTML5 ; C++ in the web-client-world! - C++ ときどき ごはん、わりとてぃーぶれいく☆ After care: C++ Advent Calendar 2012 / day 4th : Native-client vs. HTML5 ; C++ in the …

QtCreator-2.5.0 + QtOpenGL + GLUT ==> teapot

(いちおう)エディターたるVimから、IDEたるQtCreatorでの開発を勉強中。先ずはお約束の第一歩、teapotの備忘録。 プロジェクトをQtの雛形から作成 File --> New file or Project (CTRL+N) Projects: Applications --> Qt Gui Application 以降、仮にプロジ…

After care: C++ Advent Calendar 2012 / day 4th : Native-client vs. HTML5 ; C++ in the web-client-world!

先日のC++ Advent Calendar 2012 / day 4th : Native-client vs. HTML5 ; C++ in the web-client-world! - C++ ときどき ごはん、わりとてぃーぶれいく☆の続き、その1です。ちょっとだけリファクタリングしたり、C++とJSのインターフェース部分のやっつけ感…

C++ Advent Calendar 2012 / day 4th : Native-client vs. HTML5 ; C++ in the web-client-world!

C++ Advent Calendar 2012 / 4th day (!) この記事はC++ Advent Calendar 2012の参加記事です ヽ(=´▽`=)ノ 記事の公開と本編内容が4th dayのリミットより数時間遅れてしまいました事をお詫び申し上げます。 Native-client vs. HTML5 ; C++ in web-client-worl…

std::array::empty()

必要なシーンに今まで遭遇していなかった事もあり、std::array::empty()の存在と動作なんて考えた事も無かった。実際問題としてstd::array::empty()が存在し使えるのかは規格書開くより実装確認した方が早いのでとりあえずideoneに入れてみた。http://ideone…

C++ の #include するファイル名について規格に基づいて実際に試してみた

C++の規格§2.9 Header names によれば、#include の や "fuga" におけるhogeやfugaの文字について、 hoge には > を除いて、 fuga には " を除いて、 ' \ /* // が含まれる場合は実装依存、またhogeのパターンの場合には " が含まれる場合にも実装依存と書い…

うさぎさんはトライグラフを使った!! → わけがわからなくなった

別に使う必要に迫られた訳では無いのですが、"トライグラフ"というものを使ったあるプログラミング言語のソースコードのごく初歩的で簡単なコードのサンプルがこちらになります。 ??=include <iostream> int main()??< unsigned a??(??)=??<1,2,3??>; std::cout< https</iostream>…

Crystal Space-2.1(trunk/svnversion:39000) を openSUSE-12.2 で試すなど

Crystal Space http://www.crystalspace3d.org/ 基本機能は3D描画ライブラリー。 使うまでの準備 ダウンロード http://www.crystalspace3d.org/main/Download openSUSE-12.2のリポジトリーには無いのでSVNなどでソースを拾ってライブラリーをビルドしてイン…

Android NDKを使う前に知っておいた方が良いメモ

執筆時点のAndroid NDK(r19)について。 知って措いた方良い事 JNIのCバインディングとC++バインディングはまったく別物 APIの名前は同じ挙句にC++版でも名前空間つこうて無かったりで、ありがちなC/C++対応と言いつつ実はCっていうパターンかと思いきやC++バ…

twitcurl - C++ Twitter Library てのが使い易いのではなかろうか

「Twitterを扱うC++のライブラリー」について何を使ったら良いか、最近Bjarne鈍器本日本語版を購入してC++の勉強を始めた学生さんに紹介する事になった。OAuthなりXAuthなりでTwitterをさっくり使える様になる、という条件はライブラリーを使うのだから当然…

Boost.GILでpng書きだそうと思ったらライブラリーにdefine足りて無いよメモ

boost1.49つこうてるけど発症した > Issue 8 - gilviewer - Boost:GIL / LibPNG 1.4; ‘int_p_NULL’ was not declared in this scope code.google.com/p/gilviewer/is…— 莉煎・優曇華院・因幡(実際うさぎ)さん (@USAGI_WRP) 6月 1, 2012と、いうわけで、Is…

NaCl tips; 開発環境のPepper APIを更新した後のChromiumの.nmf のリフレッシュ、特にglibc版を扱う際の注意

開発環境のPepper APIのバージョンを差し替えてもnewlibなら.nexeが更新されるだけで.nmfは変更が無い。しかし、glibc版を使っている場合にはrunnable-ld.soがリンクする.soのリビジョンがちまちまと変わる(hoge.so.12345がhoge.so.23456になるとか)のに追従…

NaCl tips; 標準出力でのログ採りが利く様なので

先日NaClでstd::coutするとホストしたウェブブラウザーのコンソールに出力が得られる事を確認しました。JavaScriptへメッセージングしてconsole.logへ出す方法も考えて居たのですが、只でさえ負荷を掛けたくないJavaScriptに大量のデバッグログをメッセージ…

NaCl tips; <fstream>は事実上使えないみたい。ついでにstd::endlについておまけ記載

std::cout/std::cerrを使えるのはわかったけどログをファイル出力したいなと思って一応試してみた。やはりPepper APIのファイルシステムしか使えないらしくstd::cin同様にコンパイルは通るが実行時に何も処理しないっぽい。 std::ofstream o("nacl-test.log"…

NaCl tips; <embed>のパラメーターをpp::Instanceで取得

NaClインスタンスをホストしたHTMLの<embed>のパラメーター群をホストされたNaClインスタンスで得られる。設置する人がニーズに併せて設置に応じたコンフィグレーションを適用できるようにする簡単な方法としては良い選択肢の1つですね。 得られるのはNaClをホスト</embed>…

NaCl tips; 入力イベントを捉える

NaClではPepper APIでキーボードやマウスからの入力の面倒を見てくれる。(JavaScriptで受けてメッセージングで飛ばすなんてダサい事は必要ないよ!やったね!!)ポイントは2つ。 pp::Instance::RequestInputEvents/pp::Instance::RequestFilteringInputEv…

NaCl tips; NaClの標準出力、標準エラー出力はどこに繋がっている?

NaClの標準出力、標準エラー出力はどこに繋がっているのか試したら手っ取り早く把握できた。 C++ source なんという事は無くどっかにstd::coutとstd::cerrを仕込んで試しただけ。 std::cout << "std::cout" << std::endl; std::cerr << "std::cerr\n"; std::…

NaCl tips; glibc使用で.nmfから複数ファイルをロードする様な場合のプログレスイベントの発生について

先の記事の様にnewlib→glibcにして.nmfから複数ファイルをロードする様になったなら、プログレスイベントの発生がnewlibと単一ファイルだった頃では想定外の状況が発生した。 問題 newlib仕様で単一の.nexeをロードすれば良いだけの場合ならば次の様にロード…

NaCl tips; newlib → glibc

NaClのツールチェインはnewlibとglibcを使える。これまではとりあえずnewlibを使ってた。でも、boost::lexical_castを使おうかと思ったらnewlibではどうもロケール周りの実装でコンパイルエラーがぽぽぽぽーんするのでglibcを使う事に。しかしglibcを使う場…

NaCl tips; JavaScriptサイドのNaClモジュール由来のイベント群

NaClモジュールに由来してそのembed要素に発生し得るJavaScriptイベント群について全て実装してみた。備忘録として今回もテスト中のLabyrinthian - Wonder Rabbit Projectのリポジトリにtag 0.0.2を打って措いた。 JS-sideのイベントシステムをすべて実装 · …

NaCl tips; NaClモジュール <==> JavaScript メッセージング

自分自身が作りたいと思っていたゲームのアイデアを実現したり、技術的なテストをオンラインで行うプラットフォームとすべく、 "Labyrinthian - Wonder Rabbit Project" を実装し始めました。実装というかテストしてるだけな感じですけど。 source NaClモジ…

NaCl tips; includeでふんわり把握するSDK同梱のライブラリー群

NaCl pepper_19 SDKのinclude以下はこんな感じ: EGL/ envlock.h langinfo.h reent.h strings.h GLES2/ envz.h libgen.h regdef.h sys/ KHR/ errno.h limits.h regex.h tar.h _ansi.h fastmath.h locale.h rpc/ termios.h _syslist.h fcntl.h machine/ sched.…

食塩と隕石と珈琲と

今考えている事のメモ。NaCl(食塩)とMeteor(隕石)でマイゲーム基盤を作ろうかと言う事。 ゲームのアイデアではなくて基盤技術の概要に関するメモだけど。 NaCl; Natice Client Native Client — Google Developers 概要 ウェブブラウザーでELFバイナリを安全…

Native Client // C++へ帰る日。ネイティブの空を遠いウェブの地からも仰ぎ見よう!

一般論としてよく、女子はキラキラしたものが好きだと言われる。たぶん同様に私の場合はマシンネイティブな対象が好きなんだと思う。HTMLとかJavaScriptとか、心の故郷から遠すぎる旅路が長くなると帰りたくなる、C++へ。例えまだ帰り付く街が03だったとして…

haskell の標準エラー出力、C++的に言うところの std::cerr 的なそれのメモ

Haskell で標準エラー出力 import System.IO main :: IO () main = case f of Right a -> putStr a Left a -> hPrint stderr a f :: Either String String f = ... ※EitherのLeftもRightもStringなのは、この例ではそれぞれ標準エラー出力と標準出力へと出力…

Dart vs. JavaScript vs. Haskell vs. C++ // n-body benchmarking!!

Dart と JavaScript と Haskell と C++ で n-body (多体問題)のベンチマークしたよー。時間測定は全て time ちゃんです。<※コメントにて runhaskell とコンパイル済みの .o 存在下の挙動について教えて頂き、 runhaskell について測りなおしました!> 結果…

Intel® Parallel Studio XE 2011とハードチーズと謎の高級中国茶と

インテルが「インテル® ソフトウェア開発製品を使って、アプリケーションを並列化、高速化しましょう!キャンペーン」とか言う事で2012年3月30日までキャッキャウフフなノベルティが貰えるよとかやっていた(・∀・) XLsoft エクセルソフト : インテル …

FLTKを実用するなら2.0がいいのかなぁ

FLTKはGUIツールキット。QtとかGtk+の影に隠れている感じがしますが、シンプルで扱い易く、ストラウストラップのプログラミング入門でもGUIの基本的なトコを教えるのに用いられています。 Fast Light Toolkit (FLTK) FLTK公式のロードマップを見ると、 1.1 …

community/wt 3.2.0-2 a C++ library ...

Wt という C++ のウェブフレームワークをご存知だろうか? Wt, C++ Web Toolkit 存在を知ったきっかけはBoostを使用しているプロジェクト - boostjp。ここのオープンソースライブラリに名前が上がっている。存在を知ってからというもの、度々興味を持ちなが…