В пакетах openGL(glut) есть функция вида:
void glutDisplayFunc( void (*func)( ) )
То есть функция принимает функцию типа void без аргументов.
И вот вопрос.
Как передать переменную в функцию(которую мы передаём в glutDisplayFunc) не используя глобальные переменные?
Для примера я написал простейшую программу иллюстрирующую проблему.
#include <glut.h> //Подключаем библиотеку glut
int WIDTH = 400; //Глобальная переменная ширины
int HEIGHT = 400; //Глобальная переменная высоты
void setPixel(int x, int y) //Функция отрисовки пикселя с координатами (x,y)
{
glBegin(GL_POINTS);
glVertex2i(x, y);
glEnd();
}
void myDisplay() //Функция, которая будет отвечать за рисование в окне
{
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(0, 0, 0);
glPointSize(100);
setPixel(WIDTH / 2, HEIGHT / 2);//Ставим пиксель в центре окна с использованием глобальных переменных
glFlush();
}
void main()
{
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize(WIDTH, HEIGHT);//Инциализируем размер окна с использованием глобальных переменных
glutCreateWindow("Problem");
glClearColor(1, 1, 1, 1);
glMatrixMode(GL_PROJECTION);
gluOrtho2D(0, WIDTH, 0, HEIGHT);//Устанавливаем двумерную область просмотра с использованием глобальных переменных
glutDisplayFunc(myDisplay); //Собсвенно вот она - проблема
glutMainLoop();
}
здесь можно посмотреть как установить glut