しらいとブログ

ネットで検索してもなかなか出てこないIT情報を独自にまとめています

プログラミング

【C++11/14】値か関数を受け取り評価する関数

事の始まりはC++で遅延評価の必要性に駆られたことでした。 // 時間のかかる処理 int n = sum(list); // testの中でnが使われなければ処理が無駄になる test(n); そこで値の代わりに関数を渡し、必要になったときに評価してもらう方法を取りました。 auto f …

マウス連打ソフト「BurstClicker」「BehindClicker」

Windows10でマウス連打ソフトの不具合が多いという噂を聞いたので自分で作ってみました。

「WinMouse+」開発記録 Part1

以前からマウスの操作に違和感を感じていたので、Windowsのマウスカーソル移動処理をフックして独自の移動処理に置き換えるソフトを開発することにしました。 先に言っておくと、マウス処理のフックは非常に簡単です。「マウス フック」で検索すればやり方も…

【配布】FontRenderingTester 1.00【C# FreeType】

FreeTypeを使ったフォントレンダリングのテストツールを作りました。 C#からFreeTypeを使える自作のライブラリも付属しています。(ただし使い方の解説まではしません。) ダウンロードFontRenderingTester_1.00.zip

GDI vs DirectWrite vs FreeType

GDIとDirectWriteとFreeTypeのラスタライズの速度を比較してみました。(ラスタライズとはフォントを画像化する処理のことです。画面に表示する前の段階です。)

「WinFont+」開発記録 Part 9

alpha07の公開 WinFont+_alpha07.zip alpha06からの変更点 フックの安全性を高めた GDIフックの改良アンチエイリアス有りの4倍よりアンチエイリアス無しのモノクロ8倍の方が速くて綺麗だったのでそちらにしました拡大縮小に伴う位置ずれを修正しました GDIは…

「WinFont+」開発記録 Part 8

GDIのフックが半分くらい完成しました。MacTypeが効く部分はほぼ全てフックできてると思います。まだ縦書きや文字の回転に対応していないのですが、それらに対応するには設計を変える必要が出てきたため、今の段階で一度公開しておきます。 WinFont+_alpha06…

「WinFont+」開発記録 Part 7

WinFont+が実用的な段階まで出来てきたので一度公開しようと思います。今回のバージョンはGDIはフックしていませんが、DirectWriteの大部分をフックしています。 ※たぶんWindows 8.1以降じゃないと動きません(未確認) WinFont+_alpha05.zip

「WinFont+」開発記録 Part 6

今回は実験結果を記録として残すのが目的なのでソフトの公開はありません。

「WinFont+」開発記録 Part 5

今回のWinFont+はGDIはフックしていません。DirectWriteをフックしてラスタライズ処理をFreeTypeに置き換えています。

「WinFont+」開発記録 Part 4

今回はFreeTypeを使ってみました。 GDI++(FreeType版)やMacTypeのコードを読むと難しそうな印象でしたが、FreeType公式の最新のドキュメントを見ながらやってみたら思ってたより簡単でした。ラスタライズは全部FreeTypeでやっていますが、フォントの読み込み…

「WinFont+」開発記録 Part 3

今回はWinFont+_alpha2の不都合をまとめてみました。

「WinFont+」開発記録 Part 2

前回のalpha1ではDirect2Dを使っていましたが、今回はDirect2Dを使わずに自分でGDIに描画するようにしました。DirectWriteにはラスタライズ機能とレンダリング機能があるのですが、ラスタライズ機能のみを使用することになります。 実はChromeと同じ手法だっ…

「WinFont+」開発記録 Part 1

Windowsのフォント描画を置き換えるソフトにはgdi++.dll、gdipp、ezgdi、MacTypeがあります。きちんと調べたわけではありませんが、最初に作られたのがgdi++.dll(本家)、gdi++.dll(本家)から派生したのがgdi++.dll(FreeType版)、gdi++(FreeType版)から派生し…

Float,Double型をバイナリに変換して精度を確認

小数 バイナリ Float → ← Double → ← ※バイナリから小数への変換は最後に0が続く場合は省略されます。※古いブラウザでは動かないことがあります。 //

Rust言語でDxLibを使う

DxLibはWindows用のゲームなんかを作れるライブラリです。DxLibはC++のライブラリですが、C#用のDLLバージョンも公開されており、C#以外でもFFI(Foreign function interface)が使える言語なら使えます。RustもFFIが使える言語なのでDLL版DxLibを使うことが出…

WindowsでRustプログラミング(環境構築)

WindowsでRustプログラミングをやるならEclipse + RustDTがオススメです。Eclipseは統合開発環境(IDE)の名前です。RustDTはEclipseのプラグインで、Rust Development Toolingの略です。この2つを使えば、関数名の自動補完や、ブレークポイントを使ったデバ…

「exit code -1073741515」=DLLが見つからない

Windowsプログラミングにおいて、開発環境では問題なく動くプログラムが本番環境で動かない時によくあるのが「exit code -1073741515」です。あるいは16進数の「exit code FFFFFFFFC0000135」だったり、16進数で16bitの「exit code C0000135」だったりします…

(2015年)最新のMinGW(GCC)のダウンロード

MinGWの公式サイト(のsourceforge)で配布されているGCCは、2013年に公開された4.8.1で更新が止まっています。 最新バージョンはMinGW-w64(のsourceforge)からダウンロードできます。(64bit版だけでなく、32bit版も配布しています。) 例えば4.8.5が欲し…

WindowsでRacerのビルド(コンパイル)

2015/07/13 18:25通常のビルドだと別途DLLが必要になることが発覚したためやり方を変えました。 RacerはRust言語の自動補完ツールです。(RACER = Rust Auto-Complete-er) 今のところRust言語の自動補完ツールはこのRacerしか無いようなので、エディタやIDE…

SyntaxHighlighterの高速化

技術系のブログなどでコードの色分けにSyntaxHighlighterを使っている人は多いと思います。しかしながらSyntaxHighlighterには問題があります。SyntaxHighlighterはページ内に出てくる画像など全ての読み込みが終わるまで色分けしないのです。これでは読める…

Atom EditorでDirectWriteを無効にする

2015年6月26日に1.0.0が公開されたAtom Editorですが、WindowsではDirectWriteがデフォルトで有効になっており、MacTypeなどのgdi++系ソフトとの相性が良くありません。 一応DirectWriteを無効にする方法があるのでここに書いておきます。 Atom Editorは終了…

shBrushRust.jsの配布

ブログにRust言語の記事を書こうとしたところ、SyntaxHighlighterがRust言語に対応していないことに気付きました。このままではRust言語のコードの色分けが出来ません。 しょうがないのでSyntaxHighlighterをRust言語に対応させるためのshBrushRust.jsを自分…

垂直同期とダブル/トリプルバッファリング

垂直同期とダブルバッファリングとトリプルバッファリングの解説スライドを作りました。 この3つはゲームプログラミングには欠かせない知識なのですが、何故か検索してもゲーマー向けの情報ばかりなので、プログラマ向けの情報として書きました。と言っても…

Visual Studio 2013 Language Pack でエラーが出た時の対処

Visual Studio Community 2013 をインストールした後の Visual Studio 2013 Language Pack のインストールでエラーが出るという報告が相次いで出ています。筆者の環境でも vs_langpack.exe の実行中にエラーが出て、インストーラが勝手に強制終了しました。 …

C++11のmemory_orderの使い分け (4)

前回まででアトミック変数とフェンスの memory_order の基本的な使い方を全て解説しました。今回はメモリバリアを減らして高速化する手法について解説します。ただし、consume を使った高速化に関しては扱いません。また、今回の内容はあくまでメモリバリア…

プログラミングテクニック「大で小を兼ねる」

大は小を兼ねるという“ことわざ”がありますが、プログラミングの世界でも大で小を兼ねるテクニックはよく使われます。 今回はゲームのアイテムを例に、大で小を兼ねる設計を解説します。(初心者でも読めるようにC言語で解説しました。)その後で業務用アプ…

C++11のmemory_orderの使い分け (3)

2014/10/29 20:40 誤解を招きそうな部分があったので修正しました。修正場所は脚注から辿れます。 前回はアトミック変数に memory_order を指定した場合について解説しました。今回はフェンスで指定した場合について解説します。

C++11のmemory_orderの使い分け (2)

2014/10/23 12:20 一部用語を修正しました。*1*2 前回はメモリバリアで保証できる範囲について説明しました。今回はメモリバリアの使い方を説明します。 *1:read-modify-write アルゴリズム → read-modify-write 命令 *2:読み込み → 読み取り

C++11のmemory_orderの使い分け (1)

C++11で高速な同期手法としてアトミック変数やメモリフェンス(普通はメモリバリアと呼ぶ)が追加されました。 これらの命令では memory_order を指定できるのですが、違いが分かりづらいのでまとめてみました。 なお、正確な名前はmemory_order_relaxed、me…