निष्पादित नहीं किया गया मैंने अपने टेस्सेलेशन कॉलबैक को एक अलग वर्ग में स्थानांतरित करने के लिए उदाहरण here का उपयोग किया।ओपनजीएल टेस्सेलेशन कॉलबैक
कोड संकलित करता है, लेकिन कॉलबैक कोड कभी निष्पादित नहीं होता है।
कॉलबैक वर्ग:
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_;
};
कॉलबैक:
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";
}
पच्चीकारी समारोह जहां मैं उन्हें दर्ज की है:
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;
}
क्या तरीका कॉलबैक पंजीकृत किया जा रहा है साथ कुछ गड़बड़ है ?
मैं नहीं देख रहा हूं कि फ़ंक्शन पॉइंटर को ऑब्जेक्ट पॉइंटर कास्टिंग कैसे करना है। जिस तरह से मैं इसे पढ़ रहा हूं वह यह है कि टेस्सेलेटर 'BeginCallback :: class_instance_' में डेटा निष्पादित करने का प्रयास करेगा,' BeginCallback' को अस्वीकार नहीं करेगा और 'ऑपरेटर()' चलाएं। – genpfault
मैं देख रहा हूँ कि आप क्या कह रहे हैं। वह हिस्सा टेसेलेशन कोड में इस समाधान (http://www.partow.net/programming/templatecallback/) को फिट करने का मेरा प्रयास था। क्या मैं पूरी बात गलत तरीके से आ रहा हूं? – BrickFrog
की तरह। जीएलयू टेस्सेलेटर पुराना कोड है, और जिस तरह से आप कोशिश कर रहे हैं, सी ++ ऑब्जेक्ट्स को संभाल नहीं लेता है। अपने कॉलबैक को सरल बनाना सी-सिटल फ़ंक्शन कई चीजों को सरल बना देगा। ['GluTessCallback' मैन पेज] (http://www.opengl.org/sdk/docs/man2/xhtml/gluTessCallback.xml) में कॉलबैक की उचित चर्चा है और आप उनमें क्या शामिल करना चाहते हैं (मानते हुए आप तत्काल-मोड-स्टाइल ओपनजीएल से परिचित हैं)। – radical7