LINUX.ORG.RU

OpenGL+Xlib


0

1

При попытке соединить вывод OpenGL с Иксовым окном выходит вот такая вот бяка

X Error of failed request:  BadMatch (invalid parameter attributes)
  Major opcode of failed request:  1 (X_CreateWindow)
  Serial number of failed request:  18
  Current serial number in output stream:  20
Отсюда сразу видно что проблема в каких то атрибутах Вот пример моя фунция:
static int GLAttributs[] = 
{ GLX_RGBA, 
GLX_DOUBLEBUFFER, 
GLX_RED_SIZE, 8, 
GLX_GREEN_SIZE, 8,
GLX_BLUE_SIZE, 8, 
GLX_DEPTH_SIZE, 16, 0,
None };

int InitGameWindow(Display *dpy, Window &rootwnd_h, Window &wnd_h,
		unsigned int wnd_h_mask, XSetWindowAttributes wnd_h_attr,
		XSizeHints wnd_h_hints, int wnd_hw, int wnd_hh,int glatt[] ,
		XVisualInfo *&vis, GLXContext &glcont, char* &errStr)
{
	dpy = XOpenDisplay(NULL);
	if (dpy == NULL)
	{
		errStr = (char *) "Display no connected\n";
		return 1;
	}

	rootwnd_h = DefaultRootWindow(dpy);
	wnd_h_mask = CWBorderPixel | CWBackPixel | CWEventMask;
	wnd_h_attr.event_mask = KeyPressMask | StructureNotifyMask | ExposureMask
			| PropertyChangeMask;
	memset(&wnd_h_hints, 0, sizeof(XSizeHints));

	wnd_h_hints.flags = PMinSize | PMaxSize;
	wnd_h_hints.min_width = wnd_hw;
	wnd_h_hints.max_width = wnd_hw;
	wnd_h_hints.min_height = wnd_hh;
	wnd_h_hints.max_height = wnd_hh;
	vis = glXChooseVisual(dpy, DefaultScreen(dpy), glatt);

	wnd_h = XCreateWindow(dpy,rootwnd_h, 0, 0, wnd_hw, wnd_hh, 0, vis->depth,
			InputOutput, vis->visual, wnd_h_mask, &wnd_h_attr);

	XMapWindow(dpy, wnd_h);
	glcont = glXCreateContext(dpy, vis, NULL, True);
	XSetNormalHints(dpy, wnd_h, &wnd_h_hints);

	if ( ! glXMakeCurrent(dpy, wnd_h, glcont) )
			return 6;

	  if ( glGetError() != GL_NO_ERROR )
	    return 9;
	  glViewport(0,0,800,600);
	  	glClearColor(255.0f,0.0f,0.0f,0.0f);
	  	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	  	glMatrixMode(GL_PROJECTION);
	  	glLoadIdentity();
	  	glFlush();

	XSync(dpy, 1);
	return 0;
}

Я нашел что если за место vis->depth и vis->visual написать copyfromparent то все работает, но естественно без вывода графики, как быть ?
Может у кого есть идеи как это исправить ?

★★★★★
Ответ на: комментарий от Eddy_Em

От GLUT ухожу :) (естественно проще, но хочу понять как устроено именно в xlib)

deterok ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

> Это в каком месте здесь плюсы?

Месье не видел в глаза с++? Смотри сюда:

> int InitGameWindow(Display *dpy, Window &rootwnd_h, Window &wnd_h,

unsigned int wnd_h_mask, XSetWindowAttributes wnd_h_attr, XSizeHints wnd_h_hints, int wnd_hw, int wnd_hh,int glatt[] , XVisualInfo *&vis, GLXContext &glcont, char* &errStr)

Весьма качественный быдлокод

anonymous
()
Ответ на: комментарий от anonymous

Тогда уж и слово static не надо в static int GLAttributs[]. Для этого в плючсах есть пространства имён.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо, действительно в colormap дело было, долго провозился из-за того что флажок CWColormap забыл выставить и xsync убрать

deterok ★★★★★
() автор топика
Ответ на: комментарий от deterok

> Какую бы замену вы предложили бы ?

1) Учебник английского языка, почить про простые времена и пассивный залог

2) Для обучения программированию и работы с «низкоуровневыми» вещами - Си. Для обучения программированию - изучить SICP, почитать про ml/ocaml, haskell и попробовать на этих языках что-либо написать.

3) Начать использовать python + модули для него на C

4) Время на адекватное освоение C++ (а не так, чтоб писать в стиле Си + классы + вот такое использование ссылок) - сопоставимо с освоением п.1-п.2-п.3. Заместо траты на чтение и запоминание разных специфичных только для С++ вещей время можно потратить куда более полезно и ознакомиться с ФП и ООП.

anonymous
()
Ответ на: комментарий от anonymous

Спасибо за конструктивную критику, приму к сведению

deterok ★★★★★
() автор топика
Ответ на: комментарий от anonymous

На уродских питоне с хаскелем сам пиши. И от твоего ФП никакой практической пользы нет. Илита не нужна.

anonymous
()
Ответ на: комментарий от anonymous

> На уродских питоне с хаскелем сам пиши. И от твоего ФП никакой практической пользы нет. Илита не нужна.

Ну для кого-то нравится жить в маленьком мирке привычных языков. Кто-то учит один язык.

Кто-то учится программировать. И вот этому «кому-то» обязательно нужно знать более одного языка и более одной парадигмы.

На python написанно пол-gentoo, и ничего, не жалуются. Связка Python + C отлично работает - гугл mercurial/hg.

anonymous
()
Ответ на: комментарий от anonymous

А чем же плохи Перлы и Руби, почему именно Питон? А жабы, C#, ПХП, 1С, SQL, Transact-SQL, PL\SQL? Кто-то учится программировать, а кто-то учится программировать, чтобы на хлеб масло намазывать. Три человека из илиты, пишушие на хаскеле, не нужны.

anonymous
()
Ответ на: комментарий от anonymous

Начать использовать python, а после 2-х лет разработки понять, что получившееся тормозное г^W приложение смогут исопльзовать только твои правнуки, ведь раньше 2050 домашние кластеры популярностью пользоватся не будут.

anonymous
()
Ответ на: комментарий от anonymous

> А чем же плохи Перлы и Руби, почему именно Питон?

А чем плох python? Когда говорят, что Ruby - «медленный» язык - это не правда. На самом деле он ещё медленее в два раза.

1С, SQL, Transact-SQL, PL\SQL

Ну давайте, напишите то, что сейчас пишет ТС на этих языках. Я посмеюсь ;)

anonymous
()
Ответ на: комментарий от anonymous

> Начать использовать python, а после 2-х лет разработки понять, что получившееся тормозное г^W приложение смогут исопльзовать только твои правнуки, ведь раньше 2050 домашние кластеры популярностью пользоватся не будут.

Да-да, ruby быстрее. А ещё на лицо codebloated:

irb(main):001:0> ".methods.length

=> 176

Для новечков такой засранный код не нужен. Python в этом отношении куда более «вылизан» и не засран (на сотню методов меньше!):

len(dir(""))

71

Вы слышали про правила вида 80/20?

1) Преждевременная оптимизация - зло. Была и будет злом

2) У python'a простой FFI c Си. Если обнаружится, что что-то работает не так и вы не можете из python'a сделать того, что хотите - велком, перепишите этот кусочек на Си.

За примерами подобных приложений бегом гугл.

anonymous
()
Ответ на: комментарий от anonymous

> А чем же плохи Перлы и Руби, почему именно Питон? А жабы, C#, ПХП, 1С, SQL, Transact-SQL, PL\SQL?

Это всё инструменты. Инструмент должен быть простым в использовании и позволять эффективно выражать мысли.

«Полезность» программиста не столько в знании энного количества языков, а в умении использовать инструменты для выражения мыслей. Ты можешь знать только русский и быть отличным писателем, а можешь знать русский + английский + исландский и не быть способным написать вменяемый рассказик.

Кто-то учится программировать, а кто-то учится программировать, чтобы на хлеб масло намазывать. Три человека из илиты, пишушие на хаскеле, не нужны.

Не осилил? Проходи дальше, не мешай другим.

anonymous
()
Ответ на: комментарий от anonymous

Какой анонимус нынче нервный пошел.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.