2016-10-31 3 views
0

Я в настоящее время работаю с 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

+0

Вы используете только VGA (640x480), и я поставил бы ваши настройки дисплея намного больше, чем ... Попробуйте использовать SDL_GetWindowSize (...), чтобы выбрать случайные числа из. – cleblanc

+0

Я нашел эту функцию SDL_GL_GetDrawableSize, но я не уверен, как ее использовать с момента возврата типа void. –

+0

Я подозреваю, что 'SDL_WINDOW_ALLOW_HIGHDPI' отбрасывает вас. Какие значения ['SDL_GetRendererOutputSize()'] (https://wiki.libsdl.org/SDL_GetRendererOutputSize) заполняют 'w' и' h' с помощью? – genpfault

ответ

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

Это работает! Спасибо –

+0

@PierrePasquet Пожалуйста, примите ответ, если он сработает для вас. – cleblanc

Смежные вопросы