プログラミング・ランダムメモ
Most Popular
C++ PNG エンコーダー & デコーダー
最小主義者のための、OpenGLプログラミングテンプレート for Windows, Mac OSX, and Linux
わずか30行のコードでPrintf可能なコンソールウィンドウをMFCアプリケーションに追加する方法
Unicode文字列からビットマップ作成例題プログラム for Windows, MacOSX, Linux (あと、UTF8 <-> WChar変換)
Mac OSX用ジョイスティックリーダーとジョイスティック調整プログラム
Mac OS X用64-bitバイナリをコンパイルしようとしたときに出る変なリンカエラーと解決策
Pulse Audio APIを使ってUbuntu 11.1上でWAVファイルを再生するC++例題プログラム

2014/07/11

64-bit Ubuntu上で32-bit用のOpenGLプログラムをクロスコンパイル

これまで、Linux用バイナリを作るとき、32-bit用バイナリは32-bit Ubuntuで、64-bit用バイナリは、64-bit Ubuntuで、VirtualBox上で起動してコンパイルしていた。これだと、何が面倒かというと、同じLinux用のバイナリを作るのに、32-bit版、64-bit版でスクリプト一発でまとめて一気にできないのが面倒だった。同じOSなんだから、コマンド一発、ワンタッチで32-bitバイナリ、64-bitバイナリができて、アップロードするパッケージになってほしい。

gccのオプションで、-m32, -m64というオプションをつければ、強制的に32-bit, 64-bitを分けることができる、ということになっているが、64-bit Ubuntu上で-m32でコンパイルすると、コンパイル時にpredef.hが見つからないというエラーが出て、コンパイルできなかった。が、今日思い立って、そのpredef.hが見つからないというエラーはなんぞや、と、思って調べたところ、どうやら、multilibなるパッケージをインストールするとエラーが消えるらしいことがわかった。

その後調べると、他のライブラリも sudo apt-get install lib???:i386 によって32-bit用を追加できるらしいことがわかった。だったら、ちょっと手を換えれば、64-bit Ubuntu上で両方できちゃうんじゃないか。

と、思ったところ、問題発生。libGLとlibGLUが見つからないという。だったら、libgl1-mesa-dev:i386, libglu1-mesa-dev:i386をインストールすれば、と、思ったらエラーが出てできない。どうやら、調べたところ、これはUbuntuの既知のバグのようだ。

(続きを読む)

2014/06/25

PNGデコーダー

4-bit Indexed Colorに対応

[こからダウンロード]

2014/03/23

とりあえず今までに思いついた中で、C++ constant inheritanceに一番近い解決法

C++で結構いろんな人が困ってる(らしい)問題のひとつに、const inheritance (勝手に命名。正式にこのように呼ばれてるのかどうかは知らない。)がある。検索した感じだと、read-only inheritanceとか呼んでる人もいるみたいだ。結構多くの人が似た様な問題に直面してるっぽいけど、僕が探した範囲では解決方法は見つからなかった。

どういうことかというと、例えば、

class YsShell
{
public:
    // Something useful
};

class YsShellExt : private YsShell
{
public:
    operator const YsShell &() const;
};

こういうことがしたい。YsShellクラスをprivate継承してYsShellExtを作りたいんだけど、ただ、const YsShell &への変換は自動的にやってほしい。YsShellExtはprivateにYsShellを継承してるけど、const YsShell &への変換はpublicだから、自動的にやってよ、と言いたいわけだが、これはできない。 (続きを読む)

PNGエンコーダー & デコーダー

とにかく、単純に一本CPPファイルをプロジェクトに追加するだけでPNGがデコードできるようになるPNGデコーダを更新。バグフィックス。ユーザからのバグレポートに対応。無圧縮ブロックを読み込み中、スライディングウィンドウにデータをコピーしてなかった。

このPNGデコーダ、yspng.cppとyspng.hをプロジェクトに追加するだけで、お手軽簡単にPNG読み込み機能をプログラムに追加できる。g++ (4.4と4.6で動作確認)、clang、Visual C++ 2012で日常的にテストしているから、クロスプラットフォームな開発が必要な場面で役に立つ。PNGとLZ77の仕様を見ながら僕がゼロから書いたからGPL地雷は一切無し。「このPNGデコーダを使うには、○○ライブラリと○○ライブラリの○○バージョンが必要」みたいなメンテナンスの悪夢も一切無し。自分でも数々のプロジェクトでかなり長いこと使ってるし、結構世の中で使ってもらってるみたいだから、コードは鍛えられててかなり安定したと思う。というのが売りで、つい最近までGoogle検索すると検索結果トップに出ていたのに、今見たら2位になってた。

[ここからダウンロード]

 

(旧トピック) Mac OSX プログラミングとの遭遇