c - SDL:无法翻转多个表面

标签 c sdl graphics2d

我一直在尝试翻转表面,如果只翻转单个表面(与我从 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/

相关文章:

c - 在 C 中传递数组指针并从不同数组中获取值

java - JTable 打印,顶部带有前缀文本(不是页眉/页脚)

java - 如何在 Java 中居中 Graphics.drawString()?

c - &variable 作为表达式在 c 中意味着什么

c - 如何在C中的struct中添加元素

c - 如何退出 C 中长时间运行的函数?

c - GTKSDL - 处理事件

c++ - 使用 GLEW 1.10.0 和 SDL 2.0 的问题

c++ - SDL 1.3 : How to render video with out displaying it?

java - ImageIO 保存回原始大小