LINUX.ORG.RU

GLX - сегфолт на запросе glXGetFBConfigs


0

1
#include <stdio.h>
#include <GL/gl.h>
#include <GL/glx.h>
int main(int argc,char* argv[])
{
        int screenNumber;
        int *confNumber;
        Display *dpy = XOpenDisplay(NULL);
        GLXFBConfig *conf;
        screenNumber=DefaultScreen(dpy);
        conf = glXGetFBConfigs(dpy, screenNumber, confNumber);
        int *result;
        glXGetFBConfigAttrib(dpy,conf,GLX_TRANSPARENT_TYPE,result); 
        printf("%i\n",*result);
        XCloseDisplay(dpy);
}
(gdb) next
12              conf = glXGetFBConfigs(dpy, screenNumber, confNumber);
(gdb) next

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff792adb9 in glXGetFBConfigs () from //usr/lib64/opengl/nvidia/lib/libGL.so.1

Пытаюсь запустить примеры из главы superBible про glx, но всё сегфолтится. Сделал такой хелловорд.

Дело в нвидии или я что-то не так делаю?

★★★★

А как оно у вас вообще скомпилировалось?

1.c: В функции 'main':
1.c:14: предупреждение: в передаче аргумента 2 'glXGetFBConfigAttrib': несовместимый тип указателя
/usr/include/GL/glx.h:248: замечание: expected 'GLXFBConfig' but argument is of type 'struct __GLXFBConfigRec **'

// а фреймбуфер там не нужен случайно

Eddy_Em ☆☆☆☆☆
()

Третьим аргументом у glXGetFBConfigs идёт указатель на массив аттрибутов, в соответствии с которым оно выберёт один или несколько подходящих конфигов. Читай документацию внимательнее.

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

опс, самому надо посты внимательнее читать

anonymous
()

И еще ошибка: int *result вместо int result

Eddy_Em ☆☆☆☆☆
()

наверное, как-то так

#include <stdio.h>
#include <GL/gl.h>
#include <GL/glx.h>
int main(int argc,char* argv[])
{
        int screenNumber;
        int confNumber;
        Display *dpy = XOpenDisplay(NULL);
        GLXFBConfig *conf;
        screenNumber=DefaultScreen(dpy);
        conf = glXGetFBConfigs(dpy, screenNumber, &confNumber);
        int result;
        glXGetFBConfigAttrib(dpy,*conf,GLX_TRANSPARENT_TYPE,&result); 
        printf("%i\n",result);
        XCloseDisplay(dpy);
}

madcore ★★★★★
()
Ответ на: наверное, как-то так от madcore

Спасибо. Просто в книге описание функции было

GLXFBConfig * glXGetFBConfigs(	Display *  	dpy,
 	int  	screen,
 	int *  	nelements);
Я думал, что «int * ...» означает, что и передавать нужно указатель. Похоже, нужно погодить с чтением спецификации и дочитать, наконец, Кернигана и Ричи >_<

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

openGL Superbible. Чем заменяются glBegin/glEnd, кроме как glDrawArrays, которые и до этого были, так и не понял. Похоже, один фиг, придется спецификацию читать

wingear ★★★★
() автор топика
10 июля 2012 г.
Ответ на: комментарий от wingear

segfault бывает только по следующим причинам: 1.вышли за рамки массива (неправильно высчитывается индекс или при выделении места указали неверный размер) 2.не выделили место для указателя в сабже второй вариант

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