Я пытаюсь использовать sdl в качестве диспетчера окон для openGL. Я изучил использование собственного API-интерфейса Windows, но выглядел запутанным.Выполнить код класса один раз C++
С учетом сказанного, у меня есть class Window
, который я бы хотел сейчас обернуть весь материал SDL для моего управления окнами. Рисунок, это позволит мне менять управление окнами позже, если я нахожу, что я не хочу использовать SDL.
Я предполагаю, что много кода инициализации openGL нужно запускать только один раз.
if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {
exit(0x1);
}
SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 16);
SDL_GL_SetAttribute(SDL_GL_BUFFER_SIZE, 32);
SDL_GL_SetAttribute(SDL_GL_ACCUM_RED_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ACCUM_GREEN_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ACCUM_BLUE_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_ACCUM_ALPHA_SIZE, 8);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLEBUFFERS, 1);
SDL_GL_SetAttribute(SDL_GL_MULTISAMPLESAMPLES, 2);
Тогда в классе конструктора я могу создать окно с
Window::Window(int winW, int winH) {
if((Surf_Display = SDL_SetVideoMode(winW,winH,32, SDL_HWSURFACE | SDL_GL_DOUBLEBUFFER | SDL_OPENGL | SDL_RESIZABLE)) == NULL) {
exit(2);
}
glClearColor(0, 0, 0, 0);
glClearDepth(1.0f);
glViewport(0, 0, winW, winH);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, winW, winH, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
glEnable (GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glLoadIdentity();
}
Я просто не знаю, как идти об этом. Если я положу код до того, как я определю класс в заголовке, достигнет ли он желаемого результата?
;init code
;class window { };
Хорошо, я просто подумал, что странно иметь класс, требующий некоторой инициализации в основном, но, вероятно, лучший выбор. Благодарю. – Chemistpp