タグ

Cに関するedo_m18のブックマーク (31)

  • UNITYでDepthをリニアでEXR形式で出力 - C++幼女先輩

    概要 Depthマップ欲しい事は多いと思います Depthの取得自体は簡単ですが、Depthの計算上 Z値とリニアで変化しないため感覚的にわかりにくいので リニアにしたい DepthをPNGファイルにすると 256段階に丸められてしまうため、浮動小数点形式で保存したいので EXR形式で保存したい Depthの取得は、別パスにて画面全体から取得する。UNITYではポストプロセスで行うのが楽 UNITYちゃん 今回は題材にUNITY Chanを使う 何を使ってもいいし、UNITYの3DMeshでもいい ポストプロセス デプスは画面全体を取得する必要があるので、ポストプロセスで取得する ポストプロセスを使うには カメラに OnRenderImage関数の入ったスクリプトをつける using System.IO; using UnityEngine; using UnityEngine.Rende

    UNITYでDepthをリニアでEXR形式で出力 - C++幼女先輩
  • ゼロから学ぶ C++

    ホーム 1. C++ を始める 2. 基構文 3. コンテナ 4. ファイル分割とスコープ 5. ストリーム操作 6. メモリの管理 7. クラス 8. キャスト 9. テンプレート 10. エラー処理 11. ビルドとライブラリ 12. メモリレイアウト 単体テスト デバッグ ビルド自動化 付録 このサイトは C++ について説明した学習サイトです。 書を通じて C++ の開発環境や構文・単体テストの書き方などが 一通り学べるようになっています。 対象¶ C++ を初めて学ぶ人 プログラム言語を 1 つ以上経験したことのある人 関数やクラス・オブジェクト指向に対する知識をある程度前提にします。 C++ の特徴¶ C++ は ビャーネ・ストロヴストルップ により開発されたプログラミング言語です。 C++ には主に次のような特徴があります。 高パフォーマンス メモリ使用量が少ない 柔軟性

  • ZString - Unity/.NET CoreにおけるゼロアロケーションのC#文字列生成

    Cy#の河合です。今回、文字列生成におけるメモリアロケーションをゼロにする「ZString」というライブラリを公開しました。そこで、この記事ではZStringの紹介の他に、あらためてC#の文字列についてを深く分解して解説し、Stringの複雑さと落とし穴、そしてZStringの必要性について解説します。 [GitHub – Cysharp/ZString] 以下の表は `”x:” + x + ” y:” + y + ” z:” + z` という単純な文字列連結においてのパフォーマンス計測です。 それぞれ “x:” + x + ” y:” + y + ” z:” + z ZString.Concat(“x:”, x, ” y:”, y, ” z:”, z) string.Format(“x:{0} y:{1} z:{2}”, x, y, z) ZString.Format(“x:{0} y:

    ZString - Unity/.NET CoreにおけるゼロアロケーションのC#文字列生成
  • Inigo Quilez

    Intro When doing procedural graphics it's always a good idea to add color variation to the elements of the image. From grass blades, to grass clumps, to rocks or trees or hills, all scales of detail benefit from some color variation. In order to achieve this, one can employ different methods of course, but among the cheapest and the most coder-friendly ones there are those based on simple (hard)co

    Inigo Quilez
  • CoreFoundation入門 メモリ管理

  • 【C言語】引数なしの関数には void を書いた方がよいという話 - 0x19f (Shinya Kato) の日報

    C言語で引数なしの関数を書くときに void を書かないのと書くのとで挙動が違うなんて話を聞いたことはないでしょうか? つまり void func() {} と void func(void) {} で挙動が違うという話ですね。 自分も話だけ聞いたことがあったものの2つがどう違うのかはわかっていなかったため、C言語の規格を読みながら何が違うのかを調べてみました。 結果だけ述べると、この2つの書き方は同じように見えて実は明確な違いがあり、引数がない関数を定義/宣言する場合には後者を使うのが適切です。 とは言え、2つの書き方で違いがあるとかほんとかよ?と思う方もいると思うので、まずはこの二つがどう違うのか見ていきましょう。 2つの関数の書き方の違い 早速ですが、以下のプログラムを見てみましょう。 // func_empty.c void func() {} int main(void) { f

    【C言語】引数なしの関数には void を書いた方がよいという話 - 0x19f (Shinya Kato) の日報
  • Unity 特有のパフォーマンス劣化の落とし穴 2018年歳末まとめ - part 2 - @hadashiA

    今年遭遇した、気づかないうちに嵌ってしまったUnityのパフォーマンス上の落とし穴を振り返っています。 part 2 です。 part 1 はこちら 今回は主に、Unity 独自の c# 実行環境である IL2CPP と、 Unityエンジン部分の c# の API についての経験談を書いてみました。 4. IL2CPPの吐くコードサイズの爆発 IL2CPPとはなんぞや IL2CPP コードサイズ肥大化によって起こる問題 ビルドが通らない .NET 3.5 → .NET 4.6 でさらにコードサイズが爆発 メモリ使用量と実行速度 対策1. ジェネリック型の 型パラメータには int か enum を使う UniRx.Unit.Default Dictionary<TKey, TValue> 対策2. seald 修飾子 5. 無害に見える UnityAPIが実はアロケートを発生させてる件

    Unity 特有のパフォーマンス劣化の落とし穴 2018年歳末まとめ - part 2 - @hadashiA
  • Sharplab のMemoryGraph を使ってメモリの状態を確認する - tech.guitarrapc.cóm

    以前 TryRoslyn と言われてたサービスですが、今は Sharplab という名になっています。 このサービスを使うと、コードがILやネイティブコードにどのようにコンパイルされるか確認したり、実行したりオブジェクトのメモリ状態を確認できます。 例えば次の図は、構造体の文字列がどのようなメモリ状態なのかを示したものです。 Sharplab を使って、コードだけでなくメモリ状態を可視化することで理解を深めるきっかけにできるか見てみましょう。 目次 目次 TL;DR; Sharplabの基 いつ使うのか コードの共有 言語選択 表示の切り替え(Decompile) 言語ごとのデコンパイル結果の比較 Other Run C# のメモリ状態を確認する Boxing を可視化する 構造体における文字列の参照状態を確認する クラスにおける参照状態を確認する TL;DR; Shaplab を使って

    Sharplab のMemoryGraph を使ってメモリの状態を確認する - tech.guitarrapc.cóm
  • 【保存版】構造体のマーシャリングのまとめ - 鷲ノ巣

    P/Invoke で Windows API を呼び出す際、引数に構造体を渡すには、割と色々な方法があります。 最近ちょっと混乱したので、改めてまとめてみました。 これまで知らなかった便利な方法も紹介しています。 新機能でも何でもありませんが、よく P/Invoke を使われる方にはご一読頂いて損はない内容だと思います。 ちなみに、記事では、C# で言う struct と class を総称して「構造体」と呼ぶこととします。 struct と class の区別が必要な場合は「struct」と「class」または「値型」と「参照型」と呼び分けます。 文中では「struct ≠ 構造体」ということにご留意ください。 なお、記事の内容は、Windows API の呼び出しに限定した内容になっています。 COM の場合はまた事情が違うのですが、そちらは割愛させて頂きます。 struct と

    【保存版】構造体のマーシャリングのまとめ - 鷲ノ巣
    edo_m18
    edo_m18 2019/01/01
    "blit というのは「転送する」という意味だそうです。... blit は "block transfer" の略らしいです*9が、Blittable 型の場合には「転送」する必要がありません。"
  • 低レイヤを知りたい人のための Cコンパイラ作成入門

    はじめに このオンラインブックは執筆中です。完成版ではありません。フィードバックフォーム このには一冊のに盛り込むにはやや欲張りな内容を詰め込みました。書では、C言語で書かれたソースコードをアセンブリ言語に変換するプログラム、つまりCコンパイラを作成します。コンパイラそのものもCを使って開発します。当面の目標はセルフホスト、すなわち自作コンパイラでそれ自身のソースコードをコンパイルできるようにすることです。 このでは、コンパイラの説明の難易度が急に上がりすぎないように、様々なトピックを書全体を通じて次第に掘り下げていくという形で説明することにしました。その理由は次のとおりです。 コンパイラは、構文解析、中間パス、コード生成といった複数のステージに概念的に分割することができます。よくある教科書的アプローチでは、それぞれのトピックについて章を立てて解説を行うことになりますが、そのよう

  • CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する

    Talked at CEDEC 2018, 2018/08/22 - https://2018.cedec.cesa.or.jp/session/detail/s5b559852a6405

    CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
  • ウマイハナシ

    COLLADAは最近出てきた3Dフォーマットの一つで、有名メーカが協賛している点は 数あるフォーマットの中でも変り種なのですが、野村XXの愛するLightWaveは蚊帳の外です。 というかNewtekの掲示板の書き込みを見ると、なんかどーでもいいよそんなのって雰囲気が漂ってました。 それはともかく、無いものは作ってしまえというわけでPluginを作り始めました。 あまりにもニッチな気がするので、国内に見切りをつけて(?)海外の皆さん向けにこっちのページで公開します。 興味をもたれた方は覗いてやってください。 技術的にどーというもんでもないので、黙々とコードを書き連ねるのみです。 ちょっと困ったバグがあるので修正記事をお待ち下さい(04/12/27) 今回はOBBTreeによる衝突判定をXファイルで使ってみることにします。 といっても、もはや前回でコアの部分は出来てしまっているので、さくっと

  • DLLインジェクションを学ぶためのオンラインパッチの実験 - Qiita

    課題 add.dllは重大なバグを持っています.当なら2つの整数値の和を返す関数が、実は引き算を計算しています.これを使うmymain.exeは間違った計算結果を延々と表示し続けるプログラムです.私はこのバグを修正したいのですが,mymain.exeはミッションクリティカルなプロセスであるために,安易に再起動できません.果たしてmymain.exeの動作を停止させないで,こっそりとDLLのバグを修正することはできるのでしょうか? このように,プログラムの動作を停止させることなくメモリの内容を直接書き換えてバグを修正することをオンラインパッチと呼びます.パソコン環境では見たことはありませんが,通信系ソフトウェアのようなミッションクリティカルな現場では,このような修正をこっそり行うことはよくありました.全く実用性はありませんが,DLLインジェクションの技術習得のために,オンラインパッチをWi

    DLLインジェクションを学ぶためのオンラインパッチの実験 - Qiita
  • 2009-03-19

    mono において Guid.NewGuid() で Guid がどうやって生成されているのかが気になったので、せっかくソースコードが公開されていることであるし、読んでみた。 また、NewGuid の実装には後述の通り RngCryptoServiceProvider が使われているので、結果として mono における乱数生成機(RNG)の造りも調べることになったという次第。 なお、全部丁寧に解説しようとするとモチベーションが折れるので、気分に応じてのおおざっぱな解説である。 前知識 Guid とは: GUID - Wikipedia UUID とは: UUID - Wikipedia Wikipedia を読めば分かるが、UUIDGuid は、 管理するサーバーなどなしに、一つのマシンの中だけで簡潔に生成できる (現実的な条件下では、ほぼ間違いなく)全世界において一意 という性質が

    2009-03-19
  • 【C++】なぜヘッダと実装はわけるべきなのでしょうか(.hに実装を書くことは邪道か)

    私はC++歴3年の学生趣味プログラマーです。 「C++はなぜヘッダと実装を分けなくてはならないのか/そもそも当に分けなければならないのか」という質問です。 C++といえば、ヘッダー部と実装部を.hファイルと.cppファイルに分けることが一般的とされている言語ですが、 これは同じオブジェクト指向言語のC#やJavaにはない特徴です。 そのせいでC++使いたちは今日もcppファイルとhファイルを行ったり来たりしながらコーディングする羽目になっています。(そしてVS使いはF12とCtrl+-を得意気に連打しています。) 私にとってもそれが当たり前になって久しいですが、 時々C++を学び始めたばかりの後輩から「なぜヘッダファイルに実装を書いてはならないのか」「なぜC++は二度も同じコードを書くことを強いるのか」と質問を受けます。 私はそのたびに「実装の隠蔽化」とか「循環参照の危険が云々」とか「そ

    【C++】なぜヘッダと実装はわけるべきなのでしょうか(.hに実装を書くことは邪道か)
  • extern "C" - debian36の日記

    前回は、C++ソースで定義された関数を Cソース内でコールする場合に起こる問題について書きました。 そのキーワードが、「マングリング」でした。 前回:http://d.hatena.ne.jp/debian36/20080226 では、その問題を回避する方法、すなわちマングリングを避ける方法について、今日は記します。 ずばり、その答えが、extern "C"  です。 この修飾子を見たことがあるかたも多いのではないでしょうか。 自分も、人のコードを見ていていると、たまに extern "C"{ .... .... } なんてコードが登場して、「ん〜、これは、C言語として解釈しろ」ってことなのかなぁってなんとなく思っていた程度でした。 確かに、extern "C" は、C言語として解釈して下さいよって、コンパイラ(g++)にお願いするものなのですが、なんのために、そのようなお願いをするのかと

    extern "C" - debian36の日記
  • .soや.dylibや.aファイル、共有ライブラリなどについて調べてみた - kanonji’s diary

    MacPortsでswftools@0.9.2を入れようとしたら失敗した - kanonjiの日記、MacPortsで入れる代わりに自前でビルドしたライブラリを使ってswftoolsをビルドしてみた - kanonjiの日記で、ビルドする時のライブラリについての知識が足りず困ったので、ちょっと調べてみました。基的にLinuxについて調べてて、Macについても分かったところがあるって感じです。 ちゃんとまとめるほど理解出来てるわけじゃないので、分かった事を並べる感じで書きます。勘違いしてたり、ちょっと用語がおかしかったりするかもしれません。 LinuxMacでは仕組みが違う LinuxではELF(Executable and Linking Format)という実行ファイルフォーマットがあって、この辺を調べていくとよくELFという単語を見かけます。 Macはというと、Mach-Oという実

    .soや.dylibや.aファイル、共有ライブラリなどについて調べてみた - kanonji’s diary
  • 少し詳しい型変換の説明

    型変換については、第4章で簡単に説明しましたが、複雑な規則があり、迷うことの多い部分です。ですから、ここで少し詳しく算術型の型変換について説明してみようと思います。 なお、説明中で用いたコードの実行結果は「Borland C++ Compiler 5.5」(int:4バイト short:2バイト char:1バイト)で確認をしています。 1.汎整数拡張 文字型や整数型などの汎整数型の場合、型が、int より小さな場合(char, signed char, unsigned char, short, unsigned short)は、演算の最初に int か、表現できなければunsigned int に変換されます。このとき、符号を含めてその値を変えることはありません。 (例)short a = 30000, b = 30000; printf("sizeof(a) = %d\n", siz

  • x86入門(3) 関数の呼び出し規約 (mitsunari@cybozu labs)

    Cからasm,逆にasmからCを呼び出すために必要な手続きを呼び出し規約といいます.たとえば前回puts()を使う際に,文字列のポインタをpushしましたが,そういう手続きのことです. x86での規約は大きく分けて3種類あり,細かい部分についてはコンパイラ依存であることも多く,注意が必要です.しかし,ほぼすべてのコンパイラで共通である規約は簡単で覚えやすく,しかも移植性が高くなります.計算処理などOSに依存しにくい部分ではその規約のみに従って記述すれば,Windows/Linux/Macで同一のソースとすることができメンテナンスもしやすくなります. まずは基の規約(cdecl)をしっかりと使いこなし,必要になってから他のその他の規約を学べばよいでしょう.詳細は呼出規約(Wikipedia)などを参考にしてください.拙文でも多少触れています. 汎用性の高い規約 Cとasmとの間で呼び出しあ

  • データ型のアラインメントとは何か,なぜ必要なのか?

    以前このサイトとブログに,何度かアラインメントに関する記事を書きました (サイト内関連ページ参照). そのせいか「アラインメント」で検索して来てくれる人が多いので, 過去の記事に加筆修正してこのページを新たに作成しました. 加筆した点は次のとおりです. アラインメントとメモリアクセス回数の関係をわかりやすくするため, (ほんの少し) 図を導入しました. 「データがアラインされていないとメモリアクセス回数が増える」 と言葉で説明しているサイトは多いのですが, 図で示しているところはまだ見たことありません. アラインされていないアドレスにデータを書き込む場合, 読み出しの場合以上にメモリアクセス回数がかかる可能性があることを追記しました. 以前は「複合データ型 (配列,構造体,共用体) のアラインメント」はほとんど自明のことだと思っていたので軽く流していましたが, 意外なことにこれを解説してい

    edo_m18
    edo_m18 2015/04/10
    丁寧で分かりやすい。色々クリアになった。