我不知道这是怎么回事。
我花了大约3个小时试图修复它,但没有运气。我的代码是:`
temp->wA.border_pixel = BlackPixel(temp->d, temp->sID);
temp->wA.background_pixel = WhitePixel(temp->d, temp->sID);
temp->wA.override_redirect = true;
temp->wA.colormap = XCreateColormap(temp->d, RootWindow(temp->d, temp->sID), temp->vI->visual, AllocNone);
temp->wA.event_mask = ExposureMask;
函数的完整代码如下:
window *createWindow(int height, int width, const char *name)
{
window *temp = (window *)malloc(sizeof(window));
temp->d = XOpenDisplay(NULL);
temp->s = DefaultScreenOfDisplay(temp->d);
temp->sID = DefaultScreen(temp->d);
int tempattribs[] = {
GLX_RGBA,
GLX_DOUBLEBUFFER,
GLX_DEPTH_SIZE, 24,
GLX_STENCIL_SIZE, 8,
GLX_RED_SIZE, 8,
GLX_GREEN_SIZE, 8,
GLX_BLUE_SIZE, 8,
GLX_SAMPLE_BUFFERS, 0,
GLX_SAMPLES, 0,
None};
memcpy(temp->attribs, tempattribs, sizeof(tempattribs));
temp->vI = glXChooseVisual(temp->d, temp->sID, temp->attribs);
if (temp->vI == NULL)
{
perror("ERROR: GLXCHOOSEVISUAL FAILED!\n");
return NULL;
}
temp->wA.border_pixel = BlackPixel(temp->d, temp->sID);
temp->wA.background_pixel = WhitePixel(temp->d, temp->sID);
temp->wA.override_redirect = true;
temp->wA.colormap = XCreateColormap(temp->d, RootWindow(temp->d, temp->sID), temp->vI->visual, AllocNone);
temp->wA.event_mask = ExposureMask;
temp->w = XCreateWindow(temp->d, RootWindow(temp->d, temp->sID), 0, 0, height, width, 0, temp->vI->depth, InputOutput, temp->vI->visual, CWBackPixel | CWColormap | CWBorderPixel | CWEventMask, &temp->wA);
temp->c = glXCreateContext(temp->d, temp->vI, NULL, 1);
glXMakeCurrent(temp->d, temp->w, temp->c);
return temp;
}
如果你想知道发生了什么,我有一个包含所有元素的结构体;上面的代码初始化元素。2下面是结构体:
typedef struct window
{
Window w;
Display *d;
Screen *s;
XEvent e;
int sID;
bool running;
XVisualInfo *vI;
GLXContext c;
XSetWindowAttributes wA;
int attribs[];
} window;
`
我在上面运行了一个调试器,得到了以下结果:
typ
Thread 1 "main" received signal SIGSEGV, Segmentation fault.
0x0000007ff7e10754 in _XcmsAddCmapRec () from /lib/aarch64-linux-gnu/libX11.so.6e here
1条答案
按热度按时间6yoyoihd1#
我终于完成了它,通过创建另一个色彩Map表,并分配原来的色彩Map表到新的。