问题描述
我对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 (将#修改为@)