2016-10-31 6 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