渲染在我窗口的一小部分

时间:2016-10-31 17:18:24

标签: c rendering sdl

我目前正在使用 SDL2 。我在 Mac OS ,我正在使用 xCode 。 我创建了一个使用随机生成的点绘制线条的函数。 但是,当我尝试渲染线条时,它们只在我的窗口的一个子集中呈现(左上方)。

这是我的代码。

的main.c

#include <SDL2/SDL.h>
#include "utils.h"


#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480

// Prototypes
void drawRandomPoints( int pointsNo, SDL_Renderer *renderer );
void drawRandomLines( int linesNo, SDL_Renderer *renderer );


int main( int argc, const char * argv[] ) {

    SDL_Init( SDL_INIT_VIDEO );

    SDL_Window *window = SDL_CreateWindow( "Hello World", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_OPENGL );

    SDL_Renderer *renderer = SDL_CreateRenderer( window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC );

    int running = 1;
    SDL_Event event;
    while( running ) {

        while( SDL_PollEvent( &event ) ) {

            if( event.type == SDL_QUIT ) {

                running = 0;

            }

        }

        SDL_SetRenderDrawColor( renderer, 0, 0, 0, 255 );
        SDL_RenderClear( renderer );

        // Draw a point
        SDL_SetRenderDrawColor( renderer, 255, 0, 0, 255 );
        drawRandomLines( 100, renderer );


        SDL_RenderPresent( renderer );

    }

    SDL_DestroyRenderer( renderer );
    SDL_DestroyWindow( window );


    SDL_Quit();

    return 0;

}

void drawRandomPoints( int pointsNo, SDL_Renderer *renderer ) {

    int i = 0;

    for( i = 0; i < pointsNo; ++i ) {

        SDL_SetRenderDrawColor( renderer, getRandomColor(), getRandomColor(), getRandomColor(), 255 );
        SDL_RenderDrawPoint( renderer, getRandomNumber( 0, SCREEN_WIDTH ), getRandomNumber( 0, SCREEN_HEIGHT ) );

    }


}

void drawRandomLines( int linesNo, SDL_Renderer *renderer ) {

    int i = 0;

    for( i = 0; i < linesNo; ++i ) {

        SDL_SetRenderDrawColor( renderer, getRandomColor(), getRandomColor(), getRandomColor(), 255 );

        SDL_RenderDrawLine( renderer, getRandomNumber( 0, SCREEN_WIDTH ), getRandomNumber( 0, SCREEN_HEIGHT ), getRandomNumber( 0, SCREEN_WIDTH ), getRandomNumber( 0, SCREEN_HEIGHT ) );

    }

}

utils.c

#include "utils.h"
#include <stdlib.h>
#include <time.h>


int getRandomNumber( int min, int max ) {

    static int init = 0;

    if( !init ) {

        srand( time( NULL ) );
        init = 1;

    }

    return ( rand() % ( max - min + 1 ) ) + min;

}

int getRandomColor() {

    return getRandomNumber( 0, 255 );

}

这是编译时的结果。 SDL window

1 个答案:

答案 0 :(得分:0)

您只是通过定义这些来使用VGA尺寸的屏幕;

#define SCREEN_WIDTH 640
#define SCREEN_HEIGHT 480

试试这个

int SCREEN_WIDTH=640;
int SCREEN_HEIGHT=480;

并像这样添加到主;

SDL_Window *window = SDL_CreateWindow( "Hello World", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_ALLOW_HIGHDPI | SDL_WINDOW_OPENGL );
SDL_Renderer *renderer = SDL_CreateRenderer( window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC );

SDL_GL_GetDrawableSize(window,&SCREEN_WIDTH,&SCREEN_HEIGHT);