5
테셀레이션 콜백을 다른 클래스로 이동하려면 예제 here을 사용했습니다.OpenGL 테셀레이션 콜백이 실행되지 않음
코드가 컴파일되지만 콜백 코드가 실행되지 않습니다.
콜백 클래스 :
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'을 참조하지 않고'operator()'를 실행하려고 시도한다는 것입니다. – genpfault
당신이 말하는 것을 봅니다. 이 부분은이 솔루션 (http://www.partow.net/programming/templatecallback/)을 테셀레이션 코드에 맞추려는 시도였습니다. 내가 전부 잘못 온거야? – BrickFrog
종류입니다. GLU 테셀레이터는 오히려 오래된 코드이며, 여러분이 시도하는 방식으로 C++ 객체를 처리하지 않습니다. 콜백을 단순하게 만드는 C-sytle 함수는 많은 것을 단순화합니다. ['gluTessCallback' man page] (http://www.opengl.org/sdk/docs/man2/xhtml/gluTessCallback.xml)에는 콜백에 대한 합당한 논의가 포함되어 있습니다. 즉각적인 모드 스타일의 OpenGL에 익숙합니다. – radical7