-2

SDL 1.2 を使用するプロジェクトがあり、SDL 2.0 に移行したいと考えています。物事を単純にするために、変更に慣れるために簡単なプログラムを書いてみました。

ただし、SDL_CreateWindow は失敗しており、SDL_GetError は何も表示していません。そのため、ウィンドウの作成が機能しない理由がわかりません。

ウィンドウは実際に作成されますが、その後消えます。

#include <SDL.h>
#include <stdio.h>              // printf etc
#include <stdlib.h>             // abs, malloc, realloc
#include <stdint.h>             // uint8_t, uint16_t, int32_t

#define WIDTH 853
#define HEIGHT 480

int main(int argc, char** argv) {
        SDL_Renderer*   renderer;
        SDL_Window*             window;
        SDL_Texture*    screenTexture;
        SDL_Event               event;
        Uint8*                  screenBuffer;

        FILE* fp;      
        int quit = 0;

        fp = fopen("SDL2test.log", "w");
        if (!fp) {
                printf("\nCould not create log file");
                return -1;
        }

        if (SDL_Init(SDL_INIT_VIDEO) < 0 ) {
                fprintf(fp, "\nCould not initialise SDL: %s\n", SDL_GetError() );
                return -2;
        }

        window = NULL;
        if ( NULL == ( window = SDL_CreateWindow("SDL2 test",SDL_WINDOWPOS_UNDEFINED,                                                                                                   SDL_WINDOWPOS_UNDEFINED,                                                                                                    WIDTH,                                                                                                    HEIGHT,                                                                                                    0)));{
                fprintf(fp, "Could not create SDL window: %s\n", SDL_GetError() );
                SDL_Delay(3000);
                SDL_Quit();
                return -3;
        }     
        if ( !( renderer = SDL_CreateRenderer(window, -1, 0) ) ); {
        SDL_Quit();
        return -4;
    }     
        if ( !( screenTexture = SDL_CreateTexture(renderer,SDL_PIXELFORMAT_RGB24,                                                                                                    SDL_TEXTUREACCESS_STATIC,                                                                                                    WIDTH,                                                                                                    HEIGHT))); 

        screenBuffer = (Uint8*)malloc( sizeof(Uint8) * 3 * WIDTH * HEIGHT );
        if (NULL == screenBuffer){
                SDL_Quit();
                return -5;
        }     
        memset(screenBuffer, 0, 3 * WIDTH * HEIGHT); //set to black
        SDL_UpdateTexture(      screenTexture,
                                                NULL,
                                                screenBuffer,
                                                WIDTH * sizeof(Uint8) );


        while( !quit && ( SDL_WaitEvent(&event) ) ) {              
                SDL_RenderClear(renderer);
                SDL_RenderCopy(renderer, screenTexture, NULL, NULL);
                SDL_RenderPresent(renderer);
        }

        SDL_Delay(3000);
        SDL_DestroyWindow(window);
        SDL_Quit();
        return 1;
}
4

1 に答える 1

3

これは、作成ウィンドウ if ステートメントです。

if ( NULL == ( window = SDL_CreateWindow( ...code... ) ) );    //what is ; doing here
{
    fprintf(fp, "Could not create SDL window: %s\n", SDL_GetError() );
    SDL_Delay(3000);
    SDL_Quit();
    return -3;
}

;最初の行の末尾にあることに気付きましたか? これは、括弧内のコードの部分が毎回実行されることを意味します。基本的に、コードは次のようになります。

if ( NULL == ( window = SDL_CreateWindow( ...code... ) ) );   //end of if


{    //gets executed every time
    fprintf(fp, "Could not create SDL window: %s\n", SDL_GetError() );
    SDL_Delay(3000);
    SDL_Quit();
    return -3;
}

このようなエラーがコードに少なくとも 1 つあります。

于 2013-09-13T20:55:12.037 に答える