5
テッセレーションのコールバックを別のクラスに移動するために、例hereを使用しました。OpenGL Tessellationコールバックが実行されない
コードはコンパイルされますが、コールバックコードは決して実行されません。
コールバッククラス:
template <class Class, typename ReturnType, typename Parameter>
class SingularCallBack
{
public:
typedef ReturnType (Class::*Method)(Parameter);
SingularCallBack(Class* class_instance, Method method)
: class_instance_(class_instance),
method_(method)
{}
ReturnType operator()(Parameter parameter)
{
return (class_instance_->*method_)(parameter);
}
ReturnType execute(Parameter parameter)
{
return operator()(parameter);
}
private:
Class* class_instance_;
Method method_;
};
コールバック:
int MyClass::TessellatePolys()
{
GLUtesselator *tess = gluNewTess(); // create a tessellator
if(!tess) return 0; // failed to create tessellation object, return 0
// register callback functions
SingularCallBack<GLOrtho, void, GLenum>*BeginCallback;
BeginCallback = new SingularCallBack<GLOrtho, void, GLenum>(this,&GLOrtho::tessBegin);
gluTessCallback(tess, GLU_TESS_BEGIN, (void (CALLBACK *)())BeginCallback);
SingularCallBack<GLOrtho, void, const GLvoid*>*VertexCallback;
VertexCallback = new SingularCallBack<GLOrtho, void, const GLvoid*>(this,&GLOrtho::tessVertex);
gluTessCallback(tess, GLU_TESS_VERTEX, (void (CALLBACK *)())VertexCallback);
... (do tessellation) ...
return id;
}
コールバックが登録されている方法と間違っている何を:私はそれらを登録してい
void MyClass::tessBegin(GLenum which)
{
glBegin(which);
cout << "BEGIN CALLBACK IS WORKING";
}
void MyClass::tessVertex(const GLvoid *data)
{
// cast back to double type
const GLdouble *ptr = (const GLdouble*)data;
glVertex3dv(ptr);
cout << "VERTEX CALLBACK IS WORKING";
}
テッセレーション機能?
私は、関数ポインタへのオブジェクトポインタのキャスティングがどのように動作するはずですか?私が読んでいるところは、tesselatorが 'BeginCallback :: class_instance_'でデータを実行し、' BeginCallback'を参照せずに 'operator()'を実行しようとすることです。 – genpfault
あなたの言っていることが分かります。その部分は、このソリューション(http://www.partow.net/programming/templatecallback/)をテッセレーションコードに適合させる私の試みでした。私は全体的に間違って来ますか?種別: – BrickFrog
GLUテッセレータはかなり古いコードで、あなたが試している方法でC++オブジェクトを扱いません。あなたのコールバックを単純なC-sytle関数にすることは、多くのことを単純化します。 ['gluTessCallback'のマニュアルページ(http://www.opengl.org/sdk/docs/man2/xhtml/gluTessCallback.xml)には、コールバックとその中に含めるものについて合理的な議論がありますあなたは即時モードスタイルのOpenGLに精通しています)。 – radical7