C++/OpenGL:纹理到像素图示例 - 缩小转换错误
C++ / OpenGL: Texture to pixmap example - narrowing conversion error
我正在尝试从 OpenGL 运行 这个 texture to pixmap example 并得到以下错误
tex_to_pix.cpp:40:1: error: narrowing conversion of ‘4294967295u’ from ‘unsigned int’ to ‘int’ inside { } [-Wnarrowing]
错误是指示例的以下代码块:
const int pixmap_config[] = {
GLX_BIND_TO_TEXTURE_RGBA_EXT, True,
GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT,
GLX_BIND_TO_TEXTURE_TARGETS_EXT, GLX_TEXTURE_2D_BIT_EXT,
GLX_DOUBLEBUFFER, False,
GLX_Y_INVERTED_EXT, GLX_DONT_CARE,
None
};
出现这个错误的原因是什么?
是编译器问题还是c++11问题?
有没有办法让我的编译器忽略 -Wnarrowing 或进行安全转换?
问题出在 GLX_DONT_CARE
上,它定义为:
#define GLX_DONT_CARE 0xFFFFFFFF
因为这个值不适合 32 位 int
,它的类型是 unsigned int
(参见 this answer)。缩小转换的规则在 c++11 中确实发生了变化。
尝试将此 unsigned int
隐式转换为 int
会导致缩小转换警告。如 this answer 所示,缩小问题可以通过使用 static_cast(GLX_DONT_CARE & 0xFFFFFFFF) 而不是 [= 来解决32=]
const int pixmap_config[] = {
GLX_BIND_TO_TEXTURE_RGBA_EXT, True,
GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT,
GLX_BIND_TO_TEXTURE_TARGETS_EXT, GLX_TEXTURE_2D_BIT_EXT,
GLX_DOUBLEBUFFER, False,
GLX_Y_INVERTED_EXT, static_cast<int>(GLX_DONT_CARE & 0xFFFFFFFF),
None
};
或者,在您的编译器中禁用缩小转换错误(未指定)。
我正在尝试从 OpenGL 运行 这个 texture to pixmap example 并得到以下错误
tex_to_pix.cpp:40:1: error: narrowing conversion of ‘4294967295u’ from ‘unsigned int’ to ‘int’ inside { } [-Wnarrowing]
错误是指示例的以下代码块:
const int pixmap_config[] = {
GLX_BIND_TO_TEXTURE_RGBA_EXT, True,
GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT,
GLX_BIND_TO_TEXTURE_TARGETS_EXT, GLX_TEXTURE_2D_BIT_EXT,
GLX_DOUBLEBUFFER, False,
GLX_Y_INVERTED_EXT, GLX_DONT_CARE,
None
};
出现这个错误的原因是什么?
是编译器问题还是c++11问题?
有没有办法让我的编译器忽略 -Wnarrowing 或进行安全转换?
问题出在 GLX_DONT_CARE
上,它定义为:
#define GLX_DONT_CARE 0xFFFFFFFF
因为这个值不适合 32 位 int
,它的类型是 unsigned int
(参见 this answer)。缩小转换的规则在 c++11 中确实发生了变化。
尝试将此 unsigned int
隐式转换为 int
会导致缩小转换警告。如 this answer 所示,缩小问题可以通过使用 static_cast(GLX_DONT_CARE & 0xFFFFFFFF) 而不是 [= 来解决32=]
const int pixmap_config[] = {
GLX_BIND_TO_TEXTURE_RGBA_EXT, True,
GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT,
GLX_BIND_TO_TEXTURE_TARGETS_EXT, GLX_TEXTURE_2D_BIT_EXT,
GLX_DOUBLEBUFFER, False,
GLX_Y_INVERTED_EXT, static_cast<int>(GLX_DONT_CARE & 0xFFFFFFFF),
None
};
或者,在您的编译器中禁用缩小转换错误(未指定)。