Задать вопрос
@7ice

Как передать переменную в функцию, без использования глобальных переменных?

В пакетах 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
  • Вопрос задан
  • 420 просмотров
Подписаться 1 Простой 1 комментарий
Пригласить эксперта
Ответы на вопрос 3
@arestoff1985
присваиванием функции в переменную, потом ее передавать
void (*fcnPtr)(void) = boo;
glutDisplayFunc( fcnPtr );
Ответ написан
Комментировать
@Andy_U
Почитайте про функциональные классы. Т.е. те, у которых перегружен operator(). Т.е свои параметры задаете в конструкторе, а потом передаете куда нада сам инстанс, который можно вызвать, как функцию.

P.S. Посмотрите мои примеры в последнем коментарии...
Ответ написан
gbg
@gbg Куратор тега C++
Любые ответы на любые вопросы
У этой функции точно есть дружбан, который называется похоже, но принимает void*.
Точно такой же void* принимает функция, которая этот колбек регистрирует, после чего этот void*, собственно, в колбек и попадает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы