SDL2 窗口不会渲染颜色/显示透明窗口

问题描述 投票:0回答:1

当我运行这个程序时(C):

#include <stdio.h>
#include <stdlib.h>
#include <SDL2/SDL.h>
#include "./constants.h"

int game_is_running = FALSE;
SDL_Window *window = NULL;
SDL_Renderer * renderer = NULL;

int initialize_window(void){
    if(SDL_Init(SDL_INIT_EVERYTHING) != 0){
        fprintf(stderr, "Error initializing SDL\n");
        return FALSE;
    }
    window = SDL_CreateWindow("SDL WINDOW", SDL_WINDOWPOS_CENTERED,SDL_WINDOWPOS_CENTERED, WINDOW_WIDTH, WINDOW_HEIGHT, SDL_WINDOW_BORDERLESS);
    if (!window){
        fprintf(stderr,"Error creating SDL Window\n");
        return FALSE;
    }

    SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
    if(!renderer){
        fprintf(stderr,"Error creating renderer\n");
        return FALSE;
    }

    return TRUE;
}

void setup(){

}

void update(){

}

void render(){
    SDL_SetRenderDrawColor(renderer, 0,0,0,255);
    SDL_RenderClear(renderer);

    //Start drawing game objects
    SDL_SetRenderDrawColor(renderer, 255,0,0,255);
    SDL_RenderDrawLine(renderer,0,0,50,50);
    
    SDL_RenderPresent(renderer);
}

void destroy_window(){
    SDL_DestroyRenderer(renderer);
    SDL_DestroyWindow(window);
    SDL_Quit();
    //exit(0);
}

int main(int argc, char **argv){
    
    int game_is_running = initialize_window();

    setup();
    SDL_Event e;
    while(game_is_running){
        SDL_PollEvent(&e);
        if(e.type ==SDL_KEYDOWN)
        {
            if(e.key.keysym.sym == SDLK_ESCAPE){
                game_is_running = FALSE;
                destroy_window();
            }
        }
        update();
        render();
    }

    destroy_window();

    return 0;
}

我得到一个透明且没有颜色的空窗口

这是一个C程序,我正在使用

gcc main.c -o game -lSDL2 -lSDL2main
编译在kali 2024.2上运行的程序

我尝试采用 render() 函数并将其放入

while(game_is_running)
循环中。

还尝试将

SDL_Create_Renderer()
标志设置为 0。

我还没有在网上看到这个问题的答案,并且这个解决方案不是我正在寻找的

非常感谢任何帮助:))

(StackOverflow 也将其检测为 cpp 程序,但它是 C 语言)

c sdl-2
1个回答
0
投票

事实证明这只是我的一个愚蠢的错误。正如 @Joel 指出的,

SDL_Renderer *renderer = ...;
中的
int initialize_window()
遮蔽了我在
renderer
之前创建的
int initialize_window()
的全局变量。 为了解决这个问题,我们可以去掉
SDL_Renderer
来简单地引用
renderer

© www.soinside.com 2019 - 2024. All rights reserved.