如何在SDL2中显示纹理?

问题描述

我对SDL2有问题,我正在尝试使用SDL2渲染完全红色的表面,但是它不起作用,窗口立即关闭,好像程序在SDL_RenderPresent()函数退出,我认为这是错误的部分是我的fillSurface函数,但我看不到我做错了什么(我正在尝试用红色像素逐个填充SDL_Surface,然后将其显示在屏幕上),谢谢。

这是我的代码

#include <header.h>

int     fillSurface(SDL_Surface *surface,unsigned char r,unsigned char g,unsigned char b,unsigned char a)
{
    uint32_t    color;
    uint32_t    *pixels;
    int         i;

    if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
        color = a + (((uint32_t)b) << 8) + (((uint32_t)g) << 16) + (((uint32_t)r) << 24);
    else
        color = r + (((uint32_t)g) << 8) + (((uint32_t)b) << 16) + (((uint32_t)a) << 24);
    if (SDL_LockSurface(surface))
        return (-1);
    pixels = (uint32_t*)surface->pixels;
    i = 0;
    while (i < surface->w * surface->h)
        pixels[i++] = color;
    SDL_UnlockSurface(surface);
    return (0);
}

int     exitFailure(t_sdlVar *sdl)
{
    if (sdl->renderer)
        SDL_DestroyRenderer(sdl->renderer);
    if (sdl->screenSurface)
        SDL_FreeSurface(sdl->screenSurface);
    if (sdl->screenTexture)
        SDL_DestroyTexture(sdl->screenTexture);
    if (sdl->window)
        SDL_DestroyWindow(sdl->window);
    sdl->renderer = NULL;
    sdl->screenSurface = NULL;
    sdl->screenTexture = NULL;
    sdl->window = NULL;
    SDL_Quit();
    return (-1);
}

int     main(void)
{
    t_sdlVar    sdl;

    sdl.renderer = NULL;
    sdl.screenSurface = NULL;
    sdl.screenTexture = NULL;
    sdl.window = NULL;
    if (SDL_Init(SDL_INIT_VIDEO)
    || !(sdl.screenSurface = SDL_CreateRGBSurface(0,800,600,32,RMASK,GMASK,BMASK,AMASK))
    || SDL_CreateWindowAndRenderer(800,&sdl.window,&sdl.renderer)
    || fillSurface(sdl.screenSurface,255,255)
    || !(sdl.screenTexture = SDL_CreateTextureFromSurface(sdl.renderer,sdl.screenSurface))
    || SDL_Rendercopy(sdl.renderer,sdl.screenTexture,NULL,NULL))
        return (exitFailure(&sdl));
    SDL_RenderPresent(sdl.renderer);
    SDL_Delay(1000);
    return (0);
}

标题

#ifndef HEADER_H
# define HEADER_H

# include <math.h>
# include <unistd.h>
# include <stdlib.h>
# include <SDL.h>
# include <SDL_image.h>

# if SDL_BYTEORDER == SDL_BIG_ENDIAN
#  define RMASK 0xff000000
#  define GMASK 0x00ff0000
#  define BMASK 0x0000ff00
#  define AMASK 0x000000ff
# else
#  define RMASK 0x000000ff
#  define GMASK 0x0000ff00
#  define BMASK 0x00ff0000
#  define AMASK 0xff000000
# endif

typedef struct      s_sdlVar
{
    SDL_Surface     *screenSurface;
    SDL_Texture     *screenTexture;
    SDL_Renderer    *renderer;
    SDL_Window      *window;
}                   t_sdlVar;

#endif

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)