さまざまな理由から (そして、それらが有効であることを保証するので、「ココアを使用する」という話はやめてください)、Mac でいくつかのグラフィック デモを再構築するために、XCode、C++、OpenGL、OpenCL (サイドに少し GLUT を使用) を使用する必要があります。 (XP + Visual Studio 2005 開発による)。このプロジェクトは、「c++ stdc++」を使用してコマンド ライン ツールとしてビルドされました。
私の Program.h ファイルは、シェーダー オブジェクトを相互に接続し、コンパイルし、リンクし、その他の方法で OpenGL シェーダー プログラムとして使用できるように準備します。このファイルには、次の関連するコード行が含まれています。
#include <vector>
using std::vector;
クラスのプライベートセクション内:
vector<int> shaderHandles;
シェーダ ハンドルを追加する場合:
shaderHandles.push_back(shaderHandle);
最後に、プッシュされたシェーダー ハンドルを使用する場合:
for (int s = 0; s < (int) shaderHandles.size(); s++)
{
glAttachShader(handle, shaderHandles[s]);
}
私のすべての経験と調査では、C++ 内のこれらの行に問題はありません。ただし、コンパイル時に (デバッグまたはリリースに関係なく、_GLIBCXX_DEBUG
問題とは関係ありません)、次の 4 つのエラーが生成されます。
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/stl_bvector.h:916: error: 'size' is not a member of 'std'
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/stl_bvector.h:961: error: 'size' is not a member of 'std'
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/vector.tcc:350: error: '__old_size' is not a member of 'std'
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/bits/vector.tcc:453: error: '__old_size' is not a member of 'std'
また、stl_bvector.h および vector.tcc にリンクするファイルは次のとおりです。
/Developer/SDKs/MacOSX10.6.sdk/usr/include/c++/4.2.1/vector
これまでのところ、多数の Google 検索で何も見つかりませんでした。このコードはすべて、Windows 上で問題なく動作します。さらに悪いことに、上記のコードを同等のリストに置き換えると、次のようになります。
#include <list>
using std::list;
と、
list<int> shaderHandles;
と、
for (list<int>::iterator s = shaderHandles.begin(); s != shaderHandles.end(); s++)
{
glAttachShader(handle, *s);
}
プログラムは期待どおりに動作します。
しかし、これを完全にベクトルの実装のせいにすることはできません。次のプログラムがあるからです。
#include <iostream>
#include <vector>
using std::vector;
int main (int argc, char * const argv[])
{
vector<int> test;
test.push_back(1);
test.push_back(2);
test.push_back(3);
test.clear();
return 0;
}
問題なく動作します。
必要に応じてさらに情報を提供させていただきます。
Cocoa/Objective-C を使うべきだとは言わないでください。それは今のところ本当にオプションではありません。はい、リストを使用してこの機能を実現できますが、デモの他の部分は簡単に作り直すことができません。