mrjbom
@mrjbom

OpenGL не сразу отображает данные из кадрового буфера?

Имеется программа которая обрисовывает 500 точек в случайных местах.
Проблема в том, что изображение обновляется только в моменты нажатия на него мышью и в промежутки в 1(или чуть меньше) секунду.
Как сделать так, что-бы изображение изменялось само и без задержки?

Вот она:
#include <iostream>
#include <conio.h>
#include <GL/glut.h>
#include <stdlib.h>
#include <stdio.h>
#include <ctime>

using namespace std;

void init();
void displayFunction();

void init()
{
	glutDisplayFunc(displayFunction);
	glClearColor(1.0, 1.0, 1.0, 0.0);
	glMatrixMode(GL_PROJECTION);
	glLoadIdentity();
	gluOrtho2D(-300, 300, -300, 300);
}

void displayFunction()
{
	glClear(GL_COLOR_BUFFER_BIT);
	glColor3f(0, 0, 0);
	glPointSize(3.0);

	glBegin(GL_POINTS);
	srand((unsigned)time(NULL));
	//генерация точек и их отрисовка
	for (unsigned int i = 0; i < 500; ++i)
	{
		bool sign = bool(rand() % 2);
		int x = 0 + rand() % 301;
		int y = 0 + rand() % 301;
		if (!sign)
			x = -x;
		sign = bool(rand() % 2);
		if (!sign)
			y = -y;
		glVertex2i(x, y);
	}
	glEnd();
	glutSwapBuffers();
	glFlush();
}

int main(int argc, char* argv[])
{
	glutInit(&argc, argv);
	glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
	glutInitWindowSize(600, 600);
	glutInitWindowPosition((GetSystemMetrics(SM_CXSCREEN) - 600) / 2, (GetSystemMetrics(SM_CYSCREEN) - 600) / 2);
	glutCreateWindow("Window");
	init();
	glutMainLoop();
	return 0;
}


Кстати, скажите, нужен ли тут glFlush()?
  • Вопрос задан
  • 158 просмотров
Решения вопроса 1
@MarkusD Куратор тега C++
все время мелю чепуху :)
Я не вижу в твоем коде вызова glutIdleFunc. В документации написано что GLUT будет постоянно вызывать переданную функцию в свободное от обработки системных сообщений время. А если в glutIdleFunc передан nullptr (или idle-функция не была задана), то GLUT будет строго ждать следующего системного сообщения.

Если я все правильно помню, то передача настоящей функции, в которой будет вызываться функция glutPostRedisplay, в glutIdleFunc приведет и к регулярной перерисовке экрана.
Как правило, в качестве idle-функции в GLUT передают update-функцию, в которой обновляется состояние объектов перед рендерингом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
SPL
от 200 000 до 250 000 ₽
SPL
от 100 000 до 200 000 ₽
SunStrike Studios Новосибирск
от 150 000 до 200 000 ₽