这是C代码中的一个错误。在
surface.c line 2258
,为了
surf_blits
有以下测试:
if (dest->flags & SDL_OPENGL &&
!(dest->flags & (SDL_OPENGLBLIT & ~SDL_OPENGL))) {
bliterrornum = BLITS_ERR_NO_OPENGL_SURF;
goto bliterror;
}
而在
surface.c line 2118
,为了
surf_blit
代码是:
#if IS_SDLv1
if (dest->flags & SDL_OPENGL &&
!(dest->flags & (SDL_OPENGLBLIT & ~SDL_OPENGL)))
return RAISE(pgExc_SDLError,
"Cannot blit to OPENGL Surfaces (OPENGLBLIT is ok)");
#endif /* IS_SDLv1 */
注意到
#if IS_SDLv1
.
问题似乎来自
SDL_OPENGLBLIT
哪个是
now deprecated
.
不要使用不推荐使用的sdl_opengblit模式,该模式用于允许Blitting和使用OpenGL。由于很多原因,此标志已被弃用。在许多情况下,使用sdl_opengblit会损坏OpenGL状态。
不幸的是,我不是OpenGL的专家,无法进一步解释。希望有人能给出更准确的答案。
我所知道的是我可以提高
BLITS_ERR_SEQUENCE_SURF
之前(通过
pygame.Rect
作为第一个对象
blit_args
例如)我不能提高
BLITS_ERR_INVALID_DESTINATION
就在之后。
这让我觉得上面的台词有问题。
编辑
如果我加上
如果IsSDLDV1
围绕上面的测试并重新编译pygame,它可以工作。不知道为什么!艾斯
我提出了
issue on GitHub
.