오픈지엘을 이용해서 화면에 객체를 그리려고 하는데 오픈지엘 모르셔도 됩니다
기존에 하나의 cpp파일에 다 들어있는 걸 클래스로 나눠서 고치는 중인데 오류가 발생합니다
지금 클래스 함수에 관해서 오류가 있는 것 같아요
CScene.h
class CScene
{
public:
virtual GLvoid glDrawScene();
}
class StageScene_1 : public CScene
{
public:
virtual GLvoid glDrawScene();
}
//////////////////////////////////////////////////
CScene.cpp
GLvoid StageScene_1::glDrawScene()
{
여러가지 그리는 내용들이 들어있음
}
/////////////////////////////////////////////////
main.cpp
StageScene_1 * sc;
int main(int argc, char* argv[])
{
glutDisplayFunc(sc->glDrawScene); //glutDisplayFunc 이건 오픈지엘 자체 내 함수라서 신경 안 써도 됨 걍 화면에 그리는 거임
}
이런 식으로
원래 한 cpp파일 내에 들어있을 때는 glutDisplayFunc(glDrawScene) 이거였습니다
오류 내용은
error C3867: 'StageScene_1::glDrawScene': 함수 호출에 인수 목록이 없습니다. '&StageScene_1::glDrawScene'을(를) 사용하여 멤버에 대한 포인터를 만드십시오.
인터넷에서 찾아봐서 glDrawScene() <- 괄호를 넣는거다 해서 넣으면 sc에 빨간줄이 뜨고
IntelliSense: "GLvoid" 형식의 인수가 "void (*)()" 형식의 매개 변수와 호환되지 않습니다.
라는 오류가 떠서 진퇴양난입니다
부디 이 불쌍한 영혼을 구제해 주실 형님들 찾습니다 __
클래스 멤버 함수와 glut가 요구하는 함수 포인터와는 타입이 다름.
extern void APIENTRY glutDisplayFunc(void (*func)(void)); 이거여?
global scope의 wrapper function을 만들고 걔를 glut에 넘기셈
cpp한파일에 다있었을때 코드가궁금하다. 그리고 부수적으로클래스멤버함수 호출에대해서 더 찾아보셈.
glutDisplayFunc 의 타입을 보면 void (*func)(void) type인데 멤버 함수는 아마 void CScene::(*func)(void) type일거임
가장 간단한 해결법은 class로 네가 만들고 싶은 app의 context 정보를 감싼 다음 걔를 global scope instance로 갖고 있으셈
그리고 glut wrapper function 만들고 거기서 context 접근해서 하고 싶은 짓을 하는게 더 쉬울거임
근데 애초에 glut 자체가 후져서 요새는 glut 안쓰고 glfw 쓰니까 혹시 바꿀 수 있으면 바꾸셈
천민은 무슨 말씀인지 도통 모르겠사와요 ㅠㅠ
static이나 _cdecl아닌가요
여기 댓글 너무 불편해서 대화할 수 있는 방법 찾아오면 갈켜 드림
넌 지금 클래스멤버함수를 전달해주려고하고이싸와요. 그래서 저님이 void CScene::(*func)(void) type 이라고 말한거고. 그래서 클래스 멤버함수호출 더찾아보시라고한거
재삐님 라인 하시나여
깜빡깜빡//CScene:: 클래스가 붙어서 형식이 다른건 알겠네여 ㅠㅠ
ㄴㄴ 안함여
그냥 풀소스 올려주심 실력자형님들이 해결해 주실듯
재삐//윽..그럼 메일 주소라도..ㅠㅠ
UNREAL//근데 진짜 저게 다에요 나머진 오픈지엘 내에서 그리는 내용이라서 차이가 없을 것 같은데;
메일주소 올리시면 제가 연락 드림 =
july.kuro@gmail.com 입니다!