2016-10-31 1 views
0

Ich arbeite derzeit mit SDL2. Ich bin auf Mac OS und ich verwende xCode. Ich habe eine Funktion zum Zeichnen von Linien mit zufällig generierten Punkten erstellt. Wenn ich jedoch versuche, die Linien zu rendern, werden sie nur in einer Teilmenge meines Fensters (oben links) gerendert.Rendering in einem kleinen Abschnitt meines Fensters

Hier ist mein Code.

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); 

} 

Hier ist das Ergebnis beim Kompilieren. SDL window

+0

Sie sind nur VGA verwenden (640x480) und ich würde Ihre Anzeigeeinstellungen sind viel größer als die Wette ... Versuchen SDL_GetWindowSize mit (...) aus dem Zufallszahlen holen. – cleblanc

+0

Ich habe diese Funktion SDL_GL_GetDrawableSize gefunden, aber ich bin mir nicht sicher, wie Sie es verwenden, da es ein void Rückgabetyp ist. –

+0

Ich vermute, 'SDL_WINDOW_ALLOW_HIGHDPI' wirft dich ab. Welche Werte füllt ['SDL_GetRendererOutputSize()'] (https://wiki.libsdl.org/SDL_GetRendererOutputSize) 'w' und' h' mit? – genpfault

Antwort

0

Sie verwenden nur einen VGA-Bildschirm, indem Sie diese definieren;

#define SCREEN_WIDTH 640 
#define SCREEN_HEIGHT 480 

Versuchen Sie, diese

int SCREEN_WIDTH=640; 
int SCREEN_HEIGHT=480; 

und fügen wie diese Haupt;

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); 
+0

Das funktioniert! Danke –

+0

@PierrePasquet Bitte akzeptieren Sie die Antwort, wenn es für Sie funktioniert. – cleblanc

Verwandte Themen