我一直在尝试翻转表面,如果只翻转单个表面(与我从 SDL_SetVideoMode
返回的表面相同),我就成功了。如果我尝试翻转从 SDL_DisplayFormat
返回的表面,则不会发生任何事情。我已附上演示代码来演示我的问题:
#include <stdio.h>
#include <stdlib.h>
#include "SDL/SDL.h"
void main()
{
int i;
SDL_Surface *mysurface1;
SDL_Surface *mysurface2;
char *pxl;
SDL_Init( SDL_INIT_EVERYTHING );
mysurface1 = SDL_SetVideoMode( 640, 480, 8, SDL_DOUBLEBUF|SDL_HWSURFACE );
for (i = 0; i < 20; i++)
{
pxl = (char *)mysurface1->pixels + i*mysurface1->pitch + i;
*pxl = 100; // Red Line
}
SDL_Flip(mysurface1); // Works, we see a red line
sleep(5);
printf("Sleeping for 5...\n");
mysurface2 = SDL_DisplayFormat(mysurface1);
for (i = 0; i < 20; i++)
{
pxl = (char *)mysurface2->pixels + i*mysurface2->pitch + i;
*pxl = 255; // White line
}
SDL_Flip(mysurface2); // White line doesnt appear
printf("Done... No white line\n");
sleep(10);
}
有人以前见过这个吗?再次,我认为我追踪到了如果它是我从 SDL_DisplayFormat
返回的表面,则不会显示的表面。如果我在表面上执行此操作,我会从 SDL_SetVideoMode
返回,然后我会看到红线,并且一切正常。
最佳答案
您只能翻转主显示表面(使用 SDL_SetVideoMode
创建的显示表面)。为了使其他表面可见,您需要将其传输到主表面上。有关如何执行此操作的详细信息,请查找 SDL_BlitSurface
。
关于c - SDL:无法翻转多个表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8671871/