SDL2_gfx 功能无效
SDL2_gfx function doesn't work
我正在尝试使用带有 SDL2_gfx 库的 SDL2 在我的屏幕上绘制一些图形基元。但是不知何故 SDL2_gfx 功能似乎不起作用。下面的代码应该在白色背景上绘制一个简单的绿色填充矩形
#include <SDL2/SDL.h>
#include <SDL2/SDL2_gfxPrimitives.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define SCREENW 1366
#define SCREENH 768
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
bool init_SDL() {
if(SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL could not initialize! SDL Error: %s\n",SDL_GetError());
return false;
}
window = SDL_CreateWindow("SDL_gfx_Test",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,SCREENW,SCREENH,SDL_WINDOW_SHOWN);
if(window == NULL) {
printf("Window could not be created! SDL Error: %s\n",SDL_GetError());
return false;
}
renderer = SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED);
if(renderer == NULL) {
printf("Renderer could not be created! SDL Error: %s\n",SDL_GetError());
return false;
}
if(SDL_SetRenderDrawColor(renderer,0xFF,0xFF,0xFF,0xFF) < 0) {
printf("Renderer color could not be set! SDL Error: %s\n",SDL_GetError());
return false;
}
return true;
}
void close_SDL() {
SDL_DestroyRenderer(renderer);
renderer = NULL;
SDL_DestroyWindow(window);
window = NULL;
SDL_Quit();
}
int main(int argc,char *argv[]) {
Sint16 topRightX = 100;
Sint16 topRightY = 100;
Sint16 bottomLeftX = 300;
Sint16 bottomLeftY = 300;
Uint32 green = 0x00FF00FF;
if(!init_SDL()) {
exit(EXIT_FAILURE);
}
SDL_RenderClear(renderer);
if(boxColor(renderer,topRightX,topRightY,bottomLeftX,bottomLeftY,green) < 0) {
printf("Could not draw box to renderer!\n");
exit(EXIT_FAILURE);
}
SDL_RenderPresent(renderer);
SDL_Delay(3000);
close_SDL();
exit(EXIT_SUCCESS);
}
我用命令编译了代码
gcc -g3 -o sdl_gfx_test sdl_gfx_test.c `sdl2-config --cflags --libs` -lSDL2_gfx
在 Ubuntu 14.04
没有编译器错误或警告,也没有链接器错误。但是屏幕上没有出现绿色矩形。由于 SDL_RenderClear(),仅显示白色背景。我检查了我的代码十几次,但没有发现任何缺陷。有谁知道为什么 boxColor() 没有完成他的工作?
根据 the documentation,您的代码是正确的。但是如果你按照给定的 link 代码,你会看到 boxColor
并不完全按照它说的去做:
int boxColor(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color)
{
Uint8 *c = (Uint8 *)&color;
return boxRGBA(renderer, x1, y1, x2, y2, c[0], c[1], c[2], c[3]);
}
在小端系统上,32位整数的最低有效字节在前,所以颜色0xRRGGBBAA
,c[0]
是AA,c[1]
是BB,c[2]
是GG,c[3]
是RR。
你的程序实际显示的是透明框
您可以使用采用单独 RGBA 参数的函数来避免此问题。
我正在尝试使用带有 SDL2_gfx 库的 SDL2 在我的屏幕上绘制一些图形基元。但是不知何故 SDL2_gfx 功能似乎不起作用。下面的代码应该在白色背景上绘制一个简单的绿色填充矩形
#include <SDL2/SDL.h>
#include <SDL2/SDL2_gfxPrimitives.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#define SCREENW 1366
#define SCREENH 768
SDL_Window *window = NULL;
SDL_Renderer *renderer = NULL;
bool init_SDL() {
if(SDL_Init(SDL_INIT_VIDEO) < 0) {
printf("SDL could not initialize! SDL Error: %s\n",SDL_GetError());
return false;
}
window = SDL_CreateWindow("SDL_gfx_Test",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,SCREENW,SCREENH,SDL_WINDOW_SHOWN);
if(window == NULL) {
printf("Window could not be created! SDL Error: %s\n",SDL_GetError());
return false;
}
renderer = SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED);
if(renderer == NULL) {
printf("Renderer could not be created! SDL Error: %s\n",SDL_GetError());
return false;
}
if(SDL_SetRenderDrawColor(renderer,0xFF,0xFF,0xFF,0xFF) < 0) {
printf("Renderer color could not be set! SDL Error: %s\n",SDL_GetError());
return false;
}
return true;
}
void close_SDL() {
SDL_DestroyRenderer(renderer);
renderer = NULL;
SDL_DestroyWindow(window);
window = NULL;
SDL_Quit();
}
int main(int argc,char *argv[]) {
Sint16 topRightX = 100;
Sint16 topRightY = 100;
Sint16 bottomLeftX = 300;
Sint16 bottomLeftY = 300;
Uint32 green = 0x00FF00FF;
if(!init_SDL()) {
exit(EXIT_FAILURE);
}
SDL_RenderClear(renderer);
if(boxColor(renderer,topRightX,topRightY,bottomLeftX,bottomLeftY,green) < 0) {
printf("Could not draw box to renderer!\n");
exit(EXIT_FAILURE);
}
SDL_RenderPresent(renderer);
SDL_Delay(3000);
close_SDL();
exit(EXIT_SUCCESS);
}
我用命令编译了代码
gcc -g3 -o sdl_gfx_test sdl_gfx_test.c `sdl2-config --cflags --libs` -lSDL2_gfx
在 Ubuntu 14.04
没有编译器错误或警告,也没有链接器错误。但是屏幕上没有出现绿色矩形。由于 SDL_RenderClear(),仅显示白色背景。我检查了我的代码十几次,但没有发现任何缺陷。有谁知道为什么 boxColor() 没有完成他的工作?
根据 the documentation,您的代码是正确的。但是如果你按照给定的 link 代码,你会看到 boxColor
并不完全按照它说的去做:
int boxColor(SDL_Renderer * renderer, Sint16 x1, Sint16 y1, Sint16 x2, Sint16 y2, Uint32 color)
{
Uint8 *c = (Uint8 *)&color;
return boxRGBA(renderer, x1, y1, x2, y2, c[0], c[1], c[2], c[3]);
}
在小端系统上,32位整数的最低有效字节在前,所以颜色0xRRGGBBAA
,c[0]
是AA,c[1]
是BB,c[2]
是GG,c[3]
是RR。
你的程序实际显示的是透明框
您可以使用采用单独 RGBA 参数的函数来避免此问题。